资讯专栏INFORMATION COLUMN

Oracle使用psqlODBC访问PostgreSQL

IT那活儿 / 2452人阅读
Oracle使用psqlODBC访问PostgreSQL
[
说明
]


Oracle数据库网关可以透明地访问其他数据库,Oracle HS Agent将SQL语句转换为非Oracle数据库(PostgreSQL)可以理解的SQL语句,并通过ODBC 数据源发送该SQL语句,在PostgreSQL中执行后将结果返回Oracle数据库,本文介绍如何配置并访问PostgreSQL数据库。


[
测试环境
]


Oracle 服务器

操作系统:RHEL 6.9

软件版本:Oracle 11.2.0.4

主机地址:192.168.21.13

监听端口:1521

PostgreSQL 服务器

操作系统:RHEL 7.8

软件版本:PostgreSQL 10.2

主机地址:192.168.21.125

服务端口:5432

数据库名:MYPGDB

用户密码:mypguser/oracle


[
配置
]


PostgreSQL 服务器


安装并创建相关数据库,使用pgadmin测试,确保远程连接正常。


Oracle 服务器

安装 unixODBC 软件包

 yum -y install unixODBC*

安装 PostgreSQL ODBC 驱动

 yum -y install postgresql-odbc postgresql-libs

为驱动创建数据源

 odbcinst -j
 
 odbc_config --odbcini --odbcinstini

配置 psqlODBC驱动库

默认已经创建了[PostgreSQL]条目。

 # Example driver definitions
 
 # Driver from the postgresql-odbc package
 # Setup from the unixODBC package
 [PostgreSQL]
 Description     = ODBC for PostgreSQL
 Driver          = /usr/lib/psqlodbc.so
 Setup           = /usr/lib/libodbcpsqlS.so
 Driver64        = /usr/lib64/psqlodbc.so
 Setup64         = /usr/lib64/libodbcpsqlS.so
 FileUsage       = 1
 
 # Driver from the mysql-connector-odbc package
 # Setup from the unixODBC package
 [MySQL]
 Description     = ODBC for MySQL
 Driver          = /usr/lib/libmyodbc5.so
 Setup           = /usr/lib/libodbcmyS.so
 Driver64        = /usr/lib64/libmyodbc5.so
 Setup64         = /usr/lib64/libodbcmyS.so
 FileUsage       = 1

创建数据源


数据源名称为 pgdsn,可自定义其他名称,注意在后继配置中引用时保持一致。


PostgreSQL数据库名为 MYPGDB, 服务器/端口为 192.168.21.125/5432, 用户名/密码为 mypguser/oracle。

 [pgdsn]
 Driver = PostgreSQL
 Description = PostgreSQL ODBC Driver
 Database = MYPGDB
 Servername = 192.168.21.125
 Username = mypguser
 Password = oracle
 Port = 5432
 UseDeclareFetch = 1
 CommLog = /tmp/pgodbclink.log
 Debug = 1
 LowerCaseIdentifier = 1

测试 ODBC 连接

 [root@rhel69rac1 ~]# isql pgdsn
 +---------------------------------------+
 | Connected!                           |
 |                                       |
 | sql-statement                         |
 | help [tablename]                     |
 | quit                                 |
 |                                       |
 +---------------------------------------+
 
 SQL> select current_database(),inet_server_port();
 +-----------------------------------------------------------------+-----------------+
 | current_database                                               | inet_server_port|
 +-----------------------------------------------------------------+-----------------+
 | MYPGDB                                                           | 5432           |
 +-----------------------------------------------------------------+-----------------+
 SQLRowCount returns -1
 1 rows fetched
 SQL>

创建 Oracle 数据库网关


在 $ORACLE_HOME/hs/admin 目录下创建 init<数据源名>.ora 文件,本测试为 initpgdsn.ora。

 HS_FDS_CONNECT_INFO = pgdsn
 HS_FDS_TRACE_LEVEL = DEBUG
 HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
 
 set ODBCINI=/etc/odbc.ini


调整 Oracle 监听配置


注意集群环境的监听文件位置为$GRID_HOME/network/admin/listener.ora。

 LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.13)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
    )
  )
 
 SID_LIST_LISTENER =
  (SID_LIST =
     (SID_DESC=
      (SID_NAME = pgdsn)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
       (ENVS="LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/u01/app/oracle/product/11.2.0/db_1")
       (PROGRAM=dg4odbc)
    )
  )


添加 Oracle TNS 配置

配置文件为 $ORACLE_HOME/network/admin/tnsnames.ora。

 pgdsn =
   (DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcp)(HOST = 192.168.21.13)(PORT = 1521))
     (CONNECT_DATA=(sid=pgdsn))
     (HS=OK)
 )

重启监听

 lsnrctl stop
 lsnrctl start

创建 Database Link

 SQL> create public database link pglink connect to "mypguser" identified by "oracle" using pgdsn;

访问测试

注意表名需要添加双引号。

 SQL> select count(*) from "pg_settings"@pglink;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130075.html

相关文章

  • 阿里云如何打破Oracle迁移上云的壁垒

    摘要:摘要第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破迁移上云的壁垒为题的演讲。于是,阿里云给出了上面的解决方案。 摘要: 2018第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破Oracle迁移上云的壁垒为题的演讲。Oracle是指数据库管理系统,面对Oracle迁移上云的壁垒,阿里云如何能够打破它呢?本文提出了Oracle 到云数据库P...

    chavesgu 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<