千家信息网

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

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍了如何解决OGG同步复制时与兼容触发器的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。搭建OGG时,一般都会dis
千家信息网最后更新 2025年02月01日如何解决OGG同步复制时与兼容触发器的问题

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

触发器 同步 业务 数据 目标 篇文章 逻辑 问题 相同 代码 同时 过程 一致 事务 价值 全局 关键 关键字 兴趣 原因 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术未来发展规划 服务器隐私选项要关闭吗 服务器上自带bcompare吗 计算机网络安全的概念和防控 oracle数据库asm怎么查 洛阳市公安局副局长网络安全 数据库字段修改字段类型 深圳市光通网络技术 泉州市网络安全教育平台作业 网络安全维护班会总结 在铁锈战争怎么加入官方服务器 机器人离线编程软件开发 课本多媒体数据库技术 互联网科技峰会 实体类怎么对应数据库字段 unix数据自动传到服务器 语音软件开发需要多少钱 服务器怎么删除所以op 软件开发 招标 金额 广州网络技术有限公司高建峰 数据库的数据缓冲区的作用 呈贡区第三方软件开发市场报价 如何获得数据库数据 网络安全要树立正确的什么观 番禺网络安全服务公司 派出所内部开展网络安全检查 60级怀旧服人数最多的服务器 sql主数据库怎么保存 江苏软件开发人员工资的标准的 教职工网络安全十不准承诺书
0