中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決OGG同步復制時與兼容觸發器的問題

發布時間:2021-11-10 11:43:57 來源:億速云 閱讀:222 作者:小新 欄目:關系型數據庫

這篇文章主要介紹了如何解決OGG同步復制時與兼容觸發器的問題,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

     搭建OGG時,一般都會disable trigger。有時候,由于特定原因,除了同步數據,還需要在目標庫上進行業務操作,而觸發器又實現了很多業務邏輯,這時候,就不能采用
alter trigger tr_dept disable的方式直接屏蔽了。但是,enable的話又可能會造成數據的問題,比如,觸發器中操作某個表,但是其實那個表已經通過OGG進行了同步,這樣,就會造成重復操作數據,
進而導致數據與主庫不一致。
    我們的實施要求,OGG同步一些業務數據到目標庫,同時目標庫上觸發器不能停(我們ERP系統很多業務邏輯是在觸發器中實現的),因客戶要在目標庫上進行某些業務。
    可能的解決方案(這里以scott這個schema為例, OGG的搭建過程省略):
   
1. 觸發器代碼:

點擊(此處)折疊或打開

  1. CREATE OR REPLACE TRIGGER tr_dept

  2.   BEFORE INSERT OR UPDATE ON dept

  3.   FOR EACH ROW

  4. DECLARE

  5.   v_ind PLS_INTEGER;

  6. BEGIN

  7.   SELECT COUNT(*)

  8.     INTO v_ind

  9.     FROM tmp_disable_trigger

  10.    WHERE table_name = 'dept';


  11.   IF v_ind > 0 THEN

  12.     RETURN;

  13.   END IF;


  14.   INSERT INTO dept_log (id, dt) VALUES (seq_dept_log.nextval, SYSDATE);

  15. END;

其中tmp_disable_trigger是個事務級全局臨時表,相當于做了個開關, insert dept_log相當于額外的業務邏輯。

點擊(此處)折疊或打開

  1. create global temporary table tmp_disable_trigger(

  2.  table_name varchar2(100)

  3. ) on commit delete rows;

2. 修改目標端復制進程參數, 關鍵字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'));


經測試,在進行scott.dept表同步時,不會向dept_log中插入新的數據。這里,觸發器就被邏輯上繞過了(實際上還是要觸發,只是不執行觸發器中的代碼了)

需要注意的是,如果是有多個地方要執行相同的過程,需要指定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同步復制時與兼容觸發器的問題”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ogg
AI

中超| 安阳县| 镇远县| 泰顺县| 金华市| 固阳县| 崇文区| 昌黎县| 宝兴县| 进贤县| 罗城| 新化县| 金山区| 长兴县| 微博| 山东省| 九龙城区| 衡东县| 霍林郭勒市| 井陉县| 宜川县| 宝应县| 汉寿县| 芦山县| 双柏县| 隆德县| 石林| 读书| 六盘水市| 津南区| 前郭尔| 康保县| 霍州市| 莫力| 梧州市| 长沙县| 珲春市| 武强县| 剑阁县| 芜湖县| 江川县|