内容阅读
在知识库中专注阅读,并随时返回相关工具与课程
ORA-00054常见锁
资源忙且指定了 NOWAIT 或超时已过期
Resource busy and acquire with NOWAIT specified or timeout expired
错误描述
DDL 或加锁操作无法获取所需的锁,因为另一个会话持有冲突的锁且指定了 NOWAIT。
可能原因
- 在表上有活动 DML 时尝试执行 DDL(ALTER TABLE、DROP、TRUNCATE)
- 对同一对象执行并发 DDL 操作
- 在另一个会话持有锁时使用 NOWAIT 执行 LOCK TABLE
解决方案
- 1识别阻塞会话,等待其完成或终止它
- 2使用 DDL_LOCK_TIMEOUT 参数:ALTER SESSION SET ddl_lock_timeout=30;
- 3将 DDL 操作安排在维护窗口期间执行
诊断命令
SELECT l.sid, l.type, l.lmode, l.request, s.username, s.program FROM v$lock l JOIN v$session s ON l.sid = s.sid WHERE l.block = 1;SELECT blocking_session, sid, serial#, wait_class, seconds_in_wait FROM v$session WHERE blocking_session IS NOT NULL;#lock#nowait#ddl#blocking#resource-busy