[20160201]db_link与子光标问题.txt

--生产系统遇到一个关于db_link产生大量子光标问题,当cursor_sharing=force的情况下,通过测试说明。
--注:这个问题我的测试仅仅存在10.2.0.4,11.2.0.4没有这个问题。

1.环境:
SCOTT@test> @&r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- ----------------------------------------------------------------
x86_64/Linux 2.4.xx            10.2.0.4.0     Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

SCOTT@test> CREATE PUBLIC DATABASE LINK loopback USING '192.168.100.33:1521/test';
Database link created.

create or replace view v_emp as select * from emp@loopback;
create or replace view vv_emp as select * from v_emp;
create or replace view vvv_emp as select * from emp@loopback;

2.测试:
SCOTT@test> alter system flush shared_pool;
System altered.

SCOTT@test> alter session set cursor_sharing=force ;
Session altered.

--执行如下语句:
select * from emp@loopback where empno=1;
select * from emp@loopback where empno=2;
select * from emp@loopback where empno=3;

SCOTT@test> @ &r/dpc '' ''
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------
SQL_ID  4zzhmns2wsf4g, child number 2
select * from emp@loopback where empno=:"SYS_B_0"
NOTE: cannot fetch plan for SQL_ID: 4zzhmns2wsf4g, CHILD_NUMBER: 2
      Please verify value of SQL_ID and CHILD_NUMBER;
      It could also be that the plan is no longer in cursor cache (check v$sql_plan)
8 rows selected.

SCOTT@test> select count(*) from v$sql where sql_id='4zzhmns2wsf4g';
  COUNT(*)
----------
         3

--当sql语句仅仅含有远程表,无法通过dbms_xplan.display_cursor获得执行计划。
--可以发现产生了3个子光标。当大量相似的sql语句执行时(在cursor_sharing=force的情况下)会产生大量的子光标。

--换成如下语句依旧:
select * from v_emp where empno=1;
select * from v_emp where empno=2;
select * from v_emp where empno=3;

SCOTT@test> @ &r/dpc '' ''
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------
SQL_ID  ftmcqat5qjmzc, child number 2

select * from v_emp where empno=:"SYS_B_0"

NOTE: cannot fetch plan for SQL_ID: ftmcqat5qjmzc, CHILD_NUMBER: 2
      Please verify value of SQL_ID and CHILD_NUMBER;
      It could also be that the plan is no longer in cursor cache (check v$sql_plan)

SCOTT@test> select count(*) from v$sql where sql_id='ftmcqat5qjmzc';
  COUNT(*)
----------
         3

3.如果改用绑定变量看看:

variable x number ;
exec :x :=1;
select * from v_emp where empno=:x;
exec :x :=2;
select * from v_emp where empno=:x;
exec :x :=3;
select * from v_emp where empno=:x;

SCOTT@test> @ &r/dpc '' ''
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------
SQL_ID  97pta6n0k7wtv, child number 0

select * from v_emp where empno=:x

NOTE: cannot fetch plan for SQL_ID: 97pta6n0k7wtv, CHILD_NUMBER: 0
      Please verify value of SQL_ID and CHILD_NUMBER;
      It could also be that the plan is no longer in cursor cache (check v$sql_plan)

SCOTT@test> select sql_text from v$sql where sql_id='97pta6n0k7wtv';
SQL_TEXT
------------------------------------------------------------
select * from v_emp where empno=:x

--可以发现仅仅1个子光标。

4.如果在访问时加入本地表看看:

select a.* from (select * from v_emp where empno=1) a,dual;
select a.* from (select * from v_emp where empno=2) a,dual;
select a.* from (select * from v_emp where empno=3) a,dual;

SCOTT@test> @ &r/dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  5puh2hnr82su0, child number 0
-------------------------------------
select a.* from (select * from v_emp where empno=:"SYS_B_0") a,dual
Plan hash value: 242706220
---------------------------------------------------------------------------------------
| Id  | Operation     | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | Inst   |IN-OUT|
---------------------------------------------------------------------------------------
|   1 |  NESTED LOOPS |      |      1 |    37 |     3   (0)| 00:00:01 |        |      |
|   2 |   FAST DUAL   |      |      1 |       |     2   (0)| 00:00:01 |        |      |
|   3 |   REMOTE      | EMP  |      1 |    37 |     1   (0)| 00:00:01 | LOOPB~ | R->S |
---------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$5C160134
   2 - SEL$5C160134 / DUAL@SEL$1
   3 - SEL$5C160134 / EMP@SEL$3

