文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何解决OGG同步复制时与兼容触发器的问题

2024-04-02 19:55

关注

这篇文章主要介绍了如何解决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同步复制时与兼容触发器的问题”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