关于Oracle报错ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired这档事

在PLSQL中执行SQL脚本的时候,报错ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
遇事不要慌,Google翻译走一波
关于Oracle报错ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired这档事

之所以会报这个错误,是因为锁表
可能是我脚本前一个语句执行完后没有commit提交或者rollback回滚;
也可能是在我执行脚本的时候,有其他人对这张表做了insert、update、delete、drop之类的操作后没有commit提交或者rollback回滚;

总之执行完修改语句后commit提交或者rollback回滚很重要

回到锁表
通过下面的SQL语句查出哪个事务有问题

select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid; --查询锁表

关于Oracle报错ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired这档事

根据SID和SERIAL#来kill掉进程,比如下面的sql语句中,我查出来的SID=248,SERIAL#=64466

ALTER system KILL session ‘248,64466‘;--kill进程

再重新执行脚本,就没有之前的报错了

PS:在查询锁表的时候可能会碰到“动态执行表不可访问,本会话的自动统计被禁止”的问题,可以参考这个解决:PLSQL报错“动态执行表不可访问,本会话的自动统计被禁止”的解决方法

关于Oracle报错ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired这档事

上一篇:Oracle 分区表(转)


下一篇:【C# SQLite】SQLite 问题集(一)