新聞中心
這篇文章主要介紹了如何解決OGG同步復制時與兼容觸發(fā)器的問題,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比都江堰網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式都江堰網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋都江堰地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。
搭建OGG時,一般都會disable trigger。有時候,由于特定原因,除了同步數(shù)據(jù),還需要在目標庫上進行業(yè)務操作,而觸發(fā)器又實現(xiàn)了很多業(yè)務邏輯,這時候,就不能采用
alter trigger tr_dept disable的方式直接屏蔽了。但是,enable的話又可能會造成數(shù)據(jù)的問題,比如,觸發(fā)器中操作某個表,但是其實那個表已經(jīng)通過OGG進行了同步,這樣,就會造成重復操作數(shù)據(jù),
進而導致數(shù)據(jù)與主庫不一致。
我們的實施要求,OGG同步一些業(yè)務數(shù)據(jù)到目標庫,同時目標庫上觸發(fā)器不能停(我們ERP系統(tǒng)很多業(yè)務邏輯是在觸發(fā)器中實現(xiàn)的),因客戶要在目標庫上進行某些業(yè)務。
可能的解決方案(這里以scott這個schema為例, OGG的搭建過程省略):
1. 觸發(fā)器代碼:
點擊(此處)折疊或打開
CREATE OR REPLACE TRIGGER tr_dept
BEFORE INSERT OR UPDATE ON dept
FOR EACH ROW
DECLARE
v_ind PLS_INTEGER;
BEGIN
SELECT COUNT(*)
INTO v_ind
FROM tmp_disable_trigger
WHERE table_name = 'dept';
IF v_ind > 0 THEN
RETURN;
END IF;
INSERT INTO dept_log (id, dt) VALUES (seq_dept_log.nextval, SYSDATE);
END;
其中tmp_disable_trigger是個事務級全局臨時表,相當于做了個開關, insert dept_log相當于額外的業(yè)務邏輯。
點擊(此處)折疊或打開
create global temporary table tmp_disable_trigger(
table_name varchar2(100)
) on commit delete rows;
2. 修改目標端復制進程參數(shù), 關鍵字sqlexec
GGSCI55> view params r_oggdb
replicat r_oggdb
SETENV (ORACLE_SID = "oggdb")
userid ggs,password ggs
assumetargetdefs
reperror default,discard
discardfile ./dirrpt/r_oggdb.dsc,append,megabytes 50
dynamicresolution
MAP scott.*, target scott.*, SQLEXEC (SPNAME scott.sp_disable_trigger, ID sp_disable_trigger, PARAMS (p_tablename = 'dept'));
經(jīng)測試,在進行scott.dept表同步時,不會向dept_log中插入新的數(shù)據(jù)。這里,觸發(fā)器就被邏輯上繞過了(實際上還是要觸發(fā),只是不執(zhí)行觸發(fā)器中的代碼了)
需要注意的是,如果是有多個地方要執(zhí)行相同的過程,需要指定ID, 不同行的ID不能相同,例:
MAP scott.dept, target scott.dept, SQLEXEC (SPNAME scott.sp_disable_trigger, ID sp_disable_trigger1, PARAMS (p_tablename = 'dept'));
MAP scott.emp, target scott.emp, SQLEXEC (SPNAME scott.sp_disable_trigger, ID sp_disable_trigger2, PARAMS (p_tablename = 'dept'));
否則可能會有如下錯誤:
2017-06-13 11:23:30 ERROR OGG-00303 Oracle GoldenGate Delivery for Oracle, R_ERP_FY.prm: Duplicate stored procedure name (scott.sp_disable_trigger)
感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何解決OGG同步復制時與兼容觸發(fā)器的問題”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!
網(wǎng)頁名稱:如何解決OGG同步復制時與兼容觸發(fā)器的問題
網(wǎng)站網(wǎng)址:http://fisionsoft.com.cn/article/posehs.html