GoldenGate OGG Extract常見問題 Extract: Application failded to initialize(Win) 錯誤描述: run ggsci command but the Alert window report “Application failded to initialize(0xc000026e)” 錯誤分析: –GoldenGate在Windows平臺上需要安裝Microsoft Visual C ++ 2005 SP1 Redistributable Package –如果是Microsoft Itanium平臺,需要安裝vcredist_IA64.exe –Windows 2008需以下額外操作 Extract: Cannot load program ./ggsci . . . 錯誤描述: ./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. 錯誤分析: –請首先檢查該OGG Build是否與操作系統(tǒng)和數(shù)據(jù)庫相符 –其次如果是Aix請檢查xLC版本是否符合10.0以上 –檢查環(huán)境變量中動態(tài)庫路徑是否包含了數(shù)據(jù)庫動態(tài)庫目錄, 例如:export LD_LIBRARY_PATH=$ORACLE_HOME/lib –不同平臺下的環(huán)境變量不同: - Aix: LIBPATH
- Solaris、Linux等: LD_LIBRARY_PATH
- HP-Unix:SHLIB_PATH
–重設環(huán)境變量需重啟Mgr和Ext/Rep進程 Extract: Block size mismatch (8192/512) … 錯誤描述: 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, … 錯誤分析: –裸設備的偏移量各操作系統(tǒng)默認為0,但AIX默認為4096. –當創(chuàng)建裸設備時使用了-TO選項時,Oracle不會跳過4096字節(jié)而是直接從0開始讀寫。 –因此在AIX下使用裸設備時,出現(xiàn)此錯誤需要指定OGG從偏移量0開始讀取 tranlogoptionsrawdeviceoffset 0 –該參數(shù)其在實際環(huán)境中使用幾率非常高 - 在9.0以前是公開參數(shù),目前版本只存在于內(nèi)部文檔中
- 在以前版本中如果缺少此參數(shù)Extract立即終止,但新版本Extract會持續(xù)進行嘗試,并不自動終止,需檢查報告文件
Extract: ORA-15000 ASM connection error 錯誤描述: GGS ERROR 182 Oracle GoldenGate Capture for Oracle, extbill.prm: OCI Error beginning session (status = 15000-ORA-15000: command disallowed by current instance type). 錯誤分析: –該錯誤為OCI錯誤,表示Extract是在連接數(shù)據(jù)庫時出現(xiàn)問題,根據(jù)錯誤信息判斷為權(quán)限問題 –首先在Extract參數(shù)中檢查ASM相關(guān)參數(shù) tranlogoptions asmuser sys@+ASM1, asmpassword oracle –檢查tnsnames.ora和listener.ora驗證ASM實例配置正確 –確認ASM用戶具有SYSDBA 權(quán)限;如果使用SYS,需要將ASM實例的init.ora中REMOTE_LOGIN_PASSWORDFILE參數(shù)設置為SHARED. (多個數(shù)據(jù)庫可以使用一個password文件,只有SYS用戶可以遠程登錄.) –使用sqlplus驗證 sqlplus sys/oracle@asm1 as sysdba;可以登錄 sqlplus sys/oracle@asm1 ;報告15000錯誤 Extract: Could not find archived log… 錯誤描述: 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… 錯誤分析: –OGG會缺根據(jù)gv$archived_log查找歸檔日志位置. –可以通過參數(shù)指定歸檔日志目錄 tranlogoptions PRIMARY altarchivelogdest instance ora1 /arch1, altarchivelogdest instance ora2 /arch2 –配置該參數(shù)并加入primary選項可以避免Extract持續(xù)查詢歸檔日志位置,降低對主庫的壓力,建議無論歸檔日志是否放在數(shù)據(jù)庫中指定位置均應配置此參數(shù) Extract: Encountered SCN That Is Not Greater Than The Highest SCN Already Processed … 錯誤描述: GGS ERROR 180 encountered commit SCN 2187.3361189672 that is not greater than the highest SCN already processed 原因分析: –在Oracle RAC環(huán)境中,Extract會啟動一個coordinator線程對各個節(jié)點上的操作進行根據(jù)SCN進行排序,它在交易提交后會等待THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 參數(shù)所定義時間來確認空閑節(jié)點沒有交易,然后再收集交易數(shù)據(jù);寫入該交易后如果空閑節(jié)點后來又讀到了一個SCN號要小的交易,則會報告該錯誤 –可能原因: - 各節(jié)點之間沒有配置時鐘同步
- 一個節(jié)點比另外一個節(jié)點慢(IO問題可能性較大)
解決方法: –在各節(jié)點之間配置時鐘同步(如NTP服務) (Q:為什么RAC環(huán)境下一個Extract最多可占用N+1個CPU?) 解決方法(續(xù)): –調(diào)整Extract參數(shù) THREADOPTIONS MAXCOMMITPROPAGATIONDELAY <msec> IOLATENCY <msec> - MAXCOMMITPROPAGATIONDELAY有效范圍是0-90000ms,缺省為3s(即3000ms).
- GGS V9.x多了一個IOLATENCY參數(shù),可以與上面參數(shù)一起加大等待時間。IOLATENCY缺省為1.5s,最大值為180000
- 建議出現(xiàn)180錯誤后可以將此二參數(shù)設置為較大值,然后逐步降低獲取最佳設置
–說明: - 出現(xiàn)此錯誤后,因后面的交易可能已被寫入日志,重啟Extract可成功啟動,但是可能出現(xiàn)如下問題:
–Extract會重寫當前隊列覆蓋前面的交易數(shù)據(jù),后面的Data Pump進程可能會出現(xiàn)abend with incompatible record errors錯誤終止(舊版本可能出現(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)錯誤:
–GGS ERROR ZZ-0RG The previous run abended due to an out of order transaction. Issue ALTER ETROLLOVER… –此錯誤是出現(xiàn)Encountered SCN That Is Not Greater錯誤后Extract無法自動修復(當前正在開發(fā)自動修復功能),需通過人工操作予以恢復,修復方法可以參照Doc ID 987379.1,也可參考下述方法 –停止所有Data Pump和Replicat –針對所有的Extract記錄其Write Checkpoint的隊列Seqno; –對于每個Extract向下滾動一個隊列 ALTER EXTRACT [name], ETROLLOVER –啟動Extract查看是否滾動到了下一個隊列,記錄其新隊列seqno,應當是舊隊列號+1 – –修改Data Pump從新的隊列開始傳輸 ALTER EXTRACT [pump_name], EXTSEQNO ##### EXTRBA 0 –重啟Data Pump查看是否能夠重啟成功并從新的隊列傳輸 –修改replicat參數(shù)文件,加入或者打開HANDLECOLLISIONS,如果有GROUPTRANSOPS和MAXTRANSOPS請注釋掉 –啟動Replicat,觀察其是否能夠讀取新傳輸過來的隊列 –如Replicat無法自動滾動到下一個隊列,需要通過alter replicat [replicat_name], EXTSEQNO ##### EXTRBA 0手工滾動。 –等待Replicat處理到結(jié)尾沒有延遲時,可以關(guān)閉HANDLECOLLISIONS和恢復原來的GROUPTRANSOPS和MAXTRANSOPS參數(shù) –重新啟動Replicat即可恢復正常復制。 Extract: GGS ERROR 146 NUMCNV_getNumeric 錯誤描述(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 錯誤分析: –該問題一般出現(xiàn)在sequence復制中(也曾出現(xiàn)在表復制中) –參考Bug 9734755: OGG EXTRACT CAUSES GGS ERROR 146 – NUMCNV_GETNUMERIC: BUFFER OVERFLOW –在OGG的10.4.0.68.002以后版本已經(jīng)修復 filter無法正常工作 錯誤描述: TABLE demo_src.people, FILTER (age > 50); 添加后無法正常工作,update時filter不起作用 注意:在過濾出現(xiàn)問題時OGG并不報告錯誤 錯誤分析: –該配置從語法看沒有錯誤,但是對比的列age如果不是主鍵,則update在日志中不存在該列值,也就沒有辦法通過該列進行比較 –解決方法為Add trandata demo_src.people, cols (age)強制為該列加入附加日志 – –注:也可通過fetch從數(shù)據(jù)庫中讀取該記錄進行比較(只能在源端抽取進程),如下所示(此方法每條記錄均需要訪問數(shù)據(jù)庫,導致復制效率降低): TABLE demo_src.people, FETCHBEFOREFILTER, FETCHCOLS (age), FILTER (age > 50); Data Pump: ERROR 112 network communication 錯誤描述: 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). 錯誤分析: –如果使用主機名確認hosts里面包含有該主機IP的解析 –確認可以通過telnet訪問參數(shù)rmthost配置的遠程主機mgr端口 –停止其它所有Data Pump查看目標端是否存在server進程(即collector進程),如果存在則通過kill殺死該進程重啟Data Pump –確認目標端Manager進程中是否配置了dynmaicportlist,有可能因為指定端口范圍太小或者被其它應用占用了端口導致無法連接,可以調(diào)大端口范圍后再試(一般1個Data pump需一個端口,如有Director則需多保留幾個端口) –檢查傳輸是否使用了加密 Extract:源數(shù)據(jù)庫性能降低,出現(xiàn)大量等待會話… 錯誤描述: 源端數(shù)據(jù)庫主機的ora_lms和ora_lmp進程占用大量資源,出現(xiàn)大量control file sequential read等待會話… 錯誤分析: –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常見問題 數(shù)據(jù)復制典型錯誤 –GGS ERROR 101 Invalid option for MAP… 錯誤描述(askmaclean.com): GGS ERROR 101 Invalid option for MAP: TOKENS(TKN- USERID=@GETENV(“TRANSACTION”.. 錯誤分析: –101錯誤為參數(shù)錯誤,表明當前MAP語句中語法出現(xiàn)問題 –查看該行參數(shù)語法沒有發(fā)現(xiàn)錯誤,如下所示: 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)錯誤原因是OGG解析參數(shù)文件時可能會把函數(shù)等關(guān)鍵字(如TOKEN)和括號等連續(xù)在一起的字符認為是一個關(guān)鍵字 –在TOKEN后面和括號之間加入一個空格重啟即可 說明:日常要養(yǎng)成在OGG參數(shù)文件中關(guān)鍵字和各中符號前后加入空格的良好習慣。 數(shù)據(jù)復制典型錯誤 –SQL error 1403 mapping 錯誤描述(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. 錯誤分析: –可能原因包括: - 兩端結(jié)構(gòu)不一致(異構(gòu)環(huán)境,列和主鍵不同)
- 兩端有不一致記錄
- 附加日志不全
–可以到discard文件中查看具體錯誤信息,如果為update 或者delete找不到對應記錄,并且某幾個字段為空,則可認定為缺少了附加日志 Problem replicating GGS1.HISCUSTMER to GGS2.HISCUSTMER Error occurred with delete record (target format)… * CUST_CODE = * 注意:添加表的附加日志是即時生效,如extract已經(jīng)將數(shù)據(jù)抽入隊列,則重新添加附加日志后進行重新初始化,舊的隊列數(shù)據(jù)不能被繼續(xù)使用 數(shù)據(jù)復制典型錯誤 –GGS ERROR 160 Use ALLOWNOOPUPDATES to process the update 錯誤描述: 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. 錯誤分析: –首先確認該表正確添加了附加日志,若附加日志正確則原因為下說述 –當Update一條記錄但是未修改其中某些字段記錄時,Oracle會在日志中記錄該Update操作,但是由于數(shù)據(jù)本身沒有改變,可能并沒有記錄其后影像。此時OGG抽取數(shù)據(jù)后隊列中也沒有后影像,導致目標端Replicat無法組成正確SQL - 例如,表T中有一條記錄其字段C原來值為‘a(chǎn)’,如果update t set c=‘a(chǎn)’ where rowid=‘XXXXXXX’即會產(chǎn)生該情形
–解決方法正如錯誤描述中說述在參數(shù)中加入即可繼續(xù) ALLOWNOOPUPDATES 注意:該參數(shù)是一個內(nèi)部參數(shù) DB2典型錯誤 –SQL0798N 不能對定義為 GENERATED ALWAYS 的列 “ID” 指定值
錯誤描述: 2010-01-13 13:43:31 GGS WARNING 218 Aborting BATCHSQL transaction. Databas e error -798 ([IBM][CLI Driver][DB2/NT] SQL0798N 不能對定義為 GENERATED ALWAYS 的列 “ID” 指定值。 SQLSTATE=428C9 錯誤分析: –檢查出錯的表結(jié)構(gòu)是否包含IDENTITY類型字段 –在DB2中提供了兩種標識列值 - GENERATED ALWAYS AS IDENTITY –始終生成
- GENERATED BY DEFAULT AS IDENTITY –缺省情況下生成
–通常IDENTITY字段是定義為第一種,即始終由數(shù)據(jù)庫自行產(chǎn)生的,不允許插入時指定值,例如如下字段: ID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY(START WITH 0,INCREMENT BY 1,CACHE 50) –將該字段改成GENERATED BY DEFAULT AS IDENTITY允許插入值即可。 使用RANGE時告警 –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). 錯誤分析: –一般出現(xiàn)在通過RANGE進行拆分的行數(shù)特大的表 –各Replicat會根據(jù)主鍵hash值各自負責不同的數(shù)據(jù)集,不會有多個進程對同一條數(shù)據(jù)進行操作 –但是,可能出現(xiàn)多個進程修改的記錄在同一個塊上的情況,此時會引起死鎖 –可以通過修改該表的INITRANS參數(shù)增大每個塊中處理行級鎖事務的數(shù)量,該參數(shù)缺省為1,建議至少設置為拆分出來的Replicat數(shù)量 ALTER TABLE TEST MOVE INITRANS 100 alter index index_name rebuild online; 注:修改此項參數(shù)建議先停止對應的Replicat。Move操作可以保證對原有數(shù)據(jù)有效,否則只做用于新增數(shù)據(jù);Move之后需要重建索引。 – Tips– 如何獲取當前無法執(zhí)行的SQL- 可以通過獲取Replicat執(zhí)行的SQL幫助解決數(shù)據(jù)錯誤
- 在Replicat中加入以下參數(shù)
NOBINARYCHARS NODYNSQL SHOWSYNTAX - 從shell命令行(不是ggsci)啟動Replicat
Shell> REPLICAT PARAMFILE dirprm/<Replicat name>.prm –選擇Keep Displaying (default)可以執(zhí)行當前SQL并顯示下一條 –選擇Stop Display停止顯示 - 完成診斷后從參數(shù)文件中移除這3個參數(shù)
Q:如何持續(xù)獲取OGG隊列中的SQL語句?配置一個使用formatsql參數(shù)的Data Pump。
|