在开发过程中,经常会遇到ORA-00054,被卡住的表谁在用,什么时候能够好,都不知道,只能傻傻的等。。。真是悲哀。。。。从今天开始我不再傻等,我要变主动。。。。首先模拟一下ORA-00054的场景:
1. session 1先锁住一个表;
SQL> select * from test for update;
2. session 2对test表执行drop动作,就报错了;
SQL> drop table test;
drop table test
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
解决办法:
1. 首先看是谁锁住了test表:
SELECT t.SESSION_ID FROM v$locked_object t
WHERE t.OBJECT_ID IN (SELECT object_id FROM dba_objects a WHERE a.OBJECT_NAME='TEST');
2.通过sid找serial#
SELECT t.SID,t.SERIAL# FROM v$session t WHERE t.SID=141;
3.杀了阻止你的session
ALTER SYSTEM KILL SESSION '141,7';
这下阻止你的session就被干掉了,你就可以drop table了。。。。不过杀之前,千万要搞清楚你要杀的session在干什么,别闯祸了。。。。。。