• 售前

  • 售后

热门帖子
入门百科

PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤

[复制链接]
123456879 显示全部楼层 发表于 2021-8-14 15:19:56 |阅读模式 打印 上一主题 下一主题
配景:

同一个项目两个体系分别使用了PG库和Oracle库,Oracle是生产库,数据动态更新,如今在PG库中需要实时的获取到更新的数据进行统计,基于此种方式,可以通过ETL的工具实现,但是需要定期进行维护等,于是想着是否可以通过类似于Oracle数据库DBLINK的方式去实现,经过网上查找干系资料,发现可以通过oracle_fdw实现。
测试情况:

本地搭建测试情况,基础设置如下:
Oracle数据库测试服务器(IP:192.168.1.110):WIN10操作体系,Oracle数据库版本为11.2.0.4,实例名为orcl,安装有32位客户端;
PG库测试服务器(捏造机,IP:192.168.30.128,NAT模式):WIN10操作体系,PG数据库版本为11.11.1;
实现步调:

1、首先确定网络通常,在PG库服务器可以访问到Oracle库服务器。

2、安装PG库(步调略)。这里需要留意,安装完成的PG库没有开启长途访问,假如需要长途访问,需要先修改pg_hba.conf文件,添加以下内容即可。
host all all 0.0.0.0/0 md5
3、下载oracle_fdw,留意下载时候需要匹配PG库的版本。
下载地点:Releases · laurenz/oracle_fdw · GitHub

我这里下载的是匹配PG11,选择Windows64位置操作体系的。
留意:fdw版本必须和PG库版本以及操作体系版本相对应,否则背面会出标题。
3、解压oracle_fdw,将【lib】和【share/extension】文件夹中文件拷贝到PG库安装路径下对应的【lib】和【share/extension】文件夹中。

拷贝之后,通过sql语句可以查询到oracle_fdw,分析文件拷贝放置成功,但是尚未安装(isstalled_version为空)。
  1. select * from pg_available_extensions;
复制代码

4、安装Oracle客户端(步调略)
先不消急着安装oracle_fdw(安装也不会成功),由于还需要Oracle客户端支持。假如不安装Oracle客户端,会有下面的错误提示。

Oracle客户端建媾和毗连的Oracle服务端采用类似版本(测试有小版本差异也不影响,大版本未测试),另外看网上资料也可以按照轻量级的oracle instant client替代,这里我没有试过,有兴趣的可以实验一下。

安装完成后留意先辈行毗连测试,确保毗连正常。
留意:客户端的版本必须和PG库的划一,例如我安装的是64位的PG库,那么肯定要安装64位的oracle客户端,之前习惯安装了32位的客户端,在创建外部表后没法打开,提示下面错误。

假如还是有标题,可以查抄安装路径是否已经写入Path变量中,将其移动至最上面。

5、创建安装oracle_fdw
  1. -- 创建oracle_fdw
  2. create extension oracle_fdw;
复制代码

安装成功后通过下面之前的语句进行验证。
  1. select * from pg_available_extensions;
复制代码

可以看到installed_version已经体现安装版本了,验证表示安装成功。
留意:假如多次安装失败,建议可以重启一下PG服务大概服务器后重试。
6、Oracle库中制作测试数据
数据库毗连信息如下:192.168.1.110/orcl 用户名/暗码:GIS/GIS
  1. -- Create test table
  2. create table ORACLEDATA_TEST
  3. (
  4.    ID   NUMBER(10) not null,
  5.    XZQMC        NVARCHAR2(50),
  6.    XZQDM        NVARCHAR2(30)
  7. )
复制代码
  1. -- insert test data
  2. insert into oracledata_test values(1,'市南区','370202');
  3. insert into oracledata_test values(2,'市北区','370203');
复制代码
增长测试数据后留意进行提交操作。

7、PG库创建Oracle毗连
  1. --创建Oracle外部连接,其中oradb_110为连接名称
  2. create server oradb_110 foreign data wrapper oracle_fdw options(dbserver '192.168.1.110/orcl');
复制代码

创建后可以通过毗连获取Oracle数据库数据。
8、PG库进行用户授权
  1. --授权
  2. grant usage on foreign server oradb_110 to postgres;
复制代码

授权根据现实需要进行。
9、创建到Oracle的映射
  1. --创建到oracle的映射
  2. create user mapping for postgres server oradb_110 options(user 'GIS',password 'GIS');
复制代码
其中oradb_110是之前创建的数据库毗连名称,GIS为毗连Oracle的用户名和暗码。
10、创建需要访问Oracle的对应表
留意这里创建的时候要留意字段类型的转换,Oracle和PG库在字段类型上还是有所差异的。其中oradb_110是我们上面创建的数据库毗连名称,GIS是毗连。
  1. --创建需要访问的oracle中对应表的结构
  2. create foreign  table ORACLEDATA_TEST_PG
  3. (
  4.    ID   numeric(10) not null,
  5.    XZQMC        VARCHAR(50),
  6.    XZQDM        VARCHAR(30)
  7. ) server oradb_110 options(schema 'GIS',table 'ORACLEDATA_TEST');
复制代码

留意:这里创建的表并不像是视图那样获取oracle指定表中的字段,而是通过顺序映射的方式,背面会进行测试分析。
11、如今通过外部表即可检察Oracle过来的数据。

假如需要对创建的内容进行删除,可以使用下面语句:
  1. DROP FOREIGN TABLE table_name;
  2. DROP USER MAPPING FOR user_name SERVER server_name;
  3. DROP SERVER server_name;
复制代码
11、数据同步测试。
在oracle数据库中实时插入一条记载
  1. -- insert test data
  2. insert into oracledata_test values(3,'李沧区','370203');
复制代码
插入数据后留意提交,然后查询确认。

在PG库中进行查询确认:

可以看到,数据可以实时的同步过去。
12、表映射测试。
例如如今的测试表中有三个字段,我在PG库中假如只用到第一个和第三个字段,那我的外部表如许去构建:
  1. --创建需要访问的oracle中对应表的结构
  2. create foreign  table ORACLEDATA_TEST_PG_2
  3. (
  4.    ID   numeric(10) not null,
  5.    XZQDM        VARCHAR(30)
  6. ) server oradb_110 options(schema 'GIS',table 'ORACLEDATA_TEST');
复制代码
然后查询数据:

从结果中可以看出,我们选择的xzqdm获取到的并非是xzqdm的值,而是xzqmc的值,其为根据顺序映射的,并非是通过字段名称映射。
13、性能方面
开端测试了一下,对于大数据量性能还是比较低的,这块没有进行严格的测试,背面有时机可以再补充。
参考资料:
详解PostgreSQL成功安装oracle_fdw方法,办理the specified procedure could not be found错误_ljinxin的博客-CSDN博客
PostgreSQL之oracle_fdw安装与使用 - Kevin_zheng - 博客园 (cnblogs.com)
到此这篇关于PostgreSQL通过oracle_fdw访问Oracle数据的实现步调的文章就介绍到这了,更多干系PostgreSQL访问Oracle数据内容请搜索草根技术分享从前的文章或继承浏览下面的干系文章盼望各人以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作