对表做DDL操作,报ORA-00054的错误
中文:ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
英文:ORA-00054: resource busy and acquire with NOWAIT specified
Cause & Solution
Oracle的文档对于ORA-00054解释比较含糊,只是简单的说资源忙,建议重新尝试。
ORA-00054: resource busy and acquire with NOWAIT specified
Cause: Resource interested is busy.
Action: Retry if necessary.
ORA-00054一般是由于其他Session已经对目标表做了操作,并且已经有排他锁在表上了,所以新的Session无法做DDL操作。
可能的解决方法:
* 就像Oracle文档建议的那样,稍后重试;
* Kill那个排他锁
如果是Kill Lock的话,可以参考下边的方法:
SELECT OBJECT_NAME AS 对象名称,S.SID,S.SERIAL#,P.SPID AS 系统截程号 FROM V$LOCKED_OBJECT L , DBA_OBJECTS O , V$SESSION S , V$PROCESS P WHERE L.OBJECT_ID=O.OBJECT_ID AND L.SESSION_ID=S.SID AND S.PADDR=P.ADDR; ALTER SYSTEM KILL SESSION 'SID,SERIAL#';--sid及serial#为第一步查出来的数据。