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

Oracle - PG,Oracle使用psqlodbc驱动搭建透明网关,实现异库访问

原创 伊织鸟 2022-07-08
3368

软件版本

KEY 版本 IP地址 端口
Oracle 11.2.0.4 192.168.118.60 1521
PostgreSQL 12.9 192.168.118.140 5432
odbc 2.3.1
psqlodbc 12.02.00000

配置流程(所有流程都在Oracle服务器配置,不涉及PG计算节点)

1、安装odbc驱动

--安装ODBC驱动 su - root yum install -y unixODBC.x86_64 yum install -y postgresql-odbc.x86_64 rpm -qa|grep odbc
复制

图片.png

2、安装编译新版本psqlodbc驱动

psqlodbc下载地址:https://www.postgresql.org/ftp/odbc/versions/src/

建议安装新版本的psqlodbc驱动,否则可能会出现无报错,但是无法连接PG库的故障,参考“问题1”

##安装pg数据库 mkdir -p /app cd /opt/software/postgresql-12.9 ./configure --prefix=/app/postgresql-12.9 make make install ##编译psqlodbc-12版本 mkdir -p /opt/software/psqlodbc tar -xvf psqlodbc-12.02.0000.tar.gz cd /opt/software/odbc/psqlodbc-12.02.0000 ./configure --with-libpq=/app/postgresql-12.9 ##--with--libpq执行PG数据库安装目录 make maker install
复制

3、查看并修改odbcins配置

odbcinst -j cp /etc/odbcinst.ini /etc/odbcinst.ini.bak vi /etc/odbcinst.ini ##修改[PostgreSQL]部分 [PostgreSQL] Description = ODBC for PostgreSQL ##替换为新安装的psqlodbc Driver = /usr/local/lib/psqlodbcw.so Setup = /usr/lib64/libodbcpsqlS.so ##替换为新安装的psqlodbc Driver64 = /usr/local/lib/psqlodbcw.so Setup64 = /usr/lib64/libodbcpsqlS.so FileUsage = 1 ##保存
复制

图片.png

4、配置oracle用户的odbc.ini

使用root用户或者oracle用户的odbc.ini创建PostgreSQL DNS都可以,为了方便管理,使用oracle创建DNS

su - oracle vi /u01/app/oracle/.odbc.ini ##插入以下内容 [PG_LINK] Description = PostgresSQLODBC Driver = PostgreSQL Database = db_test Servername = 192.168.118.140 UserName = test Password = test Port = 5432 ReadOnly = 0 ##保存 ##验证 isql -v pg_link select count(*) from t1; ##验证表
复制

图片.png

5、检查oracle GTW(透明网关)组件安装情况

GTW组件默认在数据库软件安装时一同安装,无需单独安装

su - oracle dg4odbc
复制

图片.png

6、配置透明网关

注意目录

su - oracle cd $ORACLE_HOME/hs/admin vi initPG_LINK.ora ##插入以下文字 HS_FDS_CONNECT_INFO=PG_LINK HS_FDS_TRACE_LEVEL=255 HS_FDS_SHAREABLE_NAME=/usr/local/lib/psqlodbcw.so ##psqlodbc12驱动,如果配置不正确,可能会出现"问题1" HS_NLS_NCHAR=UCS2 HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8 set ODBCINI=/u01/app/oracle/.odbc.ini ##保存
复制

图片.png


7、配置tnsname.ora

注意IP地址和端口号,需指向透明网关所在服务器地址,本文档中为Oracle服务器计算节点

su - oracle cd $ORACLE_HOME/network/admin vi tnsnames.ora ##IP地址为透明网关IP地址 ##插入一下内容,注意每个tnsname以空行隔开 PG_LINK = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.118.60)(PORT = 1521)) (CONNECT_DATA = (SID = PG_LINK)) (HS = OK) ) ##保存
复制

图片.png


8、配置静态监听

su - oracle cd $ORACLE_HOME/network/admin vi listener.ora ##插入以下内容 SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME = PG_LINK) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) (PROGRAM=dg4odbc) ) ) ##保存 ##重启监听 lsnrctl stop && lsnrctl start lsnrctl status
复制

图片.png

9、验证tnsname

su - oracle tnsping pg_link 10
复制

图片.png

10、创建dblink并测试访问

su - oracle sqlplus / as sysdba create public database link dblink_pg1 connect to "test" identified by "test" using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.118.60)(PORT=1521))(CONNECT_DATA=(SID = PGLINK))(HS = OK))'select count(*) from "t1"@dblink_pg;
复制

图片.png

出现的问题

问题1:

故障现象: 运行sql出现如下错误提示,并且数据库日志中分别显示如下:

图片.png

图片.png

故障原因: psqlodbc驱动版本问题

处理方法: 替换透明网关initPGLINK.ora中的的HS_FDS_SHAREABLE_NAME参数为psqlodbc12

图片.png

问题2:

故障现象: 提示源端表不存在,但是isql可以正常访问

图片.png

故障原因: PG默认表名是区分大小写,而oracle是不区分大小写的。

处理方法: 对表名和where中的字段都需要带""
select * from “t1”@dblink_pg where “id”=1;

图片.png

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

评论

目录
  • 软件版本
  • 配置流程(所有流程都在Oracle服务器配置,不涉及PG计算节点)
    • 1、安装odbc驱动
    • 2、安装编译新版本psqlodbc驱动
    • 3、查看并修改odbcins配置
    • 4、配置oracle用户的odbc.ini
    • 5、检查oracle GTW(透明网关)组件安装情况
    • 6、配置透明网关
    • 7、配置tnsname.ora
    • 8、配置静态监听
    • 9、验证tnsname
    • 10、创建dblink并测试访问
  • 出现的问题
    • 问题1:
    • 问题2: