配置GoldenGate捕獲Replicat端資料應用異常
考慮到GoldenGate對資料的邏輯處理方式,保不齊目標端可能由於什麼原因,沒能正確複製源端抽取到的資料,那麼,預設情況下,Replicat任務會中止並丟擲異常資訊。這裡,我們可以透過自定義的方式,定製錯誤的處理機制。
異常捕獲操作均在目標端進行,源端不需要做什麼修改。
首先建立一張日誌表,用來記錄異常資訊,這個表的列可以根據實際情況進行定製,並沒有強制性的標準:
create table jss.j1_data_change_log
(
REP_NAME VARCHAR2(30),
OID NUMBER,
TABLE_NAME VARCHAR2(30),
OPTYPE VARCHAR2(30),
COMMIT_DATE TIMESTAMP,
DBERRNUM NUMBER,
DBERRMSG VARCHAR2(4000),
LOGRBA NUMBER,
LOGPOSITION NUMBER
);該表必須擁有唯一索引(當然建個主鍵也可以的),這裡考慮透過時間和日誌在檔案中的相對位置做唯一鍵:
- create unique index uni_j1_data_clog on j1_data_change_log (logrba,logposition,commit_date);
GoldenGate中有一個REPERROR選項,專用於replicat程式,可以用來控制replicat程式處理錯誤錯誤的方式。
使用者可以定義多個REPERROR語句,其中一個REPERROR語句設定預設情況下錯誤處理方式,其它的REPERROR再來分別對不同的錯誤指定處理邏輯。這裡我們就透過REPERROR來捕獲異常資訊。
在GoldenGate中修改replicat的配置,具體配置資訊如下:
REPLICAT rep2
ASSUMETARGETDEFS
USERID ggate@target, PASSWORD ggate
DISCARDFILE ./dirrpt/rep2_gg2.dsc, PURGE
REPERROR (DEFAULT, EXCEPTION)
REPERROR (DEFAULT2,ABEND)
MAP jss.*, TARGET jss.*;
MAP jss.j1, target jss.j1_data_change_log,
EXCEPTIONSONLY,
INSERTALLRECORDS,
COLMAP ( rep_name = "rep2"
,oid = id
,table_name = @GETENV("GGHEADER","TABLENAME")
,optype = @GETENV ("GGHEADER", "OPTYPE")
,commit_date = @GETENV ("GGHEADER", "COMMITTIMESTAMP")
,dberrnum = @GETENV ("LASTERR", "DBERRNUM")
,dberrmsg = @GETENV ("LASTERR", "DBERRMSG")
,logrba = @GETENV ("GGHEADER", "LOGRBA")
,logposition = @GETENV ("GGHEADER", "LOGPOSITION"));主要意圖就是透過GETENV取到想要的環境變數資訊,並存入前面建立的日誌表。
提示:注意MAP/COLMAP等關鍵字間,",/("等符號前必須要有空格,否則會遇到OGG-00212 Invalid option for MAP的錯誤資訊。
注意2,源端物件必須執行add trandata schema.table啟用表級附加日誌,否則在源端執行update操作時,目前端會丟擲ORA-01403錯誤,提示記錄找不到
當再執行同步時,目標端REPLICAT組的REPORT檔案中會記錄類似這樣的資訊:
MAP resolved (entry JSS.J1):
MAP JSS.J1, target jss.j1_data_change_log, EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP ( rep_name = "rep2" ,oid = id ,table_name = @GETENV("GGHEADER","TABLENAME") ,optype = @GETENV ("GGHEADER", "OPTYPE") ,co
mmit_date = @GETENV ("GGHEADER", "COMMITTIMESTAMP") ,dberrnum = @GETENV ("LASTERR", "DBERRNUM") ,dberrmsg = @GETENV ("LASTERR", "DBERRMSG") ,logrba = @GETENV ("GGHEADER", "LOGRBA") ,logposition = @GETENV ("G
GHEADER", "LOGPOSITION"));
Using the following key columns for target table JSS.J1_DATA_CHANGE_LOG: LOGRBA, LOGPOSITION, COMMIT_DATE.如果遇到錯誤,可以直接透過查詢jss.j1_data_change_log表,來確定出錯的記錄和具體原因,方面進一步除錯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28628435/viewspace-1984384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 捕獲 React 異常React
- iOS異常捕獲iOS
- Auto.js Pro 資料獲取 與 異常捕獲JS
- python異常捕獲Python
- android 異常捕獲-UncaughtExceptionHandlerAndroidException
- 記錄Javascript 異常捕獲JavaScript
- PHP使用trycatch,捕獲異常PHP
- 【筆記】forall 異常捕獲筆記
- 前端異常捕獲與上報前端
- PLSQL宣告部分異常捕獲SQL
- wpf 捕獲全域性異常
- 儲存過程——異常捕獲&列印異常資訊儲存過程
- python中如何捕獲異常Python
- JS 使用try catch捕獲異常JS
- Auth 授權的異常捕獲
- 異常的捕獲及處理
- python動態捕獲異常Python
- oracle異常捕獲程式碼(轉)Oracle
- 10. 異常捕獲、生成式
- oracle goldengate 遠端捕獲和投遞OracleGo
- 談談前端異常捕獲與上報前端
- DRF之異常捕獲原始碼分析原始碼
- 捕獲不到異常嘗試除以0
- 單資料庫捕獲應用例項——流資料庫
- 前端JavaScript 常見的報錯及異常捕獲前端JavaScript
- 異常處理機制(二)之異常處理與捕獲
- spring-boot 統一異常捕獲Springboot
- SpringBoot之全域性捕獲異常Spring Boot
- 在 C++ 中捕獲 Python 異常C++Python
- iOS 日誌重定向和異常捕獲iOS
- C#中有關異常的捕獲演示C#
- Android 全域性異常捕獲之CrashHandlerAndroid
- Oracle GoldenGate 12c實時捕獲SQL Server資料OracleGoSQLServer
- 前端開發中的Error以及異常捕獲前端Error
- Java捕獲非檢查異常----UncaughtExceptionHandler的使用JavaException
- 【Spring Cloud】Feign呼叫異常觸發降級後如何捕獲異常SpringCloud
- 記錄使用 guzzlehttp 異常捕獲踩坑記錄HTTP
- Flutter異常捕獲和Crash崩潰日誌收集Flutter