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

测试环境:

源端操作系统: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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25003262/viewspace-2062436/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值