同事在测试库上对一个表加字段,提示 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]
|