当前位置: 首页 > news >正文

oracle与mysql跨库连接_PostgreSQL+Oracle跨库连接实操

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

[PostgreSQL连接Oracle]

使用Oracle_FDW实现Postgres连接Oracle

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

1、安装客户端需要如下3个文件包unzipinstantclient-basic-linux.x64-12.2.0.1.0.zip

unzipinstantclient-sdk-linux.x64-12.2.0.1.0.zip

unzipinstantclient-sqlplus-linux.x64-12.2.0.1.0.zip

2、配置环境变量exportORACLE_HOME=/opt/oracle/instantclient

exportOCI_LIB_DIR=$ORACLE_HOME

exportOCI_INC_DIR=$ORACLE_HOME/sdk/include

exportLD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

3、下载oracle_fdw插件并安装unziporacle_fdw-2.0.0.zip

cdoracle_fdw-2.0.0

Make

Makeinstall

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

lddoracle_fdw.so

4、创建拓展postgres=#create extension oracle_fdw ;

postgres=#\des

Listof 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"(

idint,

uuidcharacter(32),

namecharacter(32),

Minfotext) 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_postgresoptions (user 'wen',password 'wen123');

4、创建外部表postgres=#CREATE  FOREIGN TABLE "vol_audit_nbr_sum_qs"(

idint,

uuidcharacter(32),

namecharacter(32),

Minfotext) 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

yuminstall -y unixODBC.x86_64

yuminstall -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

setODBCINI=/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、创建DBLINKcreate database link to_pglink connect to "test" identified by"test123" using 'PG_LINK';

8、访问PG数据库

访问postgre的数据库表是需要表名字小写并加上双引号selectcount(*) 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;

45201535rows selected.

Elapsed:00:10:37.14

相关文章:

  • php mysql 域名空间_域名空间pipni.cz申请和使用攻略(MYSQL+PHP+CGI+mail+FTP)
  • mysql条件删除表中某些行数据_根据MySQL中的条件仅删除表中的某些行
  • mysql pdo rowcount_PDO rowCount()在MySQL上有效,但在SQL Server 2008 R...
  • mysql+数据库索引策略_mysql数据库索引
  • 企业组织架构mysql_[MySQL] 数据目录的组织架构
  • matlab一维搜索_工程优化设计与Matlab实现——一维搜索方法(黄金分割法)
  • mysql源码索引_Mysql中的索引
  • python3.5如何安装pip管理工具_python3.5.2安装pip管理工具
  • vue watch监听对象的属性_手把手教你深入Vue中对比computed和watch属性的区别
  • python自媒体混剪视频_自媒体短视频运营中的混剪怎么做?我们又该如何去寻找素材呢?...
  • mysql延迟同步sql_delay_彻底终结MySQL同步延迟问题
  • java 接口发布_HTTP接口的发布,用Javaweb如何实现?
  • java object操作_java_object的具体使用--上帝
  • java web编程题_Java开发经典面试题:Javaweb相关
  • java里的引用_探究Java中的引用
  • 【React系列】如何构建React应用程序
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • ComponentOne 2017 V2版本正式发布
  • co模块的前端实现
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ES6简单总结(搭配简单的讲解和小案例)
  • Fastjson的基本使用方法大全
  • HTTP中的ETag在移动客户端的应用
  • idea + plantuml 画流程图
  • Javascript基础之Array数组API
  • Java深入 - 深入理解Java集合
  • JSONP原理
  • js中的正则表达式入门
  • MYSQL 的 IF 函数
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从零开始在ubuntu上搭建node开发环境
  • 给初学者:JavaScript 中数组操作注意点
  • 关于字符编码你应该知道的事情
  • 使用Swoole加速Laravel(正式环境中)
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 问题之ssh中Host key verification failed的解决
  • 异常机制详解
  • NLPIR智能语义技术让大数据挖掘更简单
  • Spring第一个helloWorld
  • # 数论-逆元
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (5)STL算法之复制
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (ZT)出版业改革:该死的死,该生的生
  • (二)学习JVM —— 垃圾回收机制
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)详解PHP处理密码的几种方式
  • .naturalWidth 和naturalHeight属性,
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET中的Exception处理(C#)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面