跳到主要内容
内容阅读

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

ORA-00060严重锁

等待资源时检测到死锁

Deadlock detected while waiting for resource

错误描述

两个或多个会话之间形成了循环锁依赖,互相阻塞。Oracle 自动回滚其中一个会话的语句来解除死锁。

可能原因

  • 两个会话以不同顺序更新相同的行
  • 未索引的外键导致在父表 DML 时产生表级锁
  • 应用设计问题——锁的获取顺序不一致

解决方案

  1. 1在外键列上添加索引以防止表级锁
  2. 2确保所有应用代码中锁的获取顺序一致
  3. 3查看 USER_DUMP_DEST 中的跟踪文件获取死锁图详情
  4. 4重试被回滚的事务

诊断命令

SELECT * FROM v$lock WHERE block = 1;
-- Check for unindexed foreign keys:\nSELECT c.table_name, c.constraint_name, cc.column_name FROM dba_constraints c JOIN dba_cons_columns cc ON c.constraint_name = cc.constraint_name WHERE c.constraint_type = 'R' AND NOT EXISTS (SELECT 1 FROM dba_ind_columns ic WHERE ic.table_name = c.table_name AND ic.column_name = cc.column_name);
#deadlock#lock#contention#foreign-key

同类错误码(锁)

想系统掌握这个领域?

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

完整操作步骤真实截图踩坑总结
查看完整课程¥128/月起 · 解锁全部 2738+ 篇
ORA-00060: 等待资源时检测到死锁 - 原因与解决方案 | DBA 学习之路