Oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
在删除列、或表的时候报错“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”,一般都是发生锁表造成的,或者上一条语句没有执行完成,阻塞造成了锁表;
解决方法:
找出锁表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进程并不能彻底清除锁的问题。
Tag标签:「锁表 oracle ORA-00054 NOWAIT」更新时间:「2021-11-03 14:39:54」阅读次数:「1005」