replicat的handcollisions和reperror
Replicat處理DML時可能會出現資料衝突,根據場景不同,可分別使用handcollision和reperror處理
HANDLECOLLISIONS
是我們使用goldengate過程中常有的一個REPLICAT引數,該引數依賴於主鍵或唯一索引處理衝突資料,常用於初始化階段。
對於無主鍵或唯一索引的表無法處理衝突,且可能導致重複記錄。
注意開啟此引數則所有資料錯誤不管reperror如何配置均不再寫discard檔案,即所有資料衝突資訊被預設規則處理,沒有任何日誌,因此日常複製不建議使用該引數;
可予以考慮的特殊場景為只需新增資料,無需複製歷史資料。
使用HANDLECOLLISIONS的幾個場景:
1. target丟失delete記錄(missing delete),忽略該問題並不記錄到discardfile
2. target丟失update記錄(missing update)
更新的鍵值是主鍵=》 update轉換成INSERT ,預設情況下插入記錄不完整
更新的鍵值是非主鍵=》 忽略該問題並不記錄到discardfile
3. 重複插入已存在的主鍵值到target表中,這將被replicat轉換為UPDATE現有主鍵值的行的其他非主鍵列
另:該引數僅處理資料本身的Insert/Delete衝突,如果出現兩端對映或其它結構性問題Replicat程式依然會abend,不能被忽略
此外對於主鍵的更新操作,若在target使用HANDLECOLLISIONS且該update丟失,在會轉換為INSERT該主鍵的操作,注意預設情況下插入的記錄不完整,FETCHOPTIONS FETCHPKUPDATECOLS將捕獲完整的redo image映象到trail中,這保證把primary key的更新透過HANDLECOLLISIONS轉換為對target的一個完整記錄的插入。
我們可以透過send 命令動態取消HANDLECOLLISIONS
GGSCI (XIANGBLI-CN) 29> send rep2, NOHANDLECOLLISIONS
Sending NOHANDLECOLLISIONS request to REPLICAT REP2 ...
REP2 NOHANDLECOLLISIONS set for 1 tables and 0 wildcard entries
REPERROR
包含如下action,
ABEND: roll back the transaction and stop processing.
DISCARD: log the error to the discard file and continue processing.
EXCEPTION: send the error for exceptions processing (see “Handling errors as exceptions”.
IGNORE: ignore the error and continue processing.
RETRYOP [MAXRETRIES
TRANSABORT [, MAXRETRIES
RESET: remove all previous REPERROR rules and restore the default of ABEND.
TRANSDISCARD: discard the entire replicated source transaction if any operation within that transaction, including the commit, causes a Replicat error that is listed in the
error specification. This option is useful when integrity constraint checking is disabled on the target.
TRANSEXCEPTION: perform. exceptions mapping for every record in the replicated source transaction, according to its exceptions-mapping statement, if any operation within
that transaction (including the commit) causes a Replicat error that is listed in the error specification.
其中後兩個為事務相關
事務錯誤處理又受如下引數影響
Batchsql和grouptransops
將不同事務sql打包進行批次處理,出錯時首先嚐試使用不同處理模式
如錯誤依舊存在則如下處理
1 回滾batch sql,逐個transaction進行處理
2 對失敗的事務進行transdiscard或transexception處理
3 處理完畢後恢復batchsql/grouptransops模式
Maxtranops
將大事務分割成若干小事務處理,此舉雖提升效能但破壞了事務完整性;
如果事務分割成N個且第一個成功提交而後續事務失敗,則無法回滾第一個分事務;
Statsreplicat命令會顯示由transdiscard/transexception處理的行數
Reperror命令語法如下
REPERROR { (
{DEFAULT | DEFAULT2 |
{ABEND | DISCARD | EXCEPTION | IGNORE |
RETRYOP [MAXRETRIES
TRANSABORT [, MAXRETRIES] [, DELAYSECS
TRANSDISCARD |
TRANSEXCEPTION
}) |
RESET }
可使用兩個default引數,作用如下
default
Sets a global response to all errors except those for which explicit REPERROR statements are specified.
default2
Provides a backup default action when the response for DEFAULT is set to EXCEPTION. Use DEFAULT2 when an exceptions MAP
statement is not specified for a MAP statement for which errors are anticipated.
對於exception/transexception,可將錯誤值捕獲到異常表中
Map exceptiononly/mapexception
其中exceptiononly只適用於特定的表,即不能使用wildcards
異常表
須確保trail記錄包含所有對映至異常表的列,可在extract引數檔案配置如下引數:
Nocompressdeletes:delete語句包含該行所有列
Getupdatebefores:可捕獲行的前映象並寫入trail
--使用兩個map,第一個用於常規操作,第二個則處理異常
REPERROR (DEFAULT, EXCEPTION)
MAP ggs.equip_account, TARGET ggs.equip_account2,
COLMAP (USEDEFAULTS);
MAP ggs.equip_account, TARGET ggs.equip_account_exception,
EXCEPTIONSONLY,
INSERTALLRECORDS
COLMAP (USEDEFAULTS,
DML_DATE = @DATENOW(),
OPTYPE = @GETENV("LASTERR", "OPTYPE"),
DBERRNUM = @GETENV("LASTERR", "DBERRNUM"),
DBERRMSG = @GETENV("LASTERR", "DBERRMSG"));
MAP src.trx*, TARGET trg.*,
MAPEXCEPTION (TARGET fin.trxexceptions,
COLMAP (USEDEFAULTS,
ACCT_NO = ACCT_NO,
OPTYPE = @GETENV (“LASTERR”, “OPTYPE”),
DBERR = @GETENV (“LASTERR”, “DBERRNUM”),
DBERRMSG = @GETENV (“LASTERR”, “DBERRMSG”)
)
);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-761610/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- reperror()的格式有嚴格要求Error
- 強制關閉extract和replicat程式
- OGG 中replicat 和extract 關係圖
- mongodb replicat internal(一)MongoDB
- HANDLECOLLISIONS :GoldenGate Replicat的引數Go
- ERROR: Could not delete DB checkpoint for REPLICATErrordelete
- 瞭解GoldenGate Replicat的HANDLECOLLISIONS引數Go
- 使用OGG"Loading data from file to Replicat"的方法應該注意的問題:replicat程式是前臺程式...
- ogg replicat 程式 abend 處理
- GoldenGate12.3中新增的Parallel Replicat (PR)介紹GoParallel
- goldengate 目的端replicat程式 執行緩慢的問題Go
- Extract or Replicat Fail to Start (Don't Start) With No Error MessagesAIError
- OGG Replicat Failed Due To Check_point Table beingTruncatedAI
- OGG EXTRACT / REPLICAT CHECKPOINT RBA IS LARGER THAN LOCAL TRAIL SIZEAI
- ogg中抽取或複製程式(extract or replicat)中表的的重複配置
- 配置GoldenGate捕獲Replicat端資料應用異常Go
- OGG的replicat程式的Time Since Chkpt一直增加,程式處於假死狀態
- ../和./和/的區別
- 和的智慧
- 對遞迴和迭代的效率的思考和分析遞迴
- linux的sleep()和usleep()的使用和區別Linux
- 堆和棧的概念和區別
- js中的typeof和instanceof和===JS
- hbase和zookeeper的安裝和部署
- redis的安裝和啟動和檢測和停止Redis
- Get 和 Post 方法的選擇和URL的設計
- MySQL 裡的 find_in_set () 和 in () 和 likeMySql
- 堆和棧的解釋和區別
- Overload 和 和 Override 的區別IDE
- ABAP和Java的destination和JNDIJava
- COM和DLL和activex 的區別
- struct和union和enum宣告的語法Struct
- vue和react的相同點和不同點VueReact
- Java的equsals和==Java
- if和switch的效率
- 和 的區別
- as 和 with的區別
- ||和??的區別