`

ORA-00060: 等待资源时检测到死锁--oracle 数据库表死锁异常

 
阅读更多

 

1. 现场环境的异常如下

org.springframework.dao.DeadlockLoserDataAccessException: SqlMapClient operation; SQL [];  

--- The error occurred in com/broada/srvmonitor/dao/ibatis/maps/oracle/MonitorResource.xml. 

--- The error occurred while applying a parameter map.  

--- Check the MonitorResource.removeMonitorResource-InlineParameterMap. 

--- Check the statement (update failed). 

--- Cause: java.sql.SQLException: ORA-00060: 等待资源时检测到死锁

; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:  

--- The error occurred in com/broada/srvmonitor/dao/ibatis/maps/oracle/MonitorResource.xml

--- The error occurred while applying a parameter map. 

--- Check the MonitorResource.removeMonitorResource-InlineParameterMap. 

--- Check the statement (update failed). 

--- Cause: java.sql.SQLException: ORA-00060: 等待资源时检测到死锁

 

2.找到com/broada/srvmonitor/dao/ibatis/maps/oracle/MonitorResource.xml



得出结论是表锁定 ,跟SM_RESOURCE表有关

 

 

 

3.通过pl/sql获取SM_RESOURCE的表设计



从上面的SM_RESOURCE的表设计可以看到该表有一个主键和两个外键,因为可以推断出此表死锁的两种情况

 

A情况  SM_RESOURCE表死锁了

 

SM_RESOURCE有两个外键,如图

可以得出该表是另外两个表的从表,当另外两个表中的其中一个表进行DML操作时,就会锁定SM_RESOURCE表,所以当bcc删除检测器,需要对SM_RESOURCE表进行操作的时候,此时就要等待其他主表对它释放,如果那个主表不释放SM_RESOURCE,就会导致死锁。

 

B情况.      SM_RESOURCE 的从表被锁定


根据上图,可以得出,主表SM_RESOURCE有五个从表

bcc删除检测器,对SM_RESOURCE表进行操作的时候,

SM_RESOURCE表先会锁定五个从表,如果这五个从表的其中一个表被其他表占用 ,那么就会等待其他表释放资源,如果其他表占着不放,就导致死锁。

 

 

 

 

4. 解决方案:在外键上添加索引

622日,解决了A情况,SM_RESOURCE表的两个外键添加了索引,结果现场出现了假死现象(阻塞情况),接着625日把SM_RESOURCE表的从表的外键都加了索引,终于解决了问题,删除检测器没有报错。

 

主表操作时,会锁定从表进行检查
没索引的话会对从表全表锁定
有索引的话会行锁定

 

 

 

 

0
2
分享到:
评论

相关推荐

    Oracle错误代码大全

    * ORA-00060: 等待资源时检测到死锁 * ORA-00061: 另一个例程设置了不同的 DML_LOCKS * ORA-00062: 无法获得 DML 全表锁定;DML_LOCKS 为 0 * ORA-00063: 超出 LOG_FILES 的最大数 * ORA-00064: 对象过大以至无法...

    Oracle error code 大全

    ORA-00059:等待资源时检测到死锁 ORA-00060:另一个例程设置了不同的 DML_LOCKS ORA-00061:无法获得 DML 全表锁定;DML_LOCKS 为 0 日志管理错误 ORA-00062:超出 LOG_FILES 的最大数 ORA-00063:对象过大以至...

    Oracle错误代码大全.docx

    ORA-00060: 等待资源时检测到死锁 ORA-00061: 另一个例程设置了不同的 DML_LOCKS ORA-00062: 无法获得 DML 全表锁定;DML_LOCKS 为 0 ORA-00063: 超出 LOG_FILES 的最大数 ORA-00064: 对象过大以至无法分配在此 O/S ...

    ORA-00031:标记要终止的会话

    在处理Oracle数据库时,我们经常遇到错误代码ORA-00031,它表明指定的会话已经被标记为终止。这个错误通常与数据库锁定和会话管理有关。本文将详细解析这一问题的解决方案,并提供一系列SQL语句和命令来处理和解决...

    oracle数据库-错误编码大全

    - ORA-00060: 等待资源时检测到死锁。在多用户环境中,当两个或多个事务相互等待对方释放资源时,就可能发生死锁。Oracle数据库会检测到死锁并回滚其中一个或多个事务,以解决死锁状态。 - ORA-00061: 另一个例程...

    oracle报错的详细列表

    #### ORA-00060: 等待资源时检测到死锁 当两个或多个进程相互等待对方释放资源时触发。 #### ORA-00061: 另一个例程设置了不同的DML_LOCKS 当两个或多个例程尝试设置不同的DML_LOCKS时触发。 #### ORA-00062: 无法...

    oracle+ora-各种常见java.sq

    - `java.sql.SQLException: ORA-00060: deadlock detected while waiting for resource`: 两个或多个事务因相互等待对方释放资源而陷入死锁。通过死锁检测工具或优化事务处理逻辑来解决。 9. **权限问题** - `...

    ORACLE错误一览表.

    ##### ORA-00060: 等待资源时检测到死锁 - **描述**:两个或多个事务互相等待对方释放资源而无法继续执行。 - **解决方法**: - 使用`DBMS_DEADLOCK`包提供的函数来处理死锁。 - 调整事务隔离级别以减少死锁的可能...

    oracle数据库解决死锁

    死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle数据库中,死锁可能是由多种原因引起的,例如资源竞争、锁定冲突、事务延迟等。为了解决死锁问题,需要使用PL/SQL语句来检测和...

    Oracle错误代码大全.pdf

    34. ORA-00060: 等待资源时检测到死锁,这可能需要进行死锁分析和解决。 以上只是Oracle错误代码的一部分,每个错误代码都提供了关于数据库运行状况、资源限制、权限问题以及操作错误等方面的信息。理解和解决这些...

    oracle错误代码大全

    34. ORA-00060: 等待资源时检测到死锁,这需要分析并解决并发操作的问题。 35. ORA-00061: 另一个例程设置了不同的DML_LOCKS,可能涉及到并发控制的冲突。 36. ORA-00062: 无法获得全表DML锁定,因为DML_LOCKS为0...

    ORACLE错误代码文档

    38. ORA-00060: 等待资源时检测到死锁 系统检测到两个或更多会话之间存在资源争用,导致死锁。 39. ORA-00061: 另一个实例设置了不同的 DML_LOCKS 另一个Oracle实例设置了不同的DML锁配置。 40. ORA-00062: 无法...

    ORACLE ORA错误大全

    - 检测到等待资源时发生了死锁。这是由于两个或多个进程相互等待对方释放资源导致的。解决死锁的方法包括调整锁定顺序、优化事务逻辑等。 8. **ORA-00056: object with given name exists** - 给定名称的对象已...

    oracle错误代码详细的总结与分析.docx

    34. **ORA-00060: 等待资源时检测到死锁:** 两个或多个会话互相等待对方释放资源,形成死锁。 35. **ORA-00061: 另一个例程设置了不同的 DML_LOCKS:** 两个例程间的DML_LOCKS设置不一致,导致冲突。 36. **ORA-...

    Oracle错误代码

    #### ORA-00060: 等待资源时检测到死锁 在等待资源的过程中发现了一个死锁情况,通常需要回滚某个事务或优化锁的使用。 #### ORA-00061: 另一个例程设置了不同的DML_LOCKS 在并发的DML操作中,另一个会话修改了DML_...

    ORACLE错误代码大全

    ORA-00060:等待资源时检测到死锁 死锁是两个或多个进程在执行过程中因竞争资源而造成的一种僵局。当检测到死锁时,Oracle会回滚一个事务来释放资源,从而使其他事务可以继续执行。避免死锁的常见做法是合理设计事务...

    oracle错误一览表

    **ORA-00060: 等待资源时检测到死锁** - **描述**: 多个会话互相等待对方释放资源而形成的死锁情况。 - **解决方法**: 使用死锁检测工具或调整事务隔离级别以减少死锁的发生。 **ORA-00061: 另一个例程设置了不同的...

Global site tag (gtag.js) - Google Analytics