ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 查看 对象 持有锁的情况

Oracle 查看 对象 持有锁的情况

原创 Linux操作系统 作者:roominess 时间:2012-03-31 10:00:39 0 删除 编辑

同事在测试库上对一个表加字段,提示 ORA-00054, 资源忙。 应该是表对象的锁没有释放。

 

用如下SQL 查看一下系统中相关对象上锁的情况:

 

  1. name="code" class="sql">/* Formatted on 2012/2/13 14:24:32 (QP5 v5.185.11230.41888) */  
  2. SELECT S.SID SESSION_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 || ' ) '  
  25.           AS OBJECT_NAME,  
  26.        S.TYPE LOCK_TYPE,  
  27.        L.ID1 LOCK_ID1,  
  28.        L.ID2 LOCK_ID2  
  29.   FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S  
  30.  WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID AND object_name = 'xxxx';  



 

 


该SQL 显示所有对象上的锁,如果要查某个具体的对象,可以根据OBJECT_NAME 字段进行一下过滤,找到对应的SID 之后去查V$SESSION 视图。

 

该视图会显示session 对应的信息,包括终端的信息,如果找到了终端,可以让它提交或者回滚一下就OK了。 我这里是测试环境,直接把session kill 掉了。然后修改表就ok了。

 

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

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

请登录后发表评论 登录
全部评论

注册时间:2009-02-24

  • 博文量
    118
  • 访问量
    188459