zoukankan      html  css  js  c++  java
  • 使用oracle DB_LINK的一个注意点

    今天使用db_link的时候遇到了个有趣的问题,和大家分享一下;

    环境:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    是这样的,数据库有2个实例,分别为orcl和orcl2,在orcl实例用户A下有一张产品表,tfund_info,另外一个实例下需要获取该表的数据,并做修改,然后将更新同步回实例A.

    早上的时候我在实例orcl2内建立了一张用于存储tfund_info的数据,取名为joyin_fund_info.然后在实例orcl2建立一个db_link取名为to_joyin用于连接orcl,并且在joyin_fund_info下建立触发器如下:

    CREATE OR REPLACE TRIGGER ITFINPIF.TRI_JOYIN_FUND_INFO
    AFTER UPDATE ON
    ITFINPIF.JOYIN_FUND_INFO
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    DECLARE
    BEGIN
    IF :NEW.PUSH_STATE='M' THEN
    /*数据推送至产品主表 */
    UPDATE TFUND_INFO@TO_JOYIN SET
    AMT=:NEW.AMT ,--订单金额(元)
    JJSC =:NEW.JJSC ,--基础收益(元)
    CPMJJE =:NEW.CPMJJE,--产品募集金额(元)
    DJQZLX =:NEW.DJQZLX,--代金券总利息(元)
    JXQZLLX =:NEW.JXQZLLX -- 加息券总利息(元)
    WHERE R_ID=:NEW.R_ID;

    END IF;
    exception
    when others then
    insert into push_error_log@to_joyin (rq,error_id,sqlerr,o_code)
    values(sysdate,:new.r_id,'推送失败',:new.o_code);

    END;

    一个很简陋的触发器,也编译通过了.下午的时候由于业务要求,需要再多推送一个push_state字段,于是我到实例orcl下的tfund_info新增了一个字段push_state,并且修改该触发器

    /*数据推送至产品主表 */
    UPDATE TFUND_INFO@TO_JOYIN SET
    AMT=:NEW.AMT ,--订单金额(元)
    JJSC =:NEW.JJSC ,--基础收益(元)
    CPMJJE =:NEW.CPMJJE,--产品募集金额(元)
    DJQZLX =:NEW.DJQZLX,--代金券总利息(元)
    JXQZLLX =:NEW.JXQZLLX -- 加息券总利息(元)
    ,PUSH_STATE ='M'--推送状态
    WHERE R_ID=:NEW.R_ID;

     也就是再加了个PUSH_STATE ='M'--推送状态,但是编译的时候奇怪的问题出现了,这个触发器无论如何也无法编译成功,报错的原因是提示push_state标识符无效.这就很纳闷了,这个字段是我刚加的,怎么会无效呢?

    一开始以为是统计信息或者数据字典的问题,因为编译的时候用的是这些信息吧,但是数据字典应该是OK的.

    真正的问题原因是什么呢?

    实际上很简单,是共享池的缘故,db_link的会话应该是非常特别的,共享池内保存了之前的编译信息,才导致编译无法通过,

    使用命令

    alter system flush shared_pool

    再重新编译我们的触发器,就可以了.问题虽小,但却很坑,记在这里,大家要是遇到了可以借鉴一下^ ^

  • 相关阅读:
    HTTP协议
    Python学习--装饰器、列表生成式、生成器、map filter、json处理
    Python学习--多线程&多进程
    Python学习--发送邮件
    Python学习--异常处理
    【第五节】【Python学习】【configparser模块】
    【第一节】【shell脚本】【文件里的内容与变量中的内容大小写替换】
    【Python】【多线程多进程】
    【Selenium学习】【拖动滚动条】
    【Python】【异常的获取与处理】
  • 原文地址:https://www.cnblogs.com/Yggdrasil/p/8073182.html
Copyright © 2011-2022 走看看