ORA-00060: Deadlock detected while waiting for resource(等待资源时检测到死锁)
Oracle含义
两个或多个会话发生死锁,各自等待对方持有的资源。Oracle 检测到该循环后选择一个牺牲者,并回滚该会话的语句。
原因
以不同顺序获取行锁、不同事务交叉更新相同的行、未建索引的外键导致更新父表时加表锁,或在位图索引上并发执行 DML。
解决方法
检查 alert log 中引用的死锁 trace(图)文件,找出冲突的 SQL 语句和行。在应用中始终以相同顺序访问表/行。为外键列建立索引(未建索引的外键是典型的死锁原因)。保持事务简短并审查提交频率。在应用中捕获发生死锁的事务并重试。
同一数据库的其他条目
- ORA-00001Unique constraint violated(违反唯一约束)
- ORA-00054Resource busy and acquire with NOWAIT specified or timeout expired(资源正忙,且指定了 NOWAIT 或等待超时)
- 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)
- ORA-04031Unable to allocate N bytes of shared memory(无法分配 N 字节共享内存)