分类: Oracle
Oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT

在删除列、或表的时候报错“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”,一般都是发生锁表造成的,或者上一条语句没有执行完成,阻塞造成了锁表;
ORA-00054.png
解决方法:
找出锁表sid

select SESS.sid, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME,
      AO.OBJECT_NAME, LO.LOCKED_MODE
from V$LOCKED_OBJECT LO, DBA_OBJECTs AO, V$SESSION SESS
where AO.OBJECT_ID = LO.OBJECT_ID 
and lo.session_id = sess.sid;

或
select session_id from v$locked_object;

SESSION_ID
----------
127623

根据查询出来的session_id查询

SELECT sid, serial#, username, osuser FROM v$session where sid = 127623;

SID SERIAL# USERNAME OSUSER
---------- ---------- ------------------------------ ------------------------------
127623 3412 SCOTT LILWEN

kill掉

ALTER SYSTEM KILL SESSION '127623,3412';

System altered

也可以用系统级杀进程的kill释放锁:

select spid from v$process where addr = (select paddr
from v$session where sid=&sid);

kill -9 127623 ;

再次执行删除操作即可;
注意点:如果出现了锁的问题, 某个DML操作可能等待很久没有反应。 当你采用的是直接连接数据库的方式,也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁,杀OS进程并不能彻底清除锁的问题。


相关博文:

发表新评论