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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值