共計(jì) 3707 個(gè)字符,預(yù)計(jì)需要花費(fèi) 10 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān)如何進(jìn)行 ogg 的字符分析,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
我們所熟知 oracle 的字符集一旦創(chuàng)建完畢后最好不要修改,關(guān)于 oracle goldengate 的字符集問題還是需要注意的,因?yàn)槿绻繕?biāo)端和源端字符集不一致,而有些字符無法在目標(biāo)端表示 ogg 可能無法保證數(shù)據(jù)一致性。
源庫字符集:
SQL select value from v$nls_parameters where parameter= NLS_CHARACTERSET
VALUE
—————————————————————-
AL32UTF8
如果這里小魚在源端設(shè)置 SETENV(NLS_LANG=“AMERICAN_AMERICA.ZHS16GBK”)去指定源端客戶端的字符集
GGSCI (dg01) 21 view params exiaoyu
extract exiaoyu
SETENV (NLS_LANG= AMERICAN_AMERICA.ZHS16GBK)
SETENV (ORACLE_SID= xiaoyu)
userid ogg,password ogg
dynamicresolution
gettruncates
report at 2:00
reportrollover at 3:00
warnlongtrans 3h,checkinterval 10m
exttrail ./dirdat/dd
table xiaoyu.*;
table xiaoyugg.*;
來看看對(duì)應(yīng)的 extract 進(jìn)程的報(bào)告,發(fā)現(xiàn)此時(shí) ogg 發(fā)覺源端客戶端的 NLS_LANG 變量和源端數(shù)據(jù)庫字符集不一致,從而選擇源端數(shù)據(jù)庫字符集,并沒有根據(jù) extract 進(jìn)程參數(shù)中的 SETENV 指定。
GGSCI (dg01) 52 view report exiaoyu
** Running with the following parameters **
***********************************************************************
2013-06-04 04:50:27 INFO OGG-03035 Operating system character set identified as UTF-8. Locale: en_US, LC_ALL:.
extract exiaoyu
SETENV (NLS_LANG= AMERICAN_AMERICA.ZHS16GBK)
Set environment variable (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
SETENV (ORACLE_SID= xiaoyu)
Set environment variable (ORACLE_SID=xiaoyu)
userid ogg,password ***
2013-06-04 04:50:28 INFO OGG-03500 WARNING: NLS_LANG environment variable does not match database character set, or not set. Using database character set value of AL32UTF8.
[oracle@ogg 11.2]$ oggerr 3500
03500, 00000, WARNING: NLS_LANG environment variable does not match database character set, or not set. Using database character set value of {0}
// *{0}: nls_charset (String)
// *Cause: The NLS_LANG environment variable is not set to the same as the
// database character set. Oracle GoldenGate is using the database
// character set.
// *Action: None
看來源端設(shè)置 NLS_LANG 跟 oracle database 的字符集不一致時(shí),ogg 還是會(huì)選擇 oracle database 的字符集,而忽略掉 extract 的進(jìn)程參數(shù) SETEVN NLS_LANG
接下來測(cè)試目標(biāo)端:
這里也指定 SETENV(NLS_LANG=”AMERICAN_AMERICA.ZHS16GBK”)
GGSCI (ogg.single) 15 view params rxiaoyu
replicat rxiaoyu
SETENV (NLS_LANG= AMERICAN_AMERICA.ZHS16GBK)
SETENV (ORACLE_SID= xiaoyu)
userid ogg,password ogg
assumetargetdefs
gettruncates
report at 2:00
reportrollover at 3:00
discardfile ./dirrpt/discard_rxiaoyu.dsc,append,megabytes 100
map xiaoyu.xiaoyu10,target xiaoyu.xiaoyu10,filter(@getenv( transaction , csn) 1074454806);
map xiaoyu.*,target xiaoyu.*;
map xiaoyugg.*,target ogg.*;
觀察目標(biāo)端的 replicat 進(jìn)程,發(fā)現(xiàn) ogg 選擇了進(jìn)程參數(shù)中 SETENV(NLS_LANG=“AMERICAN_AMERICA.ZHS16GBK”)
GGSCI (ogg.single) 17 view report rxiaoyu
。。。
2013-06-05 03:14:14 WARNING OGG-03504 NLS_LANG character set ZHS16GBK on the target is different from the source database character set AL32UTF8. Replication may not be valid if the source data has an incompatible character for the target NLS_LANG character set
此時(shí) ogg 給出的提示需要在 replicat 進(jìn)程中正確設(shè)置 SETENV NLS_LANG 變量,這里源端傳遞的是 AL32UTF8 字符集,目標(biāo)端通過 replicat 進(jìn)程參數(shù) SETENV NLS_LANG 指定的是 ZHS16GBK,而 ogg 也采用了 replicat 進(jìn)程的參數(shù),并沒有選擇源端的字符集。
[oracle@ogg 11.2]$ oggerr 3504
03504, 00000, NLS_LANG character set {0} on the target is different from the source database character set {1}. Replication may not be valid if the source data has an incompatible character for the target NLS_LANG character set.
// *{0}: nls_lang_charset (String)
// *{1}: src_db_charset (String)
// *Cause: The NLS_LANG environment variable on the target is set to a
// different character set than the character set of the source
// database.
// *Action: Set the NLS_LANG environment variable on the target to the
// character set of the source database that is shown in the message.
// You can use the SETENV parameter in the Replicat parameter file to
// set it for the Replicat session.
而 ogg 報(bào)出的 3504 警告是為了提醒目標(biāo)端字符集和源端不一致,可能會(huì)引起 replicat 進(jìn)程異常,這里 ogg 也推薦在 replicat 進(jìn)程中設(shè)置 NLS_LANG 使目標(biāo)端和源端一致。
那么對(duì)于字符集對(duì) ogg 的影響就是源端和目標(biāo)端,如果源端和目標(biāo)端 database 字符集一直,這里在進(jìn)程中直接采用一致的 SETENV NLS_LANG 都等于缺省的數(shù)據(jù)庫字符集即可,而對(duì)于源端和目標(biāo)端字符集不一致的,則需要在目標(biāo)端手動(dòng)指定 replicat 進(jìn)程參數(shù) SETENV NLS_LANG 等于源端字符集,當(dāng)然對(duì)于最后在數(shù)據(jù)庫中數(shù)據(jù)行小魚認(rèn)為還是需要再次轉(zhuǎn)化成目標(biāo)端 oracle database 的字符集。(ogg 也是一個(gè)同步復(fù)制產(chǎn)品,其技術(shù)原理依然不能脫離 oracle database)
看完上述內(nèi)容,你們對(duì)如何進(jìn)行 ogg 的字符分析有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。