创建Goldengate例外句丙记录跟踪Oracle错误
Goldengate沒有例外處理機制,如果復制進程出錯,就會Abend,并Rollbak事務到上一個Checkpoint.這在生產環境中是不理想的做法.
HANDLECOLLISIONS 和 NOHANDLECOLLISIONS 這兩個參數用來控制復制進程是否嘗試解決重復記錄和丟失記錄的錯誤.但是,這類錯誤僅僅是忽略是不行的.
需要有一個記錄,記下有錯誤發生,哪個復制進程出錯,是由什么數據引起的,這可以通過創建例外句柄來記錄下這些信息,但不影響復制進程繼續進行.
步驟
1.創建例外表:
create table ggs_admin.exceptions
( rep_name varchar2(8)
, table_name varchar2(61)
, errno number
, dberrmsg varchar2(4000)
, optype varchar2(20)
, errtype varchar2(20)
, logrba number
, logposition number
, committimestamp timestamp
);
ALTER TABLE ggs_admin.exceptions ADD (?
? CONSTRAINT PK_CTS?
?PRIMARY KEY?
?(logrba, logposition, committimestamp) USING INDEX PCTFREE 0 TABLESPACE MY_INDEXES);
表要創建在Goldengate的管理用戶下,并且能記下所有復制進程的例外數據.
2.編寫復制進程的采納書文件,增加例外處理的宏代碼
[oracle@linuxserver1 ggs]$ ggsci
GGSCI (linuxserver1) 1> edit params RTARGET1
-- This starts the macro
MACRO #exception_handler
BEGIN
, TARGET ggs_admin.exceptions
, COLMAP ( rep_name = "RTARGET1"
, table_name = @GETENV ("GGHEADER", "TABLENAME")
, errno = @GETENV ("LASTERR", "DBERRNUM")
, dberrmsg = @GETENV ("LASTERR", "DBERRMSG")
, optype = @GETENV ("LASTERR", "OPTYPE")
, errtype = @GETENV ("LASTERR", "ERRTYPE")
, logrba = @GETENV ("GGHEADER", "LOGRBA")
, logposition = @GETENV ("GGHEADER", "LOGPOSITION")
, committimestamp = @GETENV ("GGHEADER", "COMMITTIMESTAMP"))
, INSERTALLRECORDS
, EXCEPTIONSONLY;
END;
-- This ends the macro
3.在復制進程的參數文件中增家MAP部分,對于每個表增加#exception_handler(),用REPERROR (-1, EXCEPTION)參數說明需要記錄Oracle Error.
REPERROR (DEFAULT, EXCEPTION)
REPERROR (DEFAULT2, ABEND)
REPERROR (-1, EXCEPTION)
MAP SRC.ORDERS, TARGET TGT.ORDERS;
MAP SRC.ORDERS #exception_handler()
MAP SRC.ORDER_ITEMS, TARGET TGT.ORDER_ITEMS;
MAP SRC.ORDER_ITEMS #exception_handler()
MAP SRC.PRODUCTS, TARGET TGT.PRODUCTS;
MAP SRC.PRODUCTS #exception_handler()
REPERROR:控制復制進程在執行MAP語句時如何處理錯誤
DEFAULT:參數設置處理指定的錯誤以外,對錯誤的全局響應
Default2:參數指定要捕獲可能會發生的所有的未想到的Error,并使進程Abend
4.停止并重啟復制進程
GGSCI (linuxserver1) 3> stop REPLICAT RTARGET1
GGSCI (linuxserver1) 4> start replicat RTARGET1
info all
總結
以上是生活随笔為你收集整理的创建Goldengate例外句丙记录跟踪Oracle错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Oracle中varchar2和db
- 下一篇: shell调用各种sqlplus用法