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

Oracle使用psqlODBC访问PostgreSQL

原创 YanLang 2023-04-07
436



[
说明
]


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;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论