久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何解決OGG同步復(fù)制時(shí)與兼容觸發(fā)器的問題

共計(jì) 1798 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。

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

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

點(diǎn)擊 (此處) 折疊或打開

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 是個(gè)事務(wù)級(jí)全局臨時(shí)表,相當(dāng)于做了個(gè)開關(guān),insert dept_log 相當(dāng)于額外的業(yè)務(wù)邏輯。

點(diǎn)擊 (此處) 折疊或打開

create global temporary table tmp_disable_trigger(

 table_name varchar2(100)

) on commit delete rows;

2. 修改目標(biāo)端復(fù)制進(jìn)程參數(shù),關(guān)鍵字 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)測(cè)試,在進(jìn)行 scott.dept 表同步時(shí),不會(huì)向 dept_log 中插入新的數(shù)據(jù)。這里,觸發(fā)器就被邏輯上繞過了(實(shí)際上還是要觸發(fā),只是不執(zhí)行觸發(fā)器中的代碼了)

需要注意的是,如果是有多個(gè)地方要執(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));

否則可能會(huì)有如下錯(cuò)誤:
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)

感謝你能夠認(rèn)真閱讀完這篇文章,希望丸趣 TV 小編分享的“如何解決 OGG 同步復(fù)制時(shí)與兼容觸發(fā)器的問題”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-24發(fā)表,共計(jì)1798字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 宜州市| 青海省| 盈江县| 大厂| 桃园市| 喀什市| 泌阳县| 荥经县| 麻阳| 康定县| 松原市| 红河县| 德兴市| 澄江县| 曲阜市| 昭苏县| 婺源县| 南部县| 高阳县| 云霄县| 察隅县| 班玛县| 泊头市| 额济纳旗| 新乡县| 驻马店市| 华蓥市| 西峡县| 定南县| 辽源市| 玉环县| 邹城市| 承德市| 西丰县| 天气| 宾阳县| 诸暨市| 尖扎县| 垦利县| 安康市| 九江县|