OGG源端和目标端字段顺序不一致的解决方案


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

测试环境:

源端操作系统: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;


对比数据发现,<span "="">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进程,然后在源端插入测试数据,发现数据同步正常。



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM