GoldenGate OGG Extract常見(jiàn)問(wèn)題 Extract: Application failded to initialize(Win) 錯(cuò)誤描述: run ggsci command but the Alert window report “Application failded to initialize(0xc000026e)” 錯(cuò)誤分析: –GoldenGate在Windows平臺(tái)上需要安裝Microsoft Visual C ++ 2005 SP1 Redistributable Package –如果是Microsoft Itanium平臺(tái),需要安裝vcredist_IA64.exe –Windows 2008需以下額外操作 Extract: Cannot load program ./ggsci . . . 錯(cuò)誤描述: ./ggsci exec(): 0509-036 Cannot load program ./ggsci because of the following errors: 0509-150 Dependent module libclntsh.a(shr.o) could not be loaded. 0509-022 Cannot load module libclntsh.a(shr.o). 0509-026 System error: A file or directory in the path name does not exist. 錯(cuò)誤分析: –請(qǐng)首先檢查該OGG Build是否與操作系統(tǒng)和數(shù)據(jù)庫(kù)相符 –其次如果是Aix請(qǐng)檢查xLC版本是否符合10.0以上 –檢查環(huán)境變量中動(dòng)態(tài)庫(kù)路徑是否包含了數(shù)據(jù)庫(kù)動(dòng)態(tài)庫(kù)目錄, 例如:export LD_LIBRARY_PATH=$ORACLE_HOME/lib –不同平臺(tái)下的環(huán)境變量不同: - Aix: LIBPATH
- Solaris、Linux等: LD_LIBRARY_PATH
- HP-Unix:SHLIB_PATH
–重設(shè)環(huán)境變量需重啟Mgr和Ext/Rep進(jìn)程 Extract: Block size mismatch (8192/512) … 錯(cuò)誤描述: 2010-04-22 17:58:23.872 Redo thread 2: No positions processed, Block size mismatch (8192/512) reading redo log /dev/rora_redo22_256m for sequence 11812, … 錯(cuò)誤分析: –裸設(shè)備的偏移量各操作系統(tǒng)默認(rèn)為0,但AIX默認(rèn)為4096. –當(dāng)創(chuàng)建裸設(shè)備時(shí)使用了-TO選項(xiàng)時(shí),Oracle不會(huì)跳過(guò)4096字節(jié)而是直接從0開(kāi)始讀寫(xiě)。 –因此在AIX下使用裸設(shè)備時(shí),出現(xiàn)此錯(cuò)誤需要指定OGG從偏移量0開(kāi)始讀取 tranlogoptionsrawdeviceoffset 0 –該參數(shù)其在實(shí)際環(huán)境中使用幾率非常高 - 在9.0以前是公開(kāi)參數(shù),目前版本只存在于內(nèi)部文檔中
- 在以前版本中如果缺少此參數(shù)Extract立即終止,但新版本Extract會(huì)持續(xù)進(jìn)行嘗試,并不自動(dòng)終止,需檢查報(bào)告文件
Extract: ORA-15000 ASM connection error 錯(cuò)誤描述: GGS ERROR 182 Oracle GoldenGate Capture for Oracle, extbill.prm: OCI Error beginning session (status = 15000-ORA-15000: command disallowed by current instance type). 錯(cuò)誤分析: –該錯(cuò)誤為OCI錯(cuò)誤,表示Extract是在連接數(shù)據(jù)庫(kù)時(shí)出現(xiàn)問(wèn)題,根據(jù)錯(cuò)誤信息判斷為權(quán)限問(wèn)題 –首先在Extract參數(shù)中檢查ASM相關(guān)參數(shù) tranlogoptions asmuser sys@+ASM1, asmpassword oracle –檢查tnsnames.ora和listener.ora驗(yàn)證ASM實(shí)例配置正確 –確認(rèn)ASM用戶具有SYSDBA 權(quán)限;如果使用SYS,需要將ASM實(shí)例的init.ora中REMOTE_LOGIN_PASSWORDFILE參數(shù)設(shè)置為SHARED. (多個(gè)數(shù)據(jù)庫(kù)可以使用一個(gè)password文件,只有SYS用戶可以遠(yuǎn)程登錄.) –使用sqlplus驗(yàn)證 sqlplus sys/oracle@asm1 as sysdba;可以登錄 sqlplus sys/oracle@asm1 ;報(bào)告15000錯(cuò)誤 Extract: Could not find archived log… 錯(cuò)誤描述: Redo thread 2: Could not find archived log for sequence 5242 thread 2 under default destinations SQL <SELECT name FROM gv$archived_log WHERE sequence# = :ora_seq_no AND thread# = :ora_thread AND resetlogs_id = :ora_resetlog_id AND archived = ‘YES’ AND deleted = ‘N>, error retrieving redo file name for sequence 5242, archived = 1, use_alternate = 0… 錯(cuò)誤分析: –OGG會(huì)缺根據(jù)gv$archived_log查找歸檔日志位置. –可以通過(guò)參數(shù)指定歸檔日志目錄 tranlogoptions PRIMARY altarchivelogdest instance ora1 /arch1, altarchivelogdest instance ora2 /arch2 –配置該參數(shù)并加入primary選項(xiàng)可以避免Extract持續(xù)查詢歸檔日志位置,降低對(duì)主庫(kù)的壓力,建議無(wú)論歸檔日志是否放在數(shù)據(jù)庫(kù)中指定位置均應(yīng)配置此參數(shù) Extract: Encountered SCN That Is Not Greater Than The Highest SCN Already Processed … 錯(cuò)誤描述: GGS ERROR 180 encountered commit SCN 2187.3361189672 that is not greater than the highest SCN already processed 原因分析: –在Oracle RAC環(huán)境中,Extract會(huì)啟動(dòng)一個(gè)coordinator線程對(duì)各個(gè)節(jié)點(diǎn)上的操作進(jìn)行根據(jù)SCN進(jìn)行排序,它在交易提交后會(huì)等待THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 參數(shù)所定義時(shí)間來(lái)確認(rèn)空閑節(jié)點(diǎn)沒(méi)有交易,然后再收集交易數(shù)據(jù);寫(xiě)入該交易后如果空閑節(jié)點(diǎn)后來(lái)又讀到了一個(gè)SCN號(hào)要小的交易,則會(huì)報(bào)告該錯(cuò)誤 –可能原因: - 各節(jié)點(diǎn)之間沒(méi)有配置時(shí)鐘同步
- 一個(gè)節(jié)點(diǎn)比另外一個(gè)節(jié)點(diǎn)慢(IO問(wèn)題可能性較大)
解決方法: –在各節(jié)點(diǎn)之間配置時(shí)鐘同步(如NTP服務(wù)) (Q:為什么RAC環(huán)境下一個(gè)Extract最多可占用N+1個(gè)CPU?) 解決方法(續(xù)): –調(diào)整Extract參數(shù) THREADOPTIONS MAXCOMMITPROPAGATIONDELAY <msec> IOLATENCY <msec> - MAXCOMMITPROPAGATIONDELAY有效范圍是0-90000ms,缺省為3s(即3000ms).
- GGS V9.x多了一個(gè)IOLATENCY參數(shù),可以與上面參數(shù)一起加大等待時(shí)間。IOLATENCY缺省為1.5s,最大值為180000
- 建議出現(xiàn)180錯(cuò)誤后可以將此二參數(shù)設(shè)置為較大值,然后逐步降低獲取最佳設(shè)置
–說(shuō)明: - 出現(xiàn)此錯(cuò)誤后,因后面的交易可能已被寫(xiě)入日志,重啟Extract可成功啟動(dòng),但是可能出現(xiàn)如下問(wèn)題:
–Extract會(huì)重寫(xiě)當(dāng)前隊(duì)列覆蓋前面的交易數(shù)據(jù),后面的Data Pump進(jìn)程可能會(huì)出現(xiàn)abend with incompatible record errors錯(cuò)誤終止(舊版本可能出現(xiàn)) Extract: Encountered SCN That Is Not Greater … & GGS ERROR ZZ-0RG The previous run abended due to an out of order transaction…- 在新版本的OGG(10.0+)中,如果出現(xiàn)Encountered SCN That Is Not Greater 后,Extract重啟可能出現(xiàn)錯(cuò)誤:
–GGS ERROR ZZ-0RG The previous run abended due to an out of order transaction. Issue ALTER ETROLLOVER… –此錯(cuò)誤是出現(xiàn)Encountered SCN That Is Not Greater錯(cuò)誤后Extract無(wú)法自動(dòng)修復(fù)(當(dāng)前正在開(kāi)發(fā)自動(dòng)修復(fù)功能),需通過(guò)人工操作予以恢復(fù),修復(fù)方法可以參照Doc ID 987379.1,也可參考下述方法 –停止所有Data Pump和Replicat –針對(duì)所有的Extract記錄其Write Checkpoint的隊(duì)列Seqno; –對(duì)于每個(gè)Extract向下滾動(dòng)一個(gè)隊(duì)列 ALTER EXTRACT [name], ETROLLOVER –啟動(dòng)Extract查看是否滾動(dòng)到了下一個(gè)隊(duì)列,記錄其新隊(duì)列seqno,應(yīng)當(dāng)是舊隊(duì)列號(hào)+1 – –修改Data Pump從新的隊(duì)列開(kāi)始傳輸 ALTER EXTRACT [pump_name], EXTSEQNO ##### EXTRBA 0 –重啟Data Pump查看是否能夠重啟成功并從新的隊(duì)列傳輸 –修改replicat參數(shù)文件,加入或者打開(kāi)HANDLECOLLISIONS,如果有GROUPTRANSOPS和MAXTRANSOPS請(qǐng)注釋掉 –啟動(dòng)Replicat,觀察其是否能夠讀取新傳輸過(guò)來(lái)的隊(duì)列 –如Replicat無(wú)法自動(dòng)滾動(dòng)到下一個(gè)隊(duì)列,需要通過(guò)alter replicat [replicat_name], EXTSEQNO ##### EXTRBA 0手工滾動(dòng)。 –等待Replicat處理到結(jié)尾沒(méi)有延遲時(shí),可以關(guān)閉HANDLECOLLISIONS和恢復(fù)原來(lái)的GROUPTRANSOPS和MAXTRANSOPS參數(shù) –重新啟動(dòng)Replicat即可恢復(fù)正常復(fù)制。 Extract: GGS ERROR 146 NUMCNV_getNumeric 錯(cuò)誤描述(askmaclean.com): 2010-05-26 10:05:05 GGS ERROR 146 NUMCNV_getNumeric(char *, size_t, int64_t *, short *, BOOL): Buffer overflow, needed: 20, allocated: 19 錯(cuò)誤分析: –該問(wèn)題一般出現(xiàn)在sequence復(fù)制中(也曾出現(xiàn)在表復(fù)制中) –參考Bug 9734755: OGG EXTRACT CAUSES GGS ERROR 146 – NUMCNV_GETNUMERIC: BUFFER OVERFLOW –在OGG的10.4.0.68.002以后版本已經(jīng)修復(fù) filter無(wú)法正常工作 錯(cuò)誤描述: TABLE demo_src.people, FILTER (age > 50); 添加后無(wú)法正常工作,update時(shí)filter不起作用 注意:在過(guò)濾出現(xiàn)問(wèn)題時(shí)OGG并不報(bào)告錯(cuò)誤 錯(cuò)誤分析: –該配置從語(yǔ)法看沒(méi)有錯(cuò)誤,但是對(duì)比的列age如果不是主鍵,則update在日志中不存在該列值,也就沒(méi)有辦法通過(guò)該列進(jìn)行比較 –解決方法為Add trandata demo_src.people, cols (age)強(qiáng)制為該列加入附加日志 – –注:也可通過(guò)fetch從數(shù)據(jù)庫(kù)中讀取該記錄進(jìn)行比較(只能在源端抽取進(jìn)程),如下所示(此方法每條記錄均需要訪問(wèn)數(shù)據(jù)庫(kù),導(dǎo)致復(fù)制效率降低): TABLE demo_src.people, FETCHBEFOREFILTER, FETCHCOLS (age), FILTER (age > 50); Data Pump: ERROR 112 network communication 錯(cuò)誤描述: 2010-05-18 10:10:20 GGS ERROR 112 There is a problem in network communication, a remote file problem, encryption keys for target and source do not match (if using ENCRYPT) or an unknown error. (Remote file used is ./dirdat/contact/EC001606, reply received is Unable to lock file “./dirdat/contact/EC001606″ (error 13, Permission denied). 錯(cuò)誤分析: –如果使用主機(jī)名確認(rèn)hosts里面包含有該主機(jī)IP的解析 –確認(rèn)可以通過(guò)telnet訪問(wèn)參數(shù)rmthost配置的遠(yuǎn)程主機(jī)mgr端口 –停止其它所有Data Pump查看目標(biāo)端是否存在server進(jìn)程(即collector進(jìn)程),如果存在則通過(guò)kill殺死該進(jìn)程重啟Data Pump –確認(rèn)目標(biāo)端Manager進(jìn)程中是否配置了dynmaicportlist,有可能因?yàn)橹付ǘ丝诜秶』蛘弑黄渌鼞?yīng)用占用了端口導(dǎo)致無(wú)法連接,可以調(diào)大端口范圍后再試(一般1個(gè)Data pump需一個(gè)端口,如有Director則需多保留幾個(gè)端口) –檢查傳輸是否使用了加密 Extract:源數(shù)據(jù)庫(kù)性能降低,出現(xiàn)大量等待會(huì)話… 錯(cuò)誤描述: 源端數(shù)據(jù)庫(kù)主機(jī)的ora_lms和ora_lmp進(jìn)程占用大量資源,出現(xiàn)大量control file sequential read等待會(huì)話… 錯(cuò)誤分析: –Extract參數(shù) EXTRACT mer_ext USERID ggs, PASSWORD ggs EXTTRAIL /home/ggs/dirdat/et FLUSHCSECS 3 EOFDELAYCSECS 3 TABLE orange.ITEMS; –Data Pump參數(shù) EXTRACT mer_pump USERID ggs, PASSWORD ggs RMTHOST cblhprac1, MGRPORT 7810 RMTTRAIL /home/ggs/10.4/dirdat/et FLUSHCSECS 3 EOFDELAYCSECS 3 TABLE orange.ITEMS; –建議 –Data Pump去掉USERID參數(shù)并加入Passthru –FLUSHCSECS 3 全部去掉或者改為FLUSHSECS 3 –EOFDELAYCSECS 3全部去掉或者改為EOFDELAYSECS 3 GoldenGate OGG replicat常見(jiàn)問(wèn)題 數(shù)據(jù)復(fù)制典型錯(cuò)誤 –GGS ERROR 101 Invalid option for MAP… 錯(cuò)誤描述(askmaclean.com): GGS ERROR 101 Invalid option for MAP: TOKENS(TKN- USERID=@GETENV(“TRANSACTION”.. 錯(cuò)誤分析: –101錯(cuò)誤為參數(shù)錯(cuò)誤,表明當(dāng)前MAP語(yǔ)句中語(yǔ)法出現(xiàn)問(wèn)題 –查看該行參數(shù)語(yǔ)法沒(méi)有發(fā)現(xiàn)錯(cuò)誤,如下所示: MAP AU.JOBS, TARGET NZ.JOBS, COLMAP (USEDEFAULTS, TRAN_TIME = @TOKEN(“TKN-COMMITTIMESTAMP”), DB_USER = @TOKEN(“TKN-USERID”), OP_TYPE = @TOKEN(“TKN-OPTYPE”); –出現(xiàn)錯(cuò)誤原因是OGG解析參數(shù)文件時(shí)可能會(huì)把函數(shù)等關(guān)鍵字(如TOKEN)和括號(hào)等連續(xù)在一起的字符認(rèn)為是一個(gè)關(guān)鍵字 –在TOKEN后面和括號(hào)之間加入一個(gè)空格重啟即可 說(shuō)明:日常要養(yǎng)成在OGG參數(shù)文件中關(guān)鍵字和各中符號(hào)前后加入空格的良好習(xí)慣。 數(shù)據(jù)復(fù)制典型錯(cuò)誤 –SQL error 1403 mapping 錯(cuò)誤描述(askmaclean.com): 2010-02-25 13:20:08 GGS WARNING 218 Oracle GoldenGate Delivery for Oracle, rep_stnd.prm: SQL error 1403 mapping HR.MY_EMPLOYEE to HR.MY_EMPLOYEE. 錯(cuò)誤分析: –可能原因包括: - 兩端結(jié)構(gòu)不一致(異構(gòu)環(huán)境,列和主鍵不同)
- 兩端有不一致記錄
- 附加日志不全
–可以到discard文件中查看具體錯(cuò)誤信息,如果為update 或者delete找不到對(duì)應(yīng)記錄,并且某幾個(gè)字段為空,則可認(rèn)定為缺少了附加日志 Problem replicating GGS1.HISCUSTMER to GGS2.HISCUSTMER Error occurred with delete record (target format)… * CUST_CODE = * 注意:添加表的附加日志是即時(shí)生效,如extract已經(jīng)將數(shù)據(jù)抽入隊(duì)列,則重新添加附加日志后進(jìn)行重新初始化,舊的隊(duì)列數(shù)據(jù)不能被繼續(xù)使用 數(shù)據(jù)復(fù)制典型錯(cuò)誤 –GGS ERROR 160 Use ALLOWNOOPUPDATES to process the update 錯(cuò)誤描述: 2010-05-07 10:16:01 GGS ERROR 160 Encountered an update for target table CASEM.BILLING_ERROR_TEMP, which has no unique key defined. KEYCOLS can be used to define a key. Use ALLOWNOOPUPDATES to process the update without applying i t to the target database. Use APPLYNOOPUPDATES to force the update to be applie d using all columns in both the SET and WHERE clause. 錯(cuò)誤分析: –首先確認(rèn)該表正確添加了附加日志,若附加日志正確則原因?yàn)橄抡f(shuō)述 –當(dāng)Update一條記錄但是未修改其中某些字段記錄時(shí),Oracle會(huì)在日志中記錄該Update操作,但是由于數(shù)據(jù)本身沒(méi)有改變,可能并沒(méi)有記錄其后影像。此時(shí)OGG抽取數(shù)據(jù)后隊(duì)列中也沒(méi)有后影像,導(dǎo)致目標(biāo)端Replicat無(wú)法組成正確SQL - 例如,表T中有一條記錄其字段C原來(lái)值為‘a(chǎn)’,如果update t set c=‘a(chǎn)’ where rowid=‘XXXXXXX’即會(huì)產(chǎn)生該情形
–解決方法正如錯(cuò)誤描述中說(shuō)述在參數(shù)中加入即可繼續(xù) ALLOWNOOPUPDATES 注意:該參數(shù)是一個(gè)內(nèi)部參數(shù) DB2典型錯(cuò)誤 –SQL0798N 不能對(duì)定義為 GENERATED ALWAYS 的列 “ID” 指定值
錯(cuò)誤描述: 2010-01-13 13:43:31 GGS WARNING 218 Aborting BATCHSQL transaction. Databas e error -798 ([IBM][CLI Driver][DB2/NT] SQL0798N 不能對(duì)定義為 GENERATED ALWAYS 的列 “ID” 指定值。 SQLSTATE=428C9 錯(cuò)誤分析: –檢查出錯(cuò)的表結(jié)構(gòu)是否包含IDENTITY類(lèi)型字段 –在DB2中提供了兩種標(biāo)識(shí)列值 - GENERATED ALWAYS AS IDENTITY –始終生成
- GENERATED BY DEFAULT AS IDENTITY –缺省情況下生成
–通常IDENTITY字段是定義為第一種,即始終由數(shù)據(jù)庫(kù)自行產(chǎn)生的,不允許插入時(shí)指定值,例如如下字段: ID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY(START WITH 0,INCREMENT BY 1,CACHE 50) –將該字段改成GENERATED BY DEFAULT AS IDENTITY允許插入值即可。 使用RANGE時(shí)告警 –Database error 60 (ORA-00060: deadlock detected…
告警描述: 2010-05-28 10:45:05 GGS WARNING 218 Oracle GoldenGate Delivery for Oracle, r_ro_12b.prm: Aborted grouped transaction on ‘SIEBEL.S_ORDER_ITEM’, Database error 60 (ORA-00060: deadlock detected while waiting for resource). 錯(cuò)誤分析: –一般出現(xiàn)在通過(guò)RANGE進(jìn)行拆分的行數(shù)特大的表 –各Replicat會(huì)根據(jù)主鍵hash值各自負(fù)責(zé)不同的數(shù)據(jù)集,不會(huì)有多個(gè)進(jìn)程對(duì)同一條數(shù)據(jù)進(jìn)行操作 –但是,可能出現(xiàn)多個(gè)進(jìn)程修改的記錄在同一個(gè)塊上的情況,此時(shí)會(huì)引起死鎖 –可以通過(guò)修改該表的INITRANS參數(shù)增大每個(gè)塊中處理行級(jí)鎖事務(wù)的數(shù)量,該參數(shù)缺省為1,建議至少設(shè)置為拆分出來(lái)的Replicat數(shù)量 ALTER TABLE TEST MOVE INITRANS 100 alter index index_name rebuild online; 注:修改此項(xiàng)參數(shù)建議先停止對(duì)應(yīng)的Replicat。Move操作可以保證對(duì)原有數(shù)據(jù)有效,否則只做用于新增數(shù)據(jù);Move之后需要重建索引。 – Tips– 如何獲取當(dāng)前無(wú)法執(zhí)行的SQL- 可以通過(guò)獲取Replicat執(zhí)行的SQL幫助解決數(shù)據(jù)錯(cuò)誤
- 在Replicat中加入以下參數(shù)
NOBINARYCHARS NODYNSQL SHOWSYNTAX - 從shell命令行(不是ggsci)啟動(dòng)Replicat
Shell> REPLICAT PARAMFILE dirprm/<Replicat name>.prm - 啟動(dòng)后會(huì)顯示第一個(gè)SQL語(yǔ)句
–選擇Keep Displaying (default)可以執(zhí)行當(dāng)前SQL并顯示下一條 –選擇Stop Display停止顯示 - 完成診斷后從參數(shù)文件中移除這3個(gè)參數(shù)
Q:如何持續(xù)獲取OGG隊(duì)列中的SQL語(yǔ)句?配置一個(gè)使用formatsql參數(shù)的Data Pump。
|