對於Replicat進程處理DML操作過程中報錯時,GoldenGate提供了一個參數用來控制如何處理Replicat進程的報錯。這就是本節內容要介紹的reperror參數。這個參數能控制大部分的GoldenGate錯誤處理的手段。
如某案例的Replicat進程參數1所示。
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2155363918-0.jpg" title="1.jpg" />
圖1
1、reperror處理類型與含義
Reperror在GoldenGate11版本中共提供了7類處理錯誤方式,分別如下。
1)abend:Replicat遇到不能處理的記錄時,復原事務,然後停止處理,Replicat進程狀態轉為abend。
2)discard:將不能處理記錄的錯誤資訊放到discard檔案而Replicat進程繼續處理下面的記錄。
3)exception:將錯誤按照預先定義好的方式處理。
4)ignore:將不能處理的記錄忽略掉,然後繼續處理下面的記錄。
5)retryop [maxretries <n>]:遇到不能處理的記錄時,重試n次。
6)transabort [,maxretries <n>][, delay[c]sesc<n>];終止交易處理,將rba號指到該事務的開頭,也可以指定重試幾次。
7)reset:清除掉所有的reperror規則,然後將reperror的規則預設為abend。
在Replicat進程的參數中,可以將任意一個處理類型設定為預設,如reperror、default、abend。
通常,為了保證資料的一致性,都將reperror的預設規則設定為abend。
2、複製進程常見資料庫錯誤類型與處理方法
在實際的GoldenGate系統中,很大一部分Replicat錯誤資訊都類似於ORA開頭的資料庫錯誤這裡以Oracle資料庫為例)。雖然,通常對於ORA錯誤,需要手動尋找資料庫的原因,但可以用reperror處理一些預知的錯誤類型,然後再在資料庫層面找到錯誤的原因,手動排除,而不至於導致該進程處理其他正常的表而abend掉。
例如:可以忽略掉重複資料的插入而其他類型的報錯則abend。
樣本11:
Reperror default, abend)
Reperror -1, ignore)
當然,也可以只針對某張表的忽略掉重複資料的插入而abend掉其他類型的報錯。
樣本12:
REPERROR -1, IGNORE)
MAP sales.product, TARGET sales.product;
REPERROR RESET
MAP sales.account, TARGET sales.account;
最常見的錯誤為ORA-1403。
1403錯誤是指記錄無法投遞到目標庫,純屬資料錯誤,要通過查看錯誤資訊和discard檔案,到兩端庫尋找相應記錄,結合logdump分析隊列中的實際資料,再分析出問題的原因。可能存在的原因有:兩端表結構不一致;附加日誌錯誤;初始化方法錯誤導致不一致;目標端串聯刪除、trigger沒有被禁止;目標端存在Oracle的job或者作業系統任務修改資料。
處理方法:
重新初始化該表。
手工修複該條資料。
修改reperror參數為discard或ignore模式,忽略掉錯誤在使用這個參數之前使用者應該非常清楚自己在做什麼,因為它會導致兩端資料不一致)。
3、Ddlerror處理DDL複製錯誤
當GoldenGate開啟了DDL複製時,當DDL複製報錯時,則需要用到此處的ddlerror參數預先處理一些常見的報錯資訊。Ddlerror對於抽取、複製進程均有效,預設為abend。
Ddlerror參數的文法為:
樣本13:
DDLERROR
{<error> | DEFAULT} {<response>}
[RETRYOP MAXRETRIES <n> [RETRYDELAY <delay>]]
{INCLUDE <inclusion clause> | EXCLUDE <exclusion clause>}
[IGNOREMISSINGTABLES | ABENDONMISSINGTABLES]
如當DDL複製報ORA-1430錯誤,傳遞了重複的alter語句導致,則可以用ddlerror 1430, discard)將錯誤資訊扔到discard檔案裡。
其他的錯誤處理與reperror類似。
4、Discardfile記錄進程錯誤資訊
用discardfile 這個參數來產生一個discard檔案,將GoldenGate不能處理的資訊記錄到這個檔案。這樣對GoldenGate的troubleshooting非常的有協助。
如源端表結構有變化,預設傳遞過來的資料應用時Replicat進程則報錯,此時則可以通過discard檔案看到報錯資訊位哪個表做了怎樣的alter操作,再在目標端也將表結構改變一些,錯誤即可排除。
Discard檔案預設在GoldenGate安裝目錄的dirrpt子檔案夾,2所示。
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2155362R0-1.jpg" title="2.jpg" />
圖2
Discard檔案記錄的報錯資訊3所示。
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/21553AT7-2.jpg" title="3.jpg" />
圖3
oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html