How to Find which Session is Holding a Particular Library Cache Lock


  1. How to Find which Session is Holding a Particular Library Cache Lock

  2. 如何找到会话持有的锁为Library Cache Lock

  3. 今天在生产上开发说一个view删除不了,我试了一下,也不行。无思路,光辉说看看等待事件。

  4. select w.SID,
  5.        w.EVENT,
  6.        w.STATE,
  7.        round(w.SECONDS_IN_WAIT / 60 / 60, 2) hours,
  8.        s.USERNAME,
  9.        s.COMMAND,
  10.        s.BLOCKING_SESSION
  11.   from v$session_wait w, v$session s
  12.  where s.SID = w.SID
  13.    and w.STATE = \'WAITING\'
  14.    and w.wait_class <> \'Idle\'
  15.  order by w.SECONDS_IN_WAIT desc
  16.  
  17. 发现有个SID为2039的 Library Cache Lock 的等待事件,查看MOS,MOS上说有两种方法可以查看。

  18. 1. EXAMINE THE X$KGLLK TABLE

  19. X$KGLLK表只能被SYS/INTERNAL用户访问

  20. 通过关联v$sql去查sql_text时查不到东西。


  21. -查看等待事件为librarycache lock的session 的session address (SADDR):

  22. SQL> select sid,saddr from v$session where event=\'library cache lock\';

  23.        SID SADDR
  24. ---------- ----------------
  25.       2039 000000069C6D09A8



  26. SQL> select kgllkhdl Handle, kgllkreq Request,kglnaobj Object from x$kgllk where kgllkses = \'000000069C6D09A8\' and kgllkreq > 0;

  27. HANDLE REQUEST                             OBJECT
  28. ---------------- ---------- --------------------------------
  29. 00000004109DDDE0 3 MV_F_JIESUAN_VIEW


  30. /*我要删除的正是这个view*/

  31. --查看该回话的连接程序和用户名:
  32. select sid,username,terminal,program from v$session where saddr = \'000000069C6D09A8\'


  33. --或者直接通过回话的ADDR查到用户名,终端,程序

  34. select sid, username, terminal, program
  35.   from v$session
  36.  where saddr in
  37.        (select kgllkses
  38.           from x$kgllk lock_a
  39.          where kgllkreq > 0
  40.            and exists (select lock_b.kgllkhdl
  41.                   from x$kgllk lock_b
  42.                  where kgllkses = \'572eac94\' /* blocking session */
  43.                    and lock_a.kgllkhdl = lock_b.kgllkhdl
  44.                    and kgllkreq = 0));
  45.                    
  46. --根据SID,去查到serial#,然后kill掉:

  47. select sid,serial# from v$session where sid=\'XXX\' /*sid number*/

  48. alter system kill session \'SID,serial#\' immediate;


  49. 二、另外一种方法是通过oradebug做dump这里不再赘述




  50. 参考MOS ID:122793.1

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29210156/viewspace-1310540/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29210156/viewspace-1310540/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值