国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

oracle ogg同步目標庫數據出現亂碼處理

IT那活兒 / 1906人閱讀
oracle ogg同步目標庫數據出現亂碼處理
點擊上方“IT那活兒”,關注后了解更多精彩內容!!

環境

源端 os:Linux redhat 7,db 19.9 noncdb,ogg:19.1.0.0.4
目標端 os:Linux redhat 7,db 12.2 cdb,ogg:12.3.0.1.2
近期有一套Oracle數據庫ogg完成同步部署,第二天應用反饋有張表數據的字段出現亂碼,然后開始接手分析。

檢查環境

1. 源庫數據沒有亂碼,目標庫有。

--源庫數據:
--目標庫數據:
2. 除了歷史數據,增量同步數據也會產生亂碼。
3. 源庫是ZHS16GBK字符集,目標庫是AL32UTF8字符集,從官方文檔上查看,oracle是支持不同字符集之間同步。
4. 源庫ogg版本高于目標庫版本。
5. 源庫DB版本高于目標庫版本。

核查參數

1. 抽取進程
e_show2.prm

EXTRACT E_SHOW2
SETENV (ORACLE_HOME="/oracle/app/oracle/product/19.0.0/db" )
SETENV (ORACLE_SID="hncustdb11")
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
userid ogg, password AACAAAAAAAAAAAQAMISHOEYDWBYEMJPGRBRIAFMGHCEEJINJ, encryptkey default
DISCARDFILE ./dirrpt/E_SHOW2.dsc,APPEND,MEGABYTES 1024
DBOPTIONS LOBBUFSIZE 1048576
TRANLOGOPTIONS DBLOGREADER
FETCHOPTIONS FETCHPKUPDATECOLS
CACHEMGR CACHESIZE 2GB
EXTTRAIL ./dirdat/E_SHOW2/t1,FORMAT RELEASE 12.3
BR BRINTERVAL 60M
GETTRUNCATES
TABLE UCR_CRM11.TF_F_USER;
......
2. 投遞進程
d_show2.prm

EXTRACT D_SHOW2
PASSTHRU
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
RMTHOST 10.***.***.164,MGRPORT 7809
RMTTRAIL ./dirdat/D_HNCUS1/t1,FORMAT RELEASE 12.3
TABLE *.*;


3. 復制進程


r_hncus1.prm

REPLICAT R_HNCUS1
SETENV (ORACLE_HOME="/u01/app/oracle/product/12.2.0.1/dbhome_1")
--SETENV (ORACLE_SID="showdb1")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ogg@SHOWDB_WH1, password AACAAAAAAAAAAAPAMISHOEYDWBYEMJPGYILJRBWEGAZALJPE,encryptkey default
discardfile ./dirrpt/R_HNCUS1.dsc,append,megabytes 2048
sourcecharset passthru
grouptransops 2000
handlecollisions
maxtransops 500
gettruncates
dynamicresolution
ALLOWNOOPUPDATES
ASSUMETARGETDEFS
--reperror default,discard
map UCR_CRM11.TF_F_USER, target UCR_OGG_CRM11.TF_F_USER;
......


4. 環境變量

--源環境變量:
hncustdb11:/home/oracle(hncustdb11)$id
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1000(dba),1003(oper),1004(asmdba),1006(backupdba),1007(dgdba),1008(kmdba)

hncustdb11:/home/oracle(hncustdb11)$env
--LANG 未設置:
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
--目標環境變量:
[oracle@exdadbadm01 ~]$ id
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba),1003(racoper),1004(asmdba)

[oracle@exdadbadm01 ~]$ env

LANG=en_US.UTF-8
--NLS_LANG 未設置。
----分析:
  • 源庫ogg版本高于目標庫,抽取進程和投遞進程都加上了FORMAT RELEASE 12.3,暫時排除該原因。

  • 源庫和目標庫字符集不一致,抽取和復制進程都指定了NLS_LANG,并且復制進程中加了sourcecharset passthru參數,并且按照文檔上的說明支持不同字符集之間同步。

核查源庫表出現亂碼字段的字符集

排除以上原因,懷疑是源庫的數據有部分非ZHS16GBK數據。對源庫表上該字段進行dump。
未發現非ZHS16GBK數據。

測試同版本ogg是否會產生亂碼


這個時候懷疑是ogg產品bug或者高低版本不兼容導致的,目標端有很多復制進程,但出問題的只有這一個,并且該問題可以100%重現。

在目標端另外一個節點安裝19.1.0.0.4版本ogg,并建立測試表進行測試。
數據依然有亂碼,說明和ogg版本不兼容沒有關系。

檢查源庫和目標庫表結構差異

在創建測試表的時候,留意到源庫和目標庫的部分字段長度和類型不一致,只要長度夠長,ogg同步是不會斷,懷疑是應用在目標庫做了修改。
先進行測試,將源庫的DDL取出來,在目標庫建立測試表,在12版本的ogg下進行配置驗證,發現亂碼消失。

重現初始化

確定了亂碼產生原因,重建目標端表結構,使用expdp方式進行初始化,發現報錯提示數據超出字段長度。
不同字符集的數據,占用的長度也是不一致,ZHS16GBK字符集數據長度要大于AL32UTF8。
所以應該是當時做ogg部署的同事為了成功impdp導入數據,把字段長度改長了。但修改字段類型我是無法理解的。
既然無法使用expdp,那么就只能采用dblink+insert+scn的方式進行初始化了。
至此問題解決!


本 文 原 創 來 源:IT那活兒微信公眾號(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129707.html

相關文章

  • DBASK問答集萃第四期

    摘要:問題九庫控制文件擴展報錯庫的擴展報錯,用的是裸設備,和還是原來大小,主庫的沒有報錯,并且大小沒有變,求解釋。專家解答從報錯可以看出,控制文件從個塊擴展到個塊時報錯,而裸設備最大只支持個塊,無法擴展,可以嘗試將參數改小,避免控制文件報錯。 鏈接描述引言 近期我們在DBASK小程序新關聯了運維之美、高端存儲知識、一森咖記、運維咖啡吧等數據領域的公眾號,歡迎大家閱讀分享。 問答集萃 接下來,...

    SKYZACK 評論0 收藏0
  • OGG Integrated Native DDL簡單測試

    OGG Integrated Native DDL簡單測試 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%;...

    IT那活兒 評論0 收藏1085

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<