--可以发现child number 0,也没有产生子光标。

--在生产系统由于产生大量子光标,导致出现cursor: pin S wait on X等待事件,最终导致出现ora-4031 错误,目前不得不重启数据库。

Errors in file /u01/app/oracle/admin/mid/bdump/mid_smon_3832.trc:
ORA-04031: Message 4031 not found; No message file for product=RDBMS, facility=ORA; arguments: [4064] [shared pool] [lock table sys.mon_mods$ in ...] [sga heap(1,0)] [kglsim heap]
ORA-04031: Message 4031 not found; No message file for product=RDBMS, facility=ORA; arguments: [3896] [shared pool] [select ts#,file#,block#,cols...] [sga heap(1,0)] [kglsim object batch]

[20160201]db_link与子光标问题.txt相关推荐

  1. [20180602]函数与标量子查询3.txt

    [20180602]函数与标量子查询3.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...

  2. 20180601]函数与标量子查询2.txt

    [20180601]函数与标量子查询2.txt --//昨天看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...

  3. [20180626]函数与标量子查询14.txt

    [20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查 ...

  4. [20160307]绑定变量的分配长度3.txt

    [20160307]绑定变量的分配长度3.txt --如果绑定变量中字符串分配占用空间的长度变化,oracle会建立子光标. --参考连接: http://blog.itpub.net/267265/ ...

  5. [20170515]数据库启动的一个疑问.txt

    [20170515]数据库启动的一个疑问.txt --//别人问的问题我自己以前也没有注意,做一个记录. 1.环境: SYS@book> startup   mount ORACLE insta ...

  6. matlab批量合并txt文件

    1: %% merge.m 2: %%%%Main程序%%%%%% 3: %%%%%% 4: %%%%%%本程序合并完各个子文件夹中的txt到主文件目录下,并且合并的文件以子文件夹名字命名 5: %% ...

  7. React组件通信传值 父传子 子传父 兄弟组件传值

    一.父组件传递子组件 在父组件中引入子组件,将父组件的state值放到子组件标签中传递,在子组件中用this.props.传值名称,接收 父组件代码: import React, { Componen ...

  8. 还不懂shell脚本核心?这一篇就够了。

     前言: 现在在我们已经知道了Linux系统和命令行的基础知识,是时候开始编程了.本章讨论编写 shell脚本的基础知识.在开始编写自己的shell脚本前,你必须了解的基本概念都在这里. 一.多个sh ...

  9. Linux 1: Cloud computing operating system management | Linux

    Linux 系列 Linux 1: 云计算操作系统管理 Cloud computing operating system management | Linux Linux 2: 云计算网络应用管理 C ...

最新文章

  1. 关于curl使用记录
  2. 计算机视觉编程——图像聚类
  3. mysql 事物gljbie_图片转成base64格式上传至数据库
  4. centos 推荐使用epel源
  5. 华为与思科网络产品详细比较
  6. 如何用苹果手机生成扫描件
  7. java 得到checkbox_【JavaWeb】获得选中的checkbox的value
  8. ARMV8 datasheet学习笔记5:异常模型
  9. 深度学习在CTR预估中的应用 文献收藏
  10. linux装mongodb数据库,Linux下安装配置MongoDB数据库
  11. python嵌套列表法实现树_在python中创建递归迭代嵌套列表的“数据树”路径
  12. is和==,encode和decode
  13. 在网页HTML中嵌入QQ、MSN、旺旺、Gtalk快速对话框代码
  14. AcWing 1183电力(Tarjan求割点)
  15. java程序员的cto成长之路
  16. model.train()与model.eval()的用法、Dropout原理、relu,sigmiod,tanh激活函数、nn.Linear浅析
  17. 含泪整理最优质现代家装su模型素材,你想要的这里都有
  18. ALGOL语言 发展历史
  19. envi读取格式ang 还是mtl,mtl文件格式
  20. tomcat命名来源(歪批)

热门文章

  1. 微博安全是一个系统问题包括服务器安全,应用安全开发注意事项
  2. Linux学习笔记(一)------实操排雷
  3. 助你解决新手开车四大问题 为您支招
  4. 程序员成长最快的环境
  5. H.264算法的优化策略
  6. JVM 的 Finalization Delay 引起的 OOM(java.lang.OutOfMemoryError:null at sun.misc.Unsafe.allocateMemory.)
  7. 狗窝里的小日子 ...
  8. The xxx collides with a package/type
  9. ubuntu入门知识
  10. java基础—方法重载(overload)