跳到主要内容
内容阅读

在知识库中专注阅读,并随时返回相关工具与课程

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. 1识别阻塞会话,等待其完成或终止它
  2. 2使用 DDL_LOCK_TIMEOUT 参数:ALTER SESSION SET ddl_lock_timeout=30;
  3. 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

同类错误码(锁)

想系统掌握这个领域?

「锁」在课程 Day 81-90 中有 10 篇完整实战教程

完整操作步骤真实截图踩坑总结
查看完整课程¥128/月起 · 解锁全部 2738+ 篇
ORA-00054: 资源忙且指定了 NOWAIT 或超时已过期 - 原因与解决方案 | DBA 学习之路