異常處理一(異常表通用型)
建立異常處理表
create table ogg.exception_log
( replicat_name varchar2(10),
table_name varchar2(100),
errno number,
dberrmsg varchar2(4000),
optype varchar2(20),
errtype varchar2(20),
logrba number,
logposition number,
committimestamp timestamp,
primary key(logrba,logposition,committimestamp)
);
REPLICAT添加異常處理
REPERROR (DEFAULT, EXCEPTION)
REPERROR (DEFAULT2,discard)---abend根據需求
map chf.a_t_1, target chf.a_t_1;
map chf.a_t_1, target ogg.exception_log,
EXCEPTIONSONLY,
INSERTALLRECORDS,
COLMAP ( replicat_name = "repl"
, 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"));
--執行個體中只處理chf.a_t_1表
異常處理二(異常表需要定製)
建立表(正常表和異常表)
--正常表
create table fei_1_1(id number , name varchar2(1000));
--異常表
create table ogg.exception_fei_1
( id number,
name varchar2(1000),
table_name varchar2(100),
errno number,
dberrmsg varchar2(4000),
optype varchar2(20),
errtype varchar2(20),
logrba number,
logposition number,
committimestamp timestamp,
primary key(logrba,logposition,committimestamp)
);
例外處理常式
map chf.fei_1, target chf.fei_1_1;
map chf.fei_1, target ogg.exception_fei_1,
EXCEPTIONSONLY,
INSERTALLRECORDS,
COLMAP ( USEDEFAULTS
, table_name = @GETENV ("GGHEADER", "TABLENAME")
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/
, 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"));
異常處理三(萬用字元MAPEXCEPTION)
建立異常表
create table ogg.exception_fei_all
( replicat_name varchar2(10),
table_name varchar2(100),
errno number,
dberrmsg varchar2(4000),
optype varchar2(20),
errtype varchar2(20),
logrba number,
logposition number,
committimestamp timestamp,
primary key(logrba,logposition,committimestamp)
);
例外處理常式
MAP chf.fei_*, TARGET chf.*,
MAPEXCEPTION (TARGET ogg.exception_fei_all,
COLMAP ( replicat_name = "repl"
, 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")));
處理說明:
REPERROR參數用以控制Replicat進程如何響應映射過程中發生的錯誤
DEFAULT參數代表一種全域錯誤類型,即除去所有已明確指定的錯誤外的一切錯誤
DEFAULT2參數代表當DEFAULT錯誤以Exception方式響應時,所有MAP映射中未定義Exception部分出現的所有錯誤
EXCEPTIONSONLY只能用於確定表的異常處理
MAPEXCEPTION可以用於萬用字元的表異常處理
作者:51cto Oracle小混子