Goldengate實驗:源端目標端字符集不同

shilei1發表於2013-09-25
1、Goldengate版本

Oracle GoldenGate Command Interpreter for Oracle 
Version 11.1.1.1.2 OGGCORE_11.1.1.1.2_PLATFORMS_111004.2100 
Linux, x64, 64bit (optimized), Oracle 10g on Oct? 4 2011 23:50:20

Copyright (C) 1995, 2011, Oracle and/or its affiliates. All rights reserved.

?

2、源端oracle版本

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production 
With the Partitioning, OLAP and Data Mining options

字符集:AL32UTF8

?

3、目標端oracle版本

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production 
With the Partitioning, OLAP and Data Mining options

字符集:ZHS16GBK

?

4、實驗一:引數檔案中NLS_LANG引數都與目標端字符集一致

Goldengate引數檔案:

GGSCI (node1) 2> view param ext01

extract ext01 
SETENV (ORACLE_SID=ogg) 
SETENV (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK) 
userid ogguser, password ogguser 
exttrail dirdat/ex 
table SCOTT.emp;

GGSCI (node1) 3> view param rep01

replicat rep01 
setenv (ORACLE_SID=orcl10g) 
SETENV (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK) 
userid ogguser, password ogguser 
ASSUMETARGETDEFS 
map scott.emp, target scott.emp ;

?

源端:

update emp set ename='外國人都生活在燃料油載磚廠在被風雨剝蝕了往復博聯矽矓阿彌陀佛' where empno=7900;

commit;

select * from emp;



?

目標端:

select * from emp;



結論:抽取程式和複製程式引數檔案中的NLS_LANG變數都與目標端的字符集一致,同步發生亂碼。



實驗二:抽取程式和複製程式NLS_LANG與各自資料庫字符集一致

Goldengate引數檔案:

GGSCI (node1) 2> view param ext01

extract ext01 
SETENV (ORACLE_SID=ogg) 
SETENV (NLS_LANG = AMERICAN_AMERICA.AL32UTF8) 
userid ogguser, password ogguser 
exttrail dirdat/ex 
table SCOTT.emp;

GGSCI (node1) 3> view param rep01

replicat rep01 
setenv (ORACLE_SID=orcl10g) 
SETENV (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK) 
userid ogguser, password ogguser 
ASSUMETARGETDEFS 
map scott.emp, target scott.emp ;

源端:

update emp set ename='外國人都生活在燃料油載磚廠在被風雨剝蝕了往復博聯矽矓阿彌陀佛' where empno=7900;

commit;

select * from emp;



目標端:

select * from emp;



結論:抽取程式和複製程式引數檔案中的NLS_LANG變數與各自資料庫字符集一致,同步發生亂碼。



實驗三:抽取程式和複製程式NLS_LANG都與源端資料庫字符集一致

Goldengate引數檔案:

GGSCI (node1) 2> view param ext01

extract ext01 
SETENV (ORACLE_SID=ogg) 
SETENV (NLS_LANG = AMERICAN_AMERICA.AL32UTF8) 
userid ogguser, password ogguser 
exttrail dirdat/ex 
table SCOTT.emp;

GGSCI (node1) 3> view param rep01

replicat rep01 
setenv (ORACLE_SID=orcl10g) 
SETENV (NLS_LANG = AMERICAN_AMERICA.AL32UTF8) 
userid ogguser, password ogguser 
ASSUMETARGETDEFS 
map scott.emp, target scott.emp ;

源端:

update emp set ename='外國人都生活在燃料油載磚廠在被風雨剝蝕了往復博聯矽矓阿彌陀佛' where empno=7900;

commit;

select * from emp;



目標端:

select * from emp;



結論:抽取程式和複製程式引數檔案中的NLS_LANG變數與源端資料庫字符集一致,同步正常,不亂碼。

?

5、結論

本實驗只針對源端字符集為AL32UTF8 與 目標端ZHS16GBK的情況,只有在抽取程式和複製程式引數檔案中的NLS_LANG變數與源端資料庫字符集一致,才不發生亂碼。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-773335/,如需轉載,請註明出處,否則將追究法律責任。

相關文章