最近南方的雨下的很烦人。 暴雨,一下就是一天,不过平时我也不怎么出门,所以也就无所谓了。 在家看看电影,做做测试,在补补觉,周末2天也就过去了。

刚才owind 让我做了个测试。 正在使用的cursor 能否被移除。 关于cursor的东西, 几个星期前就准备整理一下的,可是看了一下官方文档,东西太多了。 一时也没不知道从哪下手。 就放那了。 今天这个测试也算对cursor 知识的一个开始。

测试就为证明以下两句话:

cursor is pined ,can't be age out. only freeable cursor can be flush.

The buffer is now unpinned and is a candidate for immediate aging out。

--创建测试表

SQL>create table td as select * from user_tables;

--在session A 修改表,注意没有commit

SYS@anqing2(rac2)> update td set tablespace_name='users';

719 rows updated.

--在Session B修改表,同样不commit

SYS@anqing2(rac2)> update td set tablespace_name='users';

-- 在session A 没有commit的情况下,这里是hang住的,验证一下

--查看session A的SID:

SYS@anqing2(rac2)> select sid from v$mystat where rownum=1;

SID

----------

130

--查看Lock 信息

SYS@anqing2(rac2)> select sid,lmode,request from v$lock where type in ('TX','TM');

SID      LMODE    REQUEST

---------- ---------- ----------

124          0          6

130          3          0

124          3          0

130          6          0

DML操作一般要加两个锁,一个是对表加模式为3的TM锁,一个是对数据行的模式为6的TX锁。只要操作的不是同一行数据,是互不阻塞的。

根据查询结果,我们看到,Session B 已经拿到了3级别的TM 锁, 现在在等待6级别的TX锁。 但6级的TX 锁在session A(130)持有,所以session B(124)处于等待状态。

-- Flush shared pool

SYS@anqing2(rac2)> alter system flush shared_pool;

System altered.

-- 查看v$sql 里,对应的cursor 是否存在

SYS@anqing2(rac2)> select sql_text from v$sql where sql_text like 'update%';

SQL_TEXT

--------------------------------------------------------------------------------

update td set tablespace_name=:"SYS_B_0"

我们的cursor 还存在v$sql 里。

-- 在session A 提交

SYS@anqing2(rac2)> commit;

Commit complete.

-- 提交之后,session A 对应的Lock 就释放了。

SYS@anqing2(rac2)> select sid,lmode,request from v$lock where type in ('TX','TM');

SID      LMODE    REQUEST

---------- ---------- ----------

124          3          0

124          6          0

--session B 结束hang状态后在commit

SYS@anqing2(rac2)> update td set tablespace_name='users';

719 rows updated.

SYS@anqing2(rac2)> commit;

Commit complete.

-- 全部commit 之后,我们不flush,查看

SYS@anqing2(rac2)> select sql_text from v$sql where sql_text like 'update%';

SQL_TEXT

--------------------------------------------------------------------------------

update td set tablespace_name=:"SYS_B_0"

对应的cursor 还存在

--我们flush 一下

SYS@anqing2(rac2)> alter system flush shared_pool;

System altered.

--查看cursor

SYS@anqing2(rac2)>  select sql_text from v$sql where sql_text like 'update%';

刚才的cursor 已经不存在了。

以上测试只为证明一句话:

正在被pin 住的cursor 不能从shared pool里移除,只有unpin的cursor 才能被移除。

-------------------------------------------------------------------------------------------------------

Blog: http://blog.csdn.net/tianlesoftware

Email: dvd.dba@gmail.com

DBA1 群:62697716(满);   DBA2 群:62697977(满)   DBA3 群:62697850(满)

DBA 超级群:63306533(满);  DBA4 群: 83829929  DBA5群: 142216823

DBA6 群:158654907  聊天 群:40132017   聊天2群:69087192

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

Oracle 下 unpin 的cursor 才能被移除相关推荐

  1. 马士兵 oracle seton,马士兵Oracle 下

    29.--------------主键束缚------------- create table stu ( id number(6), name varchar2(20) constraint stu ...

  2. 批量处理SQL Oracle下:

    Oracle下: 1.新增一个批处理文件:如a.bat 2.新增一个SQL脚本文件:如a.sql 3.a.bat中输入:sqlplus 用户名/密码 @C:\a.sql(假设a.sql在c:盘根目录下 ...

  3. Oracle Study--RAW Device在Oracle下的应用

    Oracle Study--RAW Device在Oracle下的应用 1. 什么是裸设备(RAW DEVICE)         裸设备是指未创建文件系统的磁盘分区(raw partition)或逻 ...

  4. oracle查看创建索引语句,ORACLE下如何获得全部的索引创建语句

    ORACLE下如何获得全部的索引创建语句 ORACLE下如何获得全部的索引创建语句 今天打算将一个数据库的索引在另一个测试库上重新创建一遍,研究了一下. set pagesize 0 set long ...

  5. 14、ORACLE下的基本SQL操作

    ORACLE下的基本SQL操作 1.获取表字段 select * from user_tab_columns where Table_Name='用户表' order by column_name 2 ...

  6. 10、oracle下PL/SQL编程基础

    ORACLE下的PL/SQL编程基础 PL/SQL语言是程序化程序设计语言,块是PL/SQL编程中的基本结构,其优点在于支持SQL.支持面向对象编程.性能好.可移植性.与sql集成.安全性高等. 1. ...

  7. 7、oracle下的序列

    ORACLE下的序列 序列是一种数据库对象,用于生成一系列的整数,可以用来唯一的标记一条记录,在mysql种有字段自增的概念,但是oracle种是没有字段自增的,所以可以使用序列来作为主键的自动生成方 ...

  8. 5、oracle下数据完整性约束

    ORACLE下数据完整性约束 为了保证数据的完整性和结构的正确性,oracle也有很多约束条件. 1.数据完整性 为了保证数据的完整性,一般对数据列(字段)进行如下约束,主键约束(PRIMARY KE ...

  9. oracle将千万行查询优化到一秒内,oracle下一条SQL语句的优化过程(比较详细)

    oracle下一条SQL语句的优化过程(比较详细) 更新时间:2010年04月14日 23:56:49   作者: 很简单的一次调整,语句加了适当的索引后性能就有大幅的提升.当时看到这条语句的时候,第 ...

最新文章

  1. SpringBoot内置tomcat启动原理
  2. python 使用@property 来限制类属性的外部更改
  3. BugkuCTF-MISC题convert
  4. 05 吸收应用-会整理还不够?教你吸收、联想、输出、应用
  5. 常用的php类、方法、函数 注释标记
  6. 现代通信原理5.1:信号的希尔伯特变换
  7. CAS4.0.0链接Redis4.0.6
  8. SAP License:SAP反记帐和红字冲销
  9. 两种领导力:温柔与严厉
  10. 【每日三省吾身】常见Web漏洞基本原理
  11. php,调用百地图度API实现标记
  12. vue 使用 :class 根据不同状态值设置状态文字颜色不同
  13. Josephus问题(最后一个退出的人)
  14. Python图像锐化及边缘检测(Roberts、Prewitt、Sobel、Lapllacian、Canny、LOG)
  15. 公羊优链蜘蛛池【高权重】(白狐 公羊seo)
  16. Type-C接口手机你还只知道可正反随意插?这些神操作赶紧来看看
  17. 百度API的基本介绍和使用场景
  18. 因子IC、IR信息系数和信息比率的介绍
  19. 删除服务 MySQL mysql删除服务 无法删除服务
  20. 如何才能高效的使用mac笔记本

热门文章

  1. 架构师是如何炼成的?以天猫APP架构开发模式升级工程为例
  2. Console.ReadLine(); 获取用户输入内容
  3. Oracle RMAN CATALOG数据库的配置
  4. q-LDPC实验进展
  5. WinForm 应用程序中开启新的进程及控制
  6. jsonStore加载远程和本地数据实例
  7. 【杂谈】Oracle里scott的由来
  8. CCNA考试认证教材【 ip地址 子网划分 】视频教程【高清】
  9. jQuery框架学习第二天:jQuery中万能的选择器
  10. 26期20180607 set_uid stick_bit 软硬连接