软件版本
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
复制
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
##保存
复制
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; ##验证表
复制
5、检查oracle GTW(透明网关)组件安装情况
GTW组件默认在数据库软件安装时一同安装,无需单独安装
su - oracle dg4odbc
复制
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
##保存
复制
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)
)
##保存
复制
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
复制
9、验证tnsname
su - oracle tnsping pg_link 10
复制
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;
复制
出现的问题
问题1:
故障现象: 运行sql出现如下错误提示,并且数据库日志中分别显示如下:
故障原因: psqlodbc驱动版本问题
处理方法: 替换透明网关initPGLINK.ora中的的HS_FDS_SHAREABLE_NAME参数为psqlodbc12
问题2:
故障现象: 提示源端表不存在,但是isql可以正常访问
故障原因: PG默认表名是区分大小写,而oracle是不区分大小写的。
处理方法: 对表名和where中的字段都需要带""
select * from “t1”@dblink_pg where “id”=1;
最后修改时间:2022-07-11 14:02:13
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
目录