ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

PostgreSQL+Oracle跨库连接实操

2021-05-22 13:52:21  阅读:468  来源: 互联网

标签:qs PostgreSQL postgres vol 跨库 sum oracle nbr Oracle


在我们异构数据库数据迁移的过程中,涉及大量的跨库查询操作的需求。常见的跨库连接有A连B,B连B,B连A的现实需求。本文带给大家的是PostgreSQL和oracle之间上述三种跨库连接的实战分享。


[PostgreSQL连接Oracle]


使用Oracle_FDW实现Postgres连接Oracle

Oracle_fdw的编译依赖系统中需要有pg_config和Oracle的环境,需要安装oracle客户端。


1、安装客户端需要如下3个文件包

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

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

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


2、配置环境变量

export ORACLE_HOME=/opt/oracle/instantclient

export OCI_LIB_DIR=$ORACLE_HOME

export OCI_INC_DIR=$ORACLE_HOME/sdk/include

export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH


3、下载oracle_fdw插件并安装

unzip oracle_fdw-2.0.0.zip

cd oracle_fdw-2.0.0

Make

Make install


--检查确认没有依赖未解决

ldd oracle_fdw.so


4、创建拓展

postgres=# create extension oracle_fdw ;


postgres=# \des

List of foreign servers

Name |  Owner   | Foreign-data wrapper

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

oradb | postgres | oracle_fdw


5、创建外部数据源服务

postgres=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//192.168.217.120:1521/posdb');


6、建用户映射

postgres=# CREATE USER MAPPING FOR postgres SERVER oradb OPTIONS (user 'wen', password 'wen123');


7、创建外部表

postgres=# CREATE  FOREIGN TABLE "vol_audit_nbr_sum_qs" (

id int,

uuid character(32),

name character(32),

Minfo text) SERVER oradb OPTIONS (table 'vol_audit_nbr_sum_qs');


8、测试访问速度


测试结果:

1、使用postgres连接oracle查询2G的表,4520万行数据,全表扫描耗时9分钟23秒。

select * from vol_audit_nbr_sum_qs;


Time: 563775.627 ms (09:23.776)


2、建表时加入prefetch'10240' 参数后耗时5分22秒。

select * from vol_audit_nbr_sum_qs;


Time: 322470.280 ms (05:22.470)


[PostgreSQL连接PostgreSQL]


使用Postgres_FDW实现Postgresql连接Postgresql

Postgres_FDW为postgresql自带拓展可以直接创建。支持远程select和DML,和本地表操作一样。


1、创建拓展

postgres=# create extension postgres_fdw;


2、创建服务

postgres=# create server f_postgres foreign data wrapper postgres_fdw options (host '192.168.86.95',port '5433',dbname 'db_demo');


3、创建用户映射

postgres=# create user mapping if not exists for postgres server f_postgres options (user 'wen',password 'wen123');


4、创建外部表

postgres=# CREATE  FOREIGN TABLE "vol_audit_nbr_sum_qs" (

id int,

uuid character(32),

name character(32),

Minfo text) SERVER f_postgres OPTIONS (table_name 'vol_audit_nbr_sum_qs');


5、测试访问速度


测试结果:

1、使用postgres连接postgres查询2G的表,4520万行数据,全表扫描耗时12分钟59秒。

select * from vol_audit_nbr_sum_qs;


Time: 779932.685 ms (12:59.933)


2、建表时加入fetch_size'10240' 参数后耗时3分58秒。

select * from vol_audit_nbr_sum_qs;


Time: 238503.016 ms (03:58.503)


[Oracle连接PostgreSQL]


1、安装postgresql的odbc驱动包

--需要安装unixODBC 和 postgresql_odbc


yum install -y unixODBC.x86_64

yum install -y postgresql-odbc.x86_64


2、配置/etc/odbc.ini

[postgresql]

Description = PostgresSQLODBC

Driver = PostgreSQL

Database = testdb

Servername = 192.168.12.123

UserName = test

Password = test123

Port = 5432

ReadOnly = 0

ConnSettings = set client_encoding to UTF8


连接成功:

[root@localoracle ~]# isql postgresql

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

| Connected!                           |

|                                    |

| sql-statement                         |

| help [tablename]                      |

| quit                                 |

|                                    |

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


3、创建.odbc.ini文件

在/home/oracle下创建隐藏文件.odbc.ini

[PG_LINK]

Description        = PostgreSQL connection to SallyDB

Driver             = /usr/lib64/psqlodbc.so

Setup              = /usr/lib64/libodbcpsqlS.so

Database           = testdb

Servername         = 192.168.12.123

UserName           = test

Password           = test123

Port               = 5432

Protocol           = 12.2

ReadOnly           = No

RowVersioning      = No

ShowSystemTables   = No

ConnSettings       = set client_encoding to UTF8


4、配置透明网关

在$ORACLE_HOME/network/admin/下面创建initPG_LINK.ora文件,这个文件名字中的PG_LINK是上面自定义的名字

HS_FDS_CONNECT_INFO = PG_LINK

HS_FDS_TRACE_LEVEL = 255

HS_FDS_SHAREABLE_NAME=/usr/lib64/psqlodbc.so

HS_LANGUAGE=AMERICAN_AMERICA.ZHS16GBK

set ODBCINI=/home/oracle/.odbc.ini


5、配置tnsnames.ora文件

PG_LINK =

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.217.120)(PORT=1521))

(CONNECT_DATA=(SID=PG_LINK))

(HS=OK)

)


6、配置监听文件

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=PG_LINK)

(ORACLE_HOME=/u01/app/oracle/product/12.2/db_1)       (ENV="LD_LIBRARY_PATH=/usr/lib64/:/u01/app/oracle/product/12.2/db_1/bin/")        (PROGRAM=dg4odbc)

)

)


7、创建DBLINK

create database link to_pglink connect to "test" identified by "test123" using 'PG_LINK';


8、访问PG数据库

访问postgre的数据库表是需要表名字小写并加上双引号

select count(*) from "vol_audit_nbr_sum_qs"@to_pglink;


9、测试访问速度

测试结果:

使用oracle连接postgres查询2G的表,4520万行数据,全表扫描耗时10分钟37秒。

SQL> set timing on    

SQL> set autot trace

SQL> select "billing_cycle_id" from "vol_audit_nbr_sum_qs"@to_pglink;


45201535 rows selected.


Elapsed: 00:10:37.14


标签:qs,PostgreSQL,postgres,vol,跨库,sum,oracle,nbr,Oracle
来源: https://blog.51cto.com/u_15127668/2802604

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有