随着开源数据库技术的发展和去“O”工作的推进,越来越多企业生产系统选择使用Postgresql数据库。Pgsql采用多进程结构,其存储过程、函数的支持好于mysql。个人认为pgsql是oracle的最佳替代产品。但是pgsql作为一款开源数据库,其计算能力和稳定性还是无法与Oracle相提并论,所有当企业要使用PG替代oracle时,还是得从数据库的拆分和架构上下功夫。使用PG去“O”的核心步骤之一是数据迁移,迁移方案有多种,如ETL、ORACLE_FDW等,本文将重点介绍ORACLE_FDW的迁移过程。FDW是PG的一个开源插件,可以通过在github上下载编译安装,以实现类似ORACLEDBLINK的功能。FDW优点是配置简单,使用方便,缺点是不能实现增量迁移,所以只适合数据量较小或者停机时间较长的情况。下面开始本次分享。

插  件  安  装

PG软件安装,一般选用源码进行编译安装,此处不对安装过程进行详细描述(相信大家都是老司机哈)。

下载精简版Oracle客户端instantclient-*.zip,包含basic、sdk和sqlplus三个文件并解压。

配置好用户postgres的环境变量。LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/postgres/instantclient_11_2:/usr/local/pgsql/lib

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/pgsql/bin

ORACLE_HOME=/home/postgres/instantclient_11_2

PGDATA=/data

export PATH ORACLE_HOME LD_LIBRARY_PATH PGDATA

插件编译安装$ make

$ make install

验证是否安装成功

ORACLE_FDW配置和使用创建extensioncreate extension oracle_fdw;

postgres=# \dx

List of installed extensions

Name    | Version |   Schema   |              Description

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

oracle_fdw | 1.1     | public     | foreign data wrapper for Oracle access  -->说明创建成功

plpgsql    | 1.0     | pg_catalog | PL/pgSQL procedural language

创建server,使pg通过创建外部表连接oracle数据库CREATE SERVER spclora FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '10.26.5*.**:1521/spcltbk');

--创建server spclora 连接到oracle数据库

GRANT USAGE ON FOREIGN SERVER spclora TO userinfo_prod;

--将server授权给用户userinfo_prod

\c userinfodb userinfo_prod

--使用userinfo_prod切换到userinfodb

CREATE USER MAPPING FOR userinfo_prod SERVER spclora OPTIONS (user 'pgsync', password 'oracle');

--创建到oracle的映射,pgsync/oracle是oracle数据库的用户名和密码

创建外部表create FOREIGN table t_***_userinfo_fdw

(

phone***   VARCHAR(24) not null,

ser***tus    int4 not null,

createtime    timestamp with time zone default now() not null,

ups***time  timestamp with time zone default now() not null,

op**a*or      int4 not null,

che**me     timestamp with time zone,

lo**id       int4,

modu**code    VARCHAR(20),

modi***time  timestamp with time zone default now() not null

)SERVER spclora OPTIONS (schema 'SP***DP', table 'T_USERINFO_MV',prefetch '10240');

至此,通过访问外部表,即可访问ORACLE数据库对应表,上例建表语句中的options表示oracle的表信息SP***DP.T_USERINFO_MV。pretetch,表示从oracle预取的行数,默认是200,建议配置到最大10240,根据我们的实战经验,配置该参数后,数据迁移的速度至少提高50%。

数  据  迁  移

在PG侧创建表,然后使用insertinto pg_table select * from foreign_table即可实现数据迁移。迁移案例

某运营商项目一重要系统原数据库使用Oracle11.2.0.4,架构为HA架构,数据量约1TB,进行去“O”改造。考虑到去O后的效率以及数据增长等问题,架构上做了数据“对症下药”。数据库层面进行了拆分,日志数据存放到ES上,分发数据存放到Mongodb上,核心交易数据存放到PG中,日志数据无需迁移,分发数据可以在业务重建之后,从其他业务系统请求重新分发,也无需迁移,只需要迁移核心交易数据到PG中,需迁移的数据量大大减少。为提升PG数据库效率,PG架构使用一主两从加pgpool的读写分离架构。

根据业务的特点以及确保迁移影响降到最低,迁移方案采用数据按省份进行割接的轮动方式。每个省份的数据迁移,只有15分钟的停机时间。停机时间短,我们考虑过使用OGG进行增量迁移,使用过OGG的同学都是,这玩意就像有钱人家的大小姐,性子琢磨不透,纯“根据心情”,经常出现莫名其妙的岔子。再加上异构环境下,估计使用OGG,岔子更多,所以我们选择ORACLE_FDW作为迁移方案。

为了在规定的时间内完成数据迁移,我们采取了以下手段:由于在原表中以省份ID区分各省数据,列数据选择性较低,以省份过滤查询时,部分省份数据无法使用索引,全表扫描会导致迁移的时间延长;而且本次迁移,业务上也进行了更改,所以迁移数据时只需要原表的部分列。鉴于此情况,我们在源端使用了物化视图对原表数据进行裁剪,PG外部表与物化视图进行对应,这样迁移时可以减少无效的读取IO,缩短迁移时间。

修改外部表的prefetch参数为10240。

将多个表数据迁移编写脚本实现手工并行。

按照本篇介绍及手段方法,即可完成数据量1T左右的迁移工作,希望对你的工作有所启示和帮助,我们下回见。

oracle 导入1t dmp文件,利用FDW进行ORACLE到Postgresql的数据迁移相关推荐

  1. Oracle导入导出dmp文件步骤

    Oracle导入导出dmp文件步骤 加粗部分需按需改变,导入时的表空间名与导出前一致 导出dmp文件 第一步在sqlplus中运行: 第二步,在第一步运行完后,将查询出的结果都执行一遍 第三步打开电脑 ...

  2. oracle导入导出DMP文件【整个步骤】

    一.导入 1.创建表空间 //DDTECH表空间名称 create tablespace DDTECH datafile 'E:\app\oracle\oradata\DDTECH\TABLESPAC ...

  3. Toad for Oracle 导入MIP.dmp文件时:报内存不足时的解决办法:

    摘要:最近在使用Oracle数据库开发项目,其中在用Toad for Oracle连接操作Oracle11g的时候出现了问题,问题是这样的:在数据库管理员的连接下导入已经建立的用户的dmp文件,会报内 ...

  4. 更改由oracle导入的dmp文件的版本

    今天客户给了我一个从oracle11g数据库里面导出的一张表数据文件给我,文件的后缀是dmp文件,我把dmp文件导入我们的业务数据库中报错,后来网上一查是因为oracle数据库版本不一致的原因造成的, ...

  5. Oracle导入导出dmp文件

    create oracle目录,用user 登录sqlplus create or replace directory dpdata1 as '/A/B'; 给予权限, dba登录sqlplus gr ...

  6. 【产品工具使用】Navicat 导入Oracle数据库的dmp文件

    Navicat 导入Oracle数据库的dmp文件 测试用例版本: oracle 11g navicat 16 准备工作 在进行导入文件之前,必须对Oracle的服务进行检查,还有Oracle的监听程 ...

  7. mysql导入数据库dmp文件怎么打开_20181112-PostgreSQL数据库dmp文件导入(记录一次数据导入)...

    20181112-PostgreSQL数据库dmp文件导入 标注:dmp文件导入,场景:多个schema导入 1. 环境准备: postgres集群master节点上,postgres用户执行以下操作 ...

  8. oracle备份密码文件,[数据库]Oracle数据库备份dmp文件,使用cmd命令导入导出步骤,以及忘记Oracle密码_星空网...

    Oracle数据库备份dmp文件,使用cmd命令导入导出步骤,以及忘记Oracle密码 2013-07-30 0 dmp文件导入导出步骤 1.创建表空间 --datafile 的路径随便给,但是后面的 ...

  9. oracle导入多个dmp文件到一个用户,Oracle dmp文件导入(还原)到不同的表空间和不同的用户下...

    ------------------------------------- 从生产环境拷贝一个dmp备份文件,在另外一台电脑上搭建测试环境,用imp命令导入dmp文件时提示如下错误: 问题描述: IM ...

最新文章

  1. 为何云原生在吞噬世界 ?
  2. 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口
  3. ArcGIS 10.0安装之 ArcSDE的安装
  4. java上传视频到七牛云_Java进阶学习:将文件上传到七牛云中
  5. [Unity] Canvas 设置为 Screen Space - Camera 时,UI 被场景物体遮挡的解决办法:设置 Canvas 的 Plane Distance 为一个较小的数
  6. idea java web mysql_JavaWeb 开发环境配置 — 基于IDEA 2019.2
  7. 13.Linux/Unix 系统编程手册(上) -- 文件IO缓冲
  8. 三分钟了解APS系统中生产计划排程模块的基本原理
  9. JS/VUE 自定义效验 统一社会信用代码 营业执照注册号
  10. 激活navicat提示rsa public key not find的问题
  11. python程序中1—10的乘积_[求助]1个数1到10的乘积
  12. 蛇哥开局两星机器人视频_虎牙蛇哥五排上演末日人机套路 对面玩家被血虐
  13. 互联网,大数据和人工智能对我们的生活带来的影响
  14. scala中case class与一般的class的区别
  15. GRANT ALL PRIVILEGES
  16. JavaScript:表格生成器
  17. postman传LocalDateTime传不上的问题
  18. erdas裁剪影像_ERDAS软件应用(一)遥感影像数据裁剪
  19. 联想服务器应用场景,联想服务器承载沈阳地铁三大核心应用
  20. PostgreSQL 一行变多行

热门文章

  1. 在Windows服务器上搭建Nuget私人服务器(超~详细)
  2. WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法
  3. latex插入参考文献小技巧
  4. c30-程序中的三国天下(c31-程序中的内存布局)
  5. 【soft6星评论】中台只是一种说法,中小企业主们要擦亮眼睛
  6. Fly.Box 企业网盘2.2.1 发布
  7. 在OpenCV里使用图片修复
  8. 微信小程序免费http转https
  9. python 从菜鸟到高手 .pdf 下载_Python从菜鸟到高手pdf
  10. 【区块链论文整理】ICDE 篇