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 相关文章推荐
PostgreSQL存储过程实用脚本(二):创建函数入门
Apr 05 PostgreSQL
通过Qt连接OpenGauss数据库的详细教程
Jun 23 PostgreSQL
postgresql 删除重复数据案例详解
Aug 02 PostgreSQL
Oracle配置dblink访问PostgreSQL的操作方法
Mar 21 PostgreSQL
PostgreSQL事务回卷实战案例详析
Mar 25 PostgreSQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
Apr 12 PostgreSQL
postgreSQL数据库基础知识介绍
Apr 12 PostgreSQL
PostgreSQL怎么创建分区表详解
Jun 25 PostgreSQL
PostgreSQL逻辑复制解密原理解析
Sep 23 PostgreSQL
Rust 连接 PostgreSQL 数据库的详细过程
Jan 22 #PostgreSQL
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
PostGIS的安装与入门使用指南
PostgreSQL13基于流复制搭建后备服务器的方法
基于PostgreSQL/openGauss 的分布式数据库解决方案
PostgreSQL自动更新时间戳实例代码
Nov 27 #PostgreSQL
关于PostgreSQL JSONB的匹配和交集问题
Sep 14 #PostgreSQL
You might like
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
Yii配置文件用法详解
2014/12/04 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
使用Tkinter制作信息提示框
2020/02/18 Python
基于FME使用Python过程图解
2020/05/13 Python
python能做哪些生活有趣的事情
2020/09/09 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
淘宝店策划方案
2014/06/07 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
合作合同协议书范本
2015/01/27 职场文书
五年级数学教学反思
2016/02/16 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
vue项目支付功能代码详解
2022/02/18 Vue.js