zoukankan      html  css  js  c++  java
  • Oracle 下 unpin 的cursor 才能被移除

     

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

    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操作一般要加两个锁,一个是对表加模式为3TM锁,一个是对数据行的模式为6TX锁。只要操作的不是同一行数据,是互不阻塞的。

     

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

     

    -- 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里移除,只有unpincursor 才能被移除。

     

     

     

     

     

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

    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,国内最早、最大的网络语音培训机构,我们提供专业、优质的Oracle技术培训和服务! 我们的官方网站:http://www.daosenoracle.com 官方淘宝店:http://daosenpx.taobao.com/
  • 相关阅读:
    JSP 服务器响应
    JSP 客户端请求
    杂烩笔记
    ExtJS panel
    DB2存储过程语法规则
    CentOS查看软件源提供的软件版本命令
    Linux查看程序端口占用情况【转】
    359. Logger Rate Limiter
    358. Rearrange String k Distance Apart
    357. Count Numbers with Unique Digits
  • 原文地址:https://www.cnblogs.com/tianlesoftware/p/3609660.html
Copyright © 2011-2022 走看看