library cache lock

SESSION 34 执行存储过程:

SESSION 43 编译存储过程:

SESSION 25  删除存储过程:

1.查询查看library cache lock等待事件的相关会话  

SQL> select sid, P1RAW,P1TEXT ,event from v$session_wait where event not like '%message%';

       SID P1RAW	    P1TEXT							     EVENT
---------- ---------------- ---------------------------------------------------------------- ----------------------------------------------------------------
	 2 000000000000006F duration							     pmon timer
	 3 00										     VKTM Logical Idle Wait
	 5 0000000000000005 component							     DIAG idle wait
	 8 0000000000000005 component							     DIAG idle wait
	10 00000000000006F0 requests							     db file async I/O submit
	13 000000000000012C sleep time							     smon timer
	18 00										     Streams AQ: qmn coordinator idle wait
	25 000000002BF0897C handle address						     library cache lock
	26 0000000000000001 Type							     Streams AQ: qmn slave idle wait
	28 0000000000000001 Slave ID							     Space Manager: slave idle wait
	31 0000000000000004 file#							     db file sequential read

       SID P1RAW	    P1TEXT							     EVENT
---------- ---------------- ---------------------------------------------------------------- ----------------------------------------------------------------
	32 00										     Streams AQ: waiting for time management or cleanup tasks
	34 0000000000000004 file#							     db file sequential read
	43 000000002BF0897C handle address						     library cache pin

SQL> select saddr,sid,username,event,p1raw from v$session where event='library cache lock';

SADDR		SID USERNAME			   EVENT							    P1RAW
-------- ---------- ------------------------------ ---------------------------------------------------------------- ----------------
35FEE7F0	 25 TEST			   library cache lock						    000000002BF0897C

2.查询持有library cache lock的会话以及lock住的对象

SQL> select user_name,kglnaobj "Owner",kgllkses saddr,kgllkreq req,kgllkmod mod,kglnaobj object
 from x$kgllk lock_a
 where kgllkmod > 0
 and exists (select lock_b.kgllkhdl from x$kgllk lock_b
 where kgllkses = '35FEE7F0' /* blocked session */
 and lock_a.kgllkhdl = lock_b.kgllkhdl
 and kgllkreq > 0);  2    3    4    5    6    7  

USER_NAME		       Owner							    SADDR	    REQ        MOD OBJECT
------------------------------ ------------------------------------------------------------ -------- ---------- ---------- ---------------------------------

---------------------------
TEST			       TEST_PRC 						    35FD6A24	      0 	 1 TEST_PRC
TEST			       TEST_PRC 						    35FBEC58	      0 	 3 TEST_PRC

这里出现了两行结果,不过从mod列可以判断35FD6A24这个会话持有的lock模式为1(如果没记错的话数字1表示null),所以正在阻塞25会话的是会话地址为35FBEC58的会话。
你也可以通过以下sql做进一步验证


SQL> select sid,saddr,event,q.sql_text from v$session s,v$sql q
 where saddr in ('35FD6A24','35FBEC58') and s.sql_id=q.sql_id;   2  

       SID SADDR    EVENT		 SQL_TEXT
---------- -------- -------------------- --------------------
	34 35FD6A24 db file sequential r INSERT INTO TEST1 SE
		    ead 		 LECT * FROM TEST1

	43 35FBEC58 library cache pin	 alter procedure  tes
					 t_prc compile


从输出结果发现会话地址为35FBEC58 的会话正在编译TEST_PRC,所以该会话持有的lock模式肯定会x,而会话25正是被它所阻塞。

posted @ 2014-03-21 14:57  czcb  阅读(262)  评论(0编辑  收藏  举报