|  
  同事在测试库上对一个表加字段,提示 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#'   
   本文出自:亿恩科技【www.enkj.com】 
      
      
		服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM] 
       |