oracle到greenplum的迁移实践

最近在做oracle到greenplum的迁移实践,步骤如下:1. 使用ora2pg实现Oracle的数据结构迁移到GP的实现过程2. Oracle的数据迁移到GP的实现过程 1. ora2pg的使用 地址: https://github.com/darold/ora2p 关系图如下: 需要安装DBD-oracle,DBD-pg,DBI模块,配置conf后可以把oracle的数据结构(table,view,package等)转化成PG的数据结构.也可以配置直接把oracle库的数据导入到PG里面.环境参数:OS RHEL6.5 64bitOracle client 10.2.0.5.0GP 4.2.6.0模块的参数在图上已经详细标注出来了.模块的安装标准的perl安装方法:perl Makefile.PLmakemake testmake install 介绍一下配置文件:

1 ORACLE_HOME /home/oracle/client_1 2 ORACLE_DSN dbi:Oracle:host=192.168.11.1;sid=orcl 3 ORACLE_USER manager 4 ORACLE_PWD tiger 5 SCHEMA test 6 TYPE TABLE VIEW PACKAGE COPY 7 PG_NUMERIC_TYPE 0 8 PG_INTEGER_TYPE 1 9 DEFAULT_NUMERIC float 10 SKIP fkeys pkeys ukeys indexes checks 11 NLS_LANG AMERICAN_AMERICA.UTF8 12 PG_DSN dbi:Pg:dbname=easyetl;host=127.0.0.1;port=5432 13 PG_USER easyetl 14 PG_PWD password 15 OUTPUT output.sql

1-4 配置源端Oracle的信息

5    oracle的schema取值

6    准备转化的数据类型,也包括导数据的copy命令

7-9  用来转化oracle的number(p,s)到PG的类型:

7表示是否使用PG内部的数据类型,0表示不使用,1表示使用

8表示在7设置为0时,如果8设置为1,则类型number(p)的定义变更为integer;如果8设置为0,则number(p)也转化为numeric(p)

9表示是8设置为1的时候,类型number转化为float,如果8设置为0,则9不起作用.

简单的设置,如果7,8均设置为0,那么number(p) --> numeric(p),number(p,s) --> numeric(p,s), number --> numeric

10 约束们是否需要创建

11 语言选择

12-14 配置目的端PG(GP亦可),如果这三行信息不配置,也没关系,可以生成oracle转化为PG的脚本

15 生成文件

迁移中出现的情况:

(1) 表可以完全迁移过去

(2) 视图里面如果没有起别名的话,也需要手动添加别名

(3) package需要手动修改.注:ver13版本的package生成需要把perform/decode屏蔽掉,因为这二点未做好,模块为PLSQL.pm.

当然package转化不仅仅只是这部分东西,主要的有:

a 别名需要显式写出

b 隐式转化要显式写出

c 函数的差异(GP官方有一套Oracle的函数实现,基本上够用)

d oracle里面非标准写法,如: a left join b写成 a,b where a.xx=b.xx(+)

 

2. Oracle的数据迁移到GP的实现过程