DB_LINK使用的一个注意点

Yggdrasil 2017-12-20 原文

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

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

 

发表于 2017-12-20 12:51 Yggdrasil 阅读() 评论() 编辑 收藏

 

版权声明:本文为Yggdrasil原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/Yggdrasil/p/8073182.html

DB_LINK使用的一个注意点的更多相关文章

  1. SQL Database for Modern Developers

    好书分享,面向开发者的Azure SQL Database最佳实践,也适用SQL Server 2016以上的 […]...

  2. 如何跑通第一个 SQL 作业

    简介: 本文由阿里巴巴技术专家周凯波(宝牛)分享,主要介绍如何跑通第一个SQL。 一、SQL的基本概念 1.S […]...

  3. sql server之SQL SELECT INTO 语句

    SELECT INTO 语句可用于创建表的备份复件。 SELECT INTO 语句 SELECT INTO 语 […]...

  4. sql server 三角函数

    正弦函数SIN(x)和反正弦函数ASIN(x)   –SIN(x)返回x的正弦,其中x为弧度值   […]...

  5. SQL Sever2008r2 数据库服务各种无法启动的解决办法

    一.Sql Server服务远程过程调用失败解决       以前出现过这个问题,那时候是因为把实例安装在了D […]...

  6. ROW_NUMBER() OVER函数的基本用法

    语法: ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLU […]...

  7. (转)Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题

    2009-4-25 8:12:34 org.apache.catalina.core.ApplicationC […]...

  8. SQL Server 高级SQL

    查询view 的列和列数据类型 SELECT COLUMN_NAME, DATA_TYPE FROM INFO […]...

随机推荐

  1. 轉 @@identity与scope_identity()函数的区别

      內容轉自 http://www.cnblogs.com/MingDe/archive/2011/10/12 […]...

  2. 关于利用HashSet,split,deleteCharAt等方法详解

    1.首先了解一下HashSet的原理: Set接口  Set是对数学上集的抽象,Set中不包含重复的元素.如何 […]...

  3. 常见的内存分配

    动态内存分配函数的头文件:<stdlib.h>   1.malloc 函数的使用方法     ma […]...

  4. tomcat 正常启动但不能访问

    Eclipse中的Tomcat可以正常启动,不过发布项目之后,无法访问,包括http://localhost: […]...

  5. 如何查看安装python和numpy的版本 – hxing

    如何查看安装python和numpy的版本 命令行下查看python和numpy的版本和安装位置 1、查看py […]...

  6. 北京市社会保险网上服务平台 – FryFish

    北京市社会保险网上服务平台 Posted on 2012-02-06 13:50  FryFish  阅读(2 […]...

  7. Google https服务被屏蔽

    Google https服务被屏蔽 根据Google透明度报告显示,从上周(5月27日)开始,Google的部 […]...

  8. 原理解密 → Spring AOP 实现动态数据源(读写分离),底层原理是什么

    开心一刻   女孩睡醒玩手机,收到男孩发来一条信息:我要去跟我喜欢的人表白了!  女孩的心猛的一痛,回了条信息 […]...

展开目录

目录导航