合 Oracle 21c通过dg4odbc配置dblink连接到PostgreSQL
Tags: OraclePGDBLinkDG4ODBCOracle 21c 新特性
简介
在PG中访问PG可以通过dblink,在PG中访问Oracle可以通过oracle_fdw,访问MySQL可以通过mysql_fdw,具体过程可以参考:https://www.dbaup.com/pgzhongdefile_fdwpostgres_fdwhedblink.html
在Oracle访问SQL server需要配置Oracle Database Gateways透明网关,Oracle中访问SQL Server和MySQL的配置可以参考:https://www.dbaup.com/oracle-database-gatewaystoumingwangguandeanzhuanghepeizhi.html
在Oracle中连接PG的详细内容请参考:https://www.dbaup.com/zaioraclezhongtongguodblinkfangwenpgshujuku.html
本文只简单写出Oracle 21c到PG 13.8的配置过程。
环境准备
Oracle 21.3 CentOS 7.6.1810 172.17.0.2
PG 13.8 ,Debian GNU/Linux 11 172.17.0.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -- 创建Oracle主机,11.2.0.4环境 docker run -d --name lhroracle21c -h lhroracle21c \ -p 5510:5500 -p 55100:5501 -p 1530:1521 -p 3400:3389 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/oracle21c_ee_db_21.3.0.0 \ /usr/sbin/init -- 创建PG主机,已安装PG 13数据库 docker rm -f lhrpg13 docker run --name lhrpg13 -h lhrpg13 -d -p 54326:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:13.8 docker exec -it lhrpg13 bash su - postgres create database lhrdb; \c lhrdb create table test(id int); insert into test values(1),(2); |
安装postgresql的odbc驱动包
1 2 3 4 5 6 7 8 9 | -- 可以直接安装 yum install -y unixODBC.x86_64 -- 正确的安装方式 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm # yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install -y postgresql14-odbc postgresql14-libs |
配置/etc/odbc.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | cat > /etc/odbc.ini <<"EOF" #[$DSN]定义数据源名称,根据实际情况自定义 [PG_LINK] #数据源说明,根据实际情况自定义 Description = PostgreSQL connection to lhrdb #使用的驱动,上章节安装PostgreSQL的ODBC驱动所在位置 Driver = /usr/pgsql-14/lib/psqlodbcw.so Setup = /usr/pgsql-14/lib/psqlodbcw.so #数据库名,远程访问的数据库名 Database = lhrdb #数据库所在的主机名或IP Servername = 172.17.0.4 #数据库用户名(可不填,在代码中指定即可) UserName = postgres #数据库用户密码(可不填,在代码中指定即可) Password = lhr #数据库端口 Port = 5432 SocketBufferSize = 4096 FetchBufferSize = 500 ReadOnly = Yes RowVersioning = No ShowSystemTables = No #查询结果的字符编码 ConnSettings = set client_encoding to UTF8 EOF odbcinst -j export ODBCINI=/etc/odbc.ini isql --v isql PG_LINK -v select 1; select * from test; ln -sf /etc/odbc.ini /home/oracle/.odbc.ini |
结果如下说明配置正确:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [oracle@lhroracle21c ~]$ export ODBCINI=/etc/odbc.ini [oracle@lhroracle21c ~]$ isql --v unixODBC 2.3.1 [oracle@lhroracle21c ~]$ isql PG_LINK -v +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from test; +------------+ | id | +------------+ | 1 | | 2 | | 3 | +------------+ SQLRowCount returns 3 3 rows fetched |
配置透明网关
若Oracle是21c之前的版本,请参考:https://www.dbaup.com/zaioraclezhongtongguodblinkfangwenpgshujuku.html