WEB开发网
开发学院数据库Oracle Oracle 查看 对象 持有锁的情况 阅读

Oracle 查看 对象 持有锁的情况

 2012-05-12 14:13:34 来源:WEB开发网   
核心提示: 在测试库上对一个表加字段,提示 ORA-00054,Oracle 查看 对象 持有锁的情况, 资源忙, 应该是表对象的锁没有释放, 我这里是测试环境,直接把session kill 掉了, 用如下SQL 查看一下系统中相关对象上锁的情况: <pre name="code" class=&qu

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

 
用如下SQL 查看一下系统中相关对象上锁的情况:
 
<pre name="code" class="sql">/* Formatted on 2012/2/13 14:24:32 (QP5 v5.185.11230.41888) */  
SELECT S.SID SESSION_ID,  
       S.USERNAME,  
       DECODE (LMODE,  
               0, ' None ',  
               1, ' Null ',  
               2, ' Row-S(SS) ',  
               3, ' Row-X(SX) ',  
               4, ' Share',  
               5, 'S/Row-X (SSX) ',  
               6, 'Exclusive ',  
               TO_CHAR (LMODE))  
          MODE_HELD,  
       DECODE (REQUEST,  
               0, ' None ',  
               1, ' Null ',  
               2, ' Row-S(SS) ',  
               3, ' Row-X(SX) ',  
               4, ' Share',  
               5, 'S/Row-X (SSX) ',  
               6, 'Exclusive ',  
               TO_CHAR (REQUEST))  
          MODE_REQUESTED,  
       O.OWNER || ' . ' || O.OBJECT_NAME || '  ( ' || O.OBJECT_TYPE || ' ) '  
          AS OBJECT_NAME,  
       S.TYPE LOCK_TYPE,  
       L.ID1 LOCK_ID1,  
       L.ID2 LOCK_ID2  
  FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S  
 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了。

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

Tags:Oracle 查看 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接