ITPub博客

首页 > 数据库 > Oracle > ORACLE Goldengate测试解决源端和目标端表结构字段位置不同的2种实现方法

ORACLE Goldengate测试解决源端和目标端表结构字段位置不同的2种实现方法

原创 Oracle 作者:wbslxw 时间:2016-03-23 12:40:57 1 删除 编辑

测试环境:

源端操作系统:rhel5.6

目标端操作系统:windows2008 R2

源和目标使用的数据版本均为:11.2.0.4.0

一、先模拟问题现象
源和目标端搭建好OGG软件和oracle数据库(搭建过程略)
源端测试用户test
目标端测试用户test1

(1)首先源和目标建表(源表和目标表第二和第三字段交换顺序):
源:create table test.test7(col1 int, col2 int, col3 int);
目标:create table test1.test7(col1 int, col3 int, col2 int);

(2)源和目标端启动OGG进程,在源端插入记录
insert into test.test7 values(1,2,3);
commit;


对比数据发现,OGG默认同步表是按照列的顺序来的,而不是按照列名来对应

二、这个问题要解决有两种办法:
1、使用COLMAP方法指定列,这个方法可以在目标端的replicat进程上配置
本例中目标端的replicat进程名称为:rep1
edit param rep1   --修改目标端rep1进程

replicat rep1
--setenv (NLS_LANG = 'SIMPLIFIED CHINESE_CHINA.AL32UTF8')
--setenv (NLS_LANG = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK')
--setenv (NLS_LANG = 'SIMPLIFIED AMERICAN_AMERICA.ZHS16GBK')
setenv (ORACLE_SID = ORCL)
USERIDAlias wallettest
--userid goldengate, password goldengate
reperror default,abend
--DDL include mapped
--ddloptions report
--DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5
discardfile c:\ogg\dirrpt\rep1.dsc,append, megabytes 100
WILDCARDRESOLVE DYNAMIC
assumetargetdefs
dynamicresolution
--修改这里的map参数,添加colmap指定列的对应规则
map test.test7, target test1.test7, colmap(usedefaults, col2=col3, col3=col2);   
--map test.test7, target test1.test7;

重启目标端rep1进程,在源端测试插入数据,发现列对应关系正常。




2、该问题还可以使用另一种方法实现,通过生成定义文件来实现
1)先在OGG命令行下生成defgen配置参数
ggsci>edit param defgen
DEFSFILE /home/oracle/ogg/dirdef/test.def
USERID goldengate, PASSWORD goldengate
TABLE test.test7;

2)退出OGG命令行,在OGG软件根目录生成defgen.prm定义文件。
./defgen paramfile dirprm/defgen.prm

查看定义文件,会发现相关表结构信息,将该文件传递到目标端的c:/ogg/dirdef目录下

3)修改目标端rep1进程参数
replicat rep1
--setenv (NLS_LANG = 'SIMPLIFIED CHINESE_CHINA.AL32UTF8')
--setenv (NLS_LANG = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK')
--setenv (NLS_LANG = 'SIMPLIFIED AMERICAN_AMERICA.ZHS16GBK')
setenv (ORACLE_SID = ORCL)
USERIDAlias wallettest
--userid goldengate, password goldengate
reperror default,abend
--DDL include mapped
--ddloptions report
--DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5
discardfile c:\ogg\dirrpt\rep1.dsc,append, megabytes 100
WILDCARDRESOLVE DYNAMIC
--这里注释assumetargetdefs参数,添加SOURCEDEFS参数
--assumetargetdefs
SOURCEDEFS c:\ogg\dirdef\test.def
dynamicresolution
--map test.test7, target test1.test7, colmap(usedefaults, col2=col3, col3=col2);  
--将map参数复原
map test.test7, target test1.test7;

4)重启目标端rep1进程,然后在源端插入测试数据,发现数据同步正常。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25003262/viewspace-2062436/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-07-24

  • 博文量
    4
  • 访问量
    20836