暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Oracle_FDW插件Postgres连接Oracle并实现增删改查

IT那活儿 2023-01-16
1252
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!



前 言



Oracle_fdw是PG的一个外部数据接口,可以使PostgreSQL轻松跨库操作Oracle。Oracle_fdw的作用有以下两点

  • PG可以跨库增删改查Oracle中的表,可以查询Oracle的视图,可以使PG中的表和Oracle中表/视图作Join查询,类似dblink的功能。

  • 快速将Oralce表迁移进入PostgreSQL。

本文简单介绍下Oracle_fdw的安装和使用。



安装和使用



Oracle_FDW下载地址:https://github.com/laurenz/oracle_fdw#5-installation-requirements
官网下载:https://pgxn.org/dist/oracle_fdw/
  • oracle_fdw-ORACLE_FDW_2_3_0.zip

Oracle_fdw的编译依赖系统中需要有pg_config和Oracle的环境,需要部署以下三个oracle包,必须同平台同版本

下载地址:

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

  • instantclient-basic-linux.x64-11.2.0.4.0.zip

  • instantclient-sdk-linux.x64-11.2.0.4.0.zip

  • instantclient-sqlplus-linux.x64-11.2.0.4.0.zip

环境:
  • PostgreSQL:RHEL6.6+PG10.15

  • Oracle:RHEL6.6+Oracle11.2.0.4

步骤一创建oracle环境目录

mkdir /opt/oracle

chown postgres:postgres /opt/oracle

chmod 775 /opt/oracle

步骤二:解压三个oracle包

su - postgres

cd opt/oracle

unzip instantclient-basic-linux.x64-11.2.0.4.0.zip

unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip

unzip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip

步骤三配置环境变量,添加如下内容

vi .bash_profile

export ORACLE_HOME=/opt/oracle/instantclient_11_2

export OCI_LIB_DIR=$ORACLE_HOME

export OCI_INC_DIR=$ORACLE_HOME/sdk/include

export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

步骤四:安装ORACLE_FDW插件

unzip oracle_fdw-ORACLE_FDW_2_3_0.zip

cd oracle_fdw-ORACLE_FDW_2_3_0

make && make install

步骤五:创建外部数据封装器

postgres=# create extension oracle_fdw ;

postgres=# \des

步骤六:外部表使用

1)创建外部服务器

create server ora_test foreign data wrapper oracle_fdw options(dbserver '172.XX.XX.100:1521/ORCL');

修改IP及端口:

alter server ora_test options(set dbserver '172.XX.XX.100:1521/ORCL');

2)授权使用的用户

grant usage on foreign server ora_test to postgres;

3)创建用户映射,连接oracle的凭证

create user mapping for postgres server ora_test options (user 'query', password 'query123');

修改连接用户密码:

alter user mapping for postgres server ora_test options (set user 'query',set password 'query123');

4)创建外部表,注意类型的转换,SCOTT.EMP要求必须大写

create foreign table fdw_emp(

EMPNO integer options(key 'true') not null,

ENAME varchar(10),

JOB varchar(10),

MGR integer,

HIREDATE date,

SAL numeric(7,2),

COMM numeric(7,2),

DEPTNO integer

) server ora_test options (schema 'SCOTT',table 'EMP');


5)查看外部表信息

postgres=# select oracle_diag();

oracle_diag

---------------------------------------------------------------------------

oracle_fdw 2.3.0, PostgreSQL 10.15, Oracle client 11.2.0.4.0, ORACLE_HOME=/opt/oracle/instantclient_11_2



postgres=# select * from fdw_emp;

empno | ename | job | mgr | hiredate | sal | comm | deptno

-------+--------+-----------+------+------------+---------+---------+--------

7369 | SMITH | CLERK     | 7902 | 1980-12-17 | 800.00 | | 20

7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30

7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30

7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | | 20

7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30

7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | | 30

7782 | CLARK  | MANAGER | 7839 | 1981-06-09 | 2450.00 | | 10

7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | | 20

7839 | KING | PRESIDENT | | 1981-11-17 | 5000.00 | | 10

7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30

7876 | ADAMS | CLERK     | 7788 | 1987-05-23 | 1100.00 | | 20

7900 | JAMES | CLERK     | 7698 | 1981-12-03 | 950.00 | | 30

7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | | 20

7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 | | 10

(14 rows)

6)增删改外部表,要求一定有主键,外部表主键设置options(key 'true'),注意PG数据库事务提交机制

postgres=# insert into fdw_emp (empno,ename,job,sal,deptno) values(8888,'WANGYAQI','DBA',1000,10);

INSERT 0 1


postgres=# delete from fdw_emp where empno=8888;

DELETE 1


postgres=# update fdw_emp set comm=10000 where empno=7934;

UPDATE 1


推荐阅读:

利用FDW进行ORACLE到Postgresql的数据迁移



END



本文作者:王亚奇(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论