ORA-00054: Resource busy and acquire with NOWAIT specified or timeout expired(资源正忙,且指定了 NOWAIT 或等待超时)
Oracle含义
要加锁的资源(行或表)已被另一个会话锁定,由于指定了 NOWAIT 或 DDL_LOCK_TIMEOUT 已到期,无法立即获取。
原因
通常是在表被其他事务锁定时尝试执行 DDL(ALTER TABLE、DROP、CREATE INDEX);或使用 SELECT ... FOR UPDATE NOWAIT 时遇到了已被锁定的行。
解决方法
查找持有锁的会话:SELECT * FROM v$locked_object。关联 v$session 和 v$lock 识别阻塞会话。等待事务结束,必要时用 ALTER SYSTEM KILL SESSION 终止它。对于 DDL 可以设置等待时间:ALTER SESSION SET DDL_LOCK_TIMEOUT = 60; 在业务低峰的维护窗口执行 DDL。
同一数据库的其他条目
- ORA-00001Unique constraint violated(违反唯一约束)
- ORA-00060Deadlock detected while waiting for resource(等待资源时检测到死锁)
- ORA-01017Invalid username/password; logon denied(用户名/密码无效;登录被拒绝)
- ORA-01555Snapshot too old: rollback segment number too small(快照过旧:回滚段编号过小)
- ORA-01652Unable to extend temp segment by N in tablespace(无法在表空间中将临时段扩展 N)