Oracle 查看對象持有鎖的情況

來源:互聯網
上載者:User

Oracle 查看對象持有鎖的情況

同事在測試庫上對一個表加欄位,提示 ORA-00054, 資源忙。 應該是表對象的鎖沒有釋放。

用如下SQL 查看一下系統中相關對象上鎖的情況:

  1. /* Formatted on 2011/9/26 14:45:46(QP5 v5.163.1008.3004) */  
  2. SELECT S.SIDSESSION_ID,  
  3.        S.USERNAME,  
  4.        DECODE (LMODE,  
  5.                0, ' None ',  
  6.                1, ' Null ',  
  7.                2, ' Row-S(SS) ',  
  8.                3, ' Row-X(SX) ',  
  9.                4, ' Share',  
  10.                5, 'S/Row-X (SSX) ',  
  11.                6, 'Exclusive ',  
  12.                TO_CHAR (LMODE))  
  13.           MODE_HELD,  
  14.        DECODE (REQUEST,  
  15.                0, ' None ',  
  16.                1, ' Null ',  
  17.                2, ' Row-S(SS) ',  
  18.                3, ' Row-X(SX) ',  
  19.                4, ' Share',  
  20.                5, 'S/Row-X (SSX) ',  
  21.                6, 'Exclusive ',  
  22.                TO_CHAR (REQUEST))  
  23.          MODE_REQUESTED,  
  24.        O.OWNER|| ' . ' || O.OBJECT_NAME|| '  ( ' || O.OBJECT_TYPE|| ' ) ' as OBJECT_NAME,  
  25.        S.TYPELOCK_TYPE,  
  26.        L.ID1LOCK_ID1,  
  27.        L.ID2LOCK_ID2  
  28.   FROMV$LOCK L, SYS.DBA_OBJECTSO,V$SESSION S  
  29.  WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID  


該SQL 顯示所有對象上的鎖,如果要查某個具體的對象,可以根據OBJECT_NAME 欄位進行一下過濾,找到對應的SID 之後去查V$SESSION 視圖。  

該視圖會顯示session 對應的資訊,包括終端的資訊,如果找到了終端,可以讓它提交或者復原一下就OK了。 我這裡是測試環境,直接把session kill 掉了。然後修改表就ok了。

  1. SQL>alter system kill session 'SID,SERIAL#'  

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.