Oracle配置dblink访问PostgreSQL的操作方法


Posted in PostgreSQL onMarch 21, 2022

Oracle dblink的底层是通过ODBC连接PostgreSQL执行SQL的,需安装unixODBC和PostgreSQL ODBC驱动(它们的配置文件是:odbcinst.ini和odbc.ini),还需配置Oracle网络使用这个驱动。以下操作都是在Oracle服务器上进行:

以root用户安装unixODBC:

yum install unixODBC unixODBC-devel.x86_64

unixODBC相当于Linux中管理所有数据库ODBC驱动的管理器。

以root用户安装PostgreSQL ODBC驱动
编译安装,以root执行:

yum install libpq5-devel.x86_64
wget https://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-12.02.0000.tar.gz
tar xf psqlodbc-12.02.0000.tar.gz
cd psqlodbc-12.02.0000
./configure
make
make install

默认安装到/user/local/lib

配置odbcinst.ini和odbc.ini,以root用户执行:

vim /etc/odbcinst.ini(不区分大小写)

Oracle配置dblink访问PostgreSQL的操作方法

/usr/local/lib/psqlodbcw.so 是PostgreSQL ODBC驱动的库。
/usr/lib64/libodbcpsqlS.so 是unixODBC的库。

vim /etc/odbc.ini

Oracle配置dblink访问PostgreSQL的操作方法

这里Driver应与odbcinst.ini中的[PostgreSQL]对应,可以取任何名字,但两者需要相同。其它参数视具体PostgreSQL服务器而定。[PG]是一个连接PostgreSQL的配置名称,其它应用程序(如Oracle)就是引用这个名称访问PostgreSQL。
测试一下这个ODBC连接能否工作:

Oracle配置dblink访问PostgreSQL的操作方法

配置Oracle网络,以oracle用户执行,涉及3个Oracle配置文件的修改:

$ORACLEHOME/network/admin/listener.ora
$ORACLEHOME/hs/admin/init<SID_NAME>.ora
$ORACLEHOME/network/admin/tnsnames.ora

1)在listener.ora中,增加一项配置(红圈部分),它代表PostgreSQL提供的数据库服务,Oracle将PostgreSQL也看成一个Oracle实例,SID_NAME = PGINSTANCE是给它定义一个实例名,这个名称任意,但是这个名称决定了第二个配置文件$ORACLEHOME/hs/admin/init<SID_NAME>.ora的文件名,例如initPGINSTANCE.ora。

Oracle配置dblink访问PostgreSQL的操作方法

2)$ORACLEHOME/hs/admin/init<SID_NAME>.ora
实例PGINSTANCE连接PostgreSQL数据库时,Oracle会到$ORACLEHOME/hs/admin/下找名为initPGINSTANCE.ora的配置文件,里面是关于ODBC连接的信息,Oracle使用这些信息连接PostgreSQL,例如,在我的环境中,这个文件内容如下:

Oracle配置dblink访问PostgreSQL的操作方法

HS_FDS_CONNECT_INFO = PG 这个参数指向odbc.ini文件中的ODBC连接名称[PG],参考前面。HS_FDS_SHAREABLE_NAME =/usr/local/lib/psqlodbcw.so 这个参数设置PostgreSQL ODBC驱动的路径,与odbcinst.ini中Driver64相同。
如果PostgreSQL的字符编码是UTF8,那么下面两个参数应该这样设置:

HS_NLS_NCHAR=UCS2
HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8

3)在tnsnames.ora中,增加一项(红圈):

Oracle配置dblink访问PostgreSQL的操作方法

pglink是客户端到PostgreSQL实例的连接配置,只要注意一点:“SID = PGINSTANCE”中,SID应设置为listener.ora中PostgreSQL的实例名,例如这里就是PGINSTANCE。pglink这个名称,将在创建dblink时使用。

创建dblink
在sqlplus或其它终端执行

create database link dl_pgsql connect to "postgres" identified by "post123" using 'pglink';

其中'pglink'是tnsnames.ora文件里定义的,这里把Oracle数据库作为客户端,去连接pglink所指的实例。
"postgres" identified by "post123" 是指PostgreSQL中的用户。
这各名称为dl_pgsql的dblink所连接的PostgreSQL数据库名由odbc.ini的Database参数指定。postgres用户应该对Database所指的数据库,有足够访问权限。

通过dblink访问PostgreSQL
假设emp表在名为postgres的数据库中的名为public的schema下,Oracle完成上面的配置后,可以这样访问:

select * from "public"."emp"@dl_pgsql;

创建和使用别名

CREATE SYNONYM emp_table FOR "public"."emp"@dl_pgsql;
select * from emp_table;

到此这篇关于Oracle配置dblink访问PostgreSQL的文章就介绍到这了,更多相关Oracle dblink访问PostgreSQL内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PostgreSQL 相关文章推荐
Centos环境下Postgresql 安装配置及环境变量配置技巧
May 18 PostgreSQL
postgresql无序uuid性能测试及对数据库的影响
Jun 11 PostgreSQL
浅谈PostgreSQL表分区的三种方式
Jun 29 PostgreSQL
PostgreSQL自动更新时间戳实例代码
Nov 27 PostgreSQL
PostgreSQL数据库创建并使用视图以及子查询
Apr 11 PostgreSQL
PostgreSQL基于pgrouting的路径规划处理方法
Apr 18 PostgreSQL
PostgreSQL常用字符串分割函数整理汇总
Jul 07 PostgreSQL
Rust 连接 PostgreSQL 数据库的详细过程
Jan 22 #PostgreSQL
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
PostGIS的安装与入门使用指南
PostgreSQL13基于流复制搭建后备服务器的方法
基于PostgreSQL/openGauss 的分布式数据库解决方案
PostgreSQL自动更新时间戳实例代码
Nov 27 #PostgreSQL
关于PostgreSQL JSONB的匹配和交集问题
Sep 14 #PostgreSQL
You might like
PHP根据两点间的经纬度计算距离
2014/10/31 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
详解vue-router基本使用
2017/04/18 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
大学生毕业自我评价范文分享
2013/11/07 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
信仰观后感
2015/06/03 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL