zoukankan      html  css  js  c++  java
  • Oracle 数据同步系列--触发器

       现在随着项目集成的越来越深入,异构的数据多起来,数据同步的场景也用的多起来,我甚至在考虑是否忽悠用户上Oracle GoldenGate了,这样就可以不用考虑采用哪种同步方案了。

       简单的介绍一下我们数据的业务,与边界交换网管相关,有两个表一个是缓冲表,另外一个是持久化表。在一个库类,不同的表名,看似很简单,

    要不然也不会写出来,主要是其中有多个blob字段! 这样有如下个问题

       1.Blob字段无法做数据变化监控,只能监控id 和其他字段的变化

       2.Blob字段在入另外表时必须先iNSERT 后 UPDATE,总共在一个事物隔离级别中,进行的。

       想了个偷懒的方法

       1.通过ID,得到变化的id,在缓冲表中得到,触发的数据,然后通过merge into快速的更新到持久化表。

       出现的问题

        

    ORA-04091: 表 ORA-04091: 表 BOCOITMS.ITMS_VES_EPODATA_MEDIASYN 发生了变化, 触发器/函数不能读它
    ORA-06512: 在 "BOCOITMS.TRIG_VES_EPODATA_MEDIASYN", line 4
    ORA-04088: 触发器 'BOCOITMS.TRIG_VES_EPODATA_MEDIASYN' 执行过程中出错
    ORA-06512: 在 "BOCOITMS.PROC_MEDIA_SYNC", line 7
    . 发生了变化, 触发器/函数不能读它

       很眼熟,这就是触发器中无法再去回查原来的表。

           

             2.通过自治式事务解决以上的问题,但是自治事务是无法拿到最新的值得。

       最后还是通过老老实实的方法。先插入空的blob,再更新blob的方式解决的 。 

      

     

      

  • 相关阅读:
    等级,
    JS高阶---回调函数
    JS高阶---函数
    JS高阶---对象
    JS高阶---数据、变量、内存
    JS高阶---简介+数据类型
    JS里==和===区别
    vue中assets和static的区别
    vue2.0 实现导航守卫(路由守卫)---登录验证
    exports与module.exports,export与export default 之间的关系和区别
  • 原文地址:https://www.cnblogs.com/jerryxing/p/3450426.html
Copyright © 2011-2022 走看看