暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Oracle使用psqlODBC访问PostgreSQL

IT那活儿 2020-12-02
2730
[
说明
]

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;
最后修改时间:2020-12-02 10:03:43
文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论