GoldenGate 使用reperror進行錯誤處理

來源:互聯網
上載者:User

對於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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.