휴~ 잘안되네요.. 여건상 자주 발생되는 트랜잭션이 아니어서
트리거를 이용하여 두개의 DB를 동기화 하려 하니 아래와 같이 에러가
발생합니다
=========================================================
ORA-04092: 트리거 안에 를 할 수 없습니다
ORA-02063: line가 선행됨 (IDMS.IDS1로 부터)
ORA-06512: "DEF.P_DEFERRED_TX2", 줄 7에서
ORA-06512: "DEF.TRG_DEFER1", 줄 7에서
ORA-04088: 트리거 'DEF.TRG_DEFER1'의 수행시 오류
=========================================================
방법은 트리거를 이용하여 상대 DB의 펙케지를 실행하는
방법이죠
--------일단 양쪽 테이블에 트리거를 걸고--------
CREATE OR REPLACE TRIGGER DEF.TRG_DEFER
AFTER INSERT
ON DEF.DEF_TEST
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
nodes dbms_defer.node_list_t;
BEGIN
if dbms_reputil.from_remote = FALSE then
begin
p_deferred_tx.def_ins_test@idms.ids1(:new.a,
:new.b);
proc_name=>'DEF_INS_TEST',arg_count=>2);
end;
end if;
END ;
/
========아래와 같은 펙키지를 양쪽에 생성후---------
CREATE OR REPLACE PACKAGE p_deferred_tx AS
PROCEDURE def_ins_test(v_a number, v_b varchar2);
END p_deferred_tx;
/
CREATE OR REPLACE package body p_deferred_tx
as
procedure def_ins_test(v_a number, v_b varchar2)
is
begin
dbms_reputil.replication_off;
execute immediate 'alter trigger trg_defer
disable'; insert into def.def_test(a,b) values( v_a,
v_b);
execute immediate 'alter trigger trg_defer
enable';
dbms_reputil.replication_on;
end;
end p_deferred_tx;
/
데이타를 Insert하니 위 alter trigger
trg_defer 구문으로 대상 서버 트리거를
정지 해야 하는데.
실행할수 없다하는군요
도식: 아래와 같은 상황으로 표시가능하군요.
(DB1)insert -> trigger ----> (DB2) p_deferred_tx ->
alter trigger (X err)
----------------------
트리거를 정지할수 있는 방법을 알려주세요.?
아시겠지만 , 양쪽 서버에서 간헐적으로 입력되는 데이터를
양쪽서버에 똑같이 입력하려 합니다.
TPC, SnapShot 방법이 아닙니다. replication으로 보면
듀얼마스타라(?) 할까!
|