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