在博客中http://blog.sina.com.cn/s/blog_62defbef0101o7uy.html,讲述了如何利用存储过程解决流复制的错误。以下为升级版,通过调用manual_error可以自动处理所有错误,而非单个local_transaction的错误。
版本 v1.3
(MXDB版)
CREATE OR REPLACE PROCEDURE AUTOMATIC_ERROR(p_output_sql in varchar2, --是否输出检查和改错SQL语句
p_deal_error in varchar2, --是否执行改错
p_delete_errormsg in varchar2) --是否删除错误信息
is
--edit by leiyao v1.3 2013-12-5
--***************说明**************************
--1.p_output_sql=1,则输出不同步记录的检查和改错SQL语句。
--2.p_deal_error=1,则执行改错SQL语句。
--3.p_delete_errormsg=1,则删除dba_apply_error里的错误信息。
--*********************************************
v_local_transaction_id varchar2(40);
v_content varchar2(100);
--建立游标取local_transaction_id
cursor c_transaction_id is
select distinct local_transaction_id from dba_apply_error;
BEGIN
DBMS_OUTPUT.ENABLE(400000);
OPEN c_transaction_id;
LOOP
FETCH c_transaction_id
INTO v_local_transaction_id;
EXIT WHEN c_transaction_id%NOTFOUND;
v_content := '当前处理TRANSACTION_ID为:' || v_local_transaction_id;
DBMS_OUTPUT.PUT_LINE(v_content);
--调用manual_error存储过程
manual_error(v_local_transaction_id,
p_output_sql,
p_deal_error,
p_delete_errormsg);
END LOOP;
CLOSE c_transaction_id;
END AUTOMATIC_ERROR;