`

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数据库解决死锁

    oracle数据库解决死锁,使用plsql语句手动解决死锁问题

    有效关闭Oracle死锁进程,和释放状态为killed的session

    有效关闭Oracle死锁进程,和释放状态为killed的session

    查看 oracle 死锁程序

    查看 oracle 死锁程序 本程序可轻松查看oracle数据库是否有表锁死

    解决Oracle死锁问题.txt

    编译的存储过程的时候,程序死住,等待一会出现ora-04021错误解决办法。文档中有查询思索的语句,以及杀掉死锁进程的方法。

    一次Oracle频繁DeadLock问题分析处理经历

    一次Oracle频繁DeadLock问题分析处理经历事件描述处理过程分析结果 事件描述 早上十点,客户电话打来,描述了一下业务缓慢,卡的...ORA-00060: Deadlock detected. More info in file e:\app\dnsapp\diag\rdbms\xxxx

    oracle11g常见故障

    oracle11g常见故障总结,可以做日常培训使用:...Oracle 11g数据库常见故障及处理 安装和配置类问题 实例管理类问题 数据管理类管理 数据库恢复类问题 管理工具类问题 ORA-00600介绍和案例分析 ORA-07445介绍和案例分析

    Oracle的日志管理攻略

    ORACLE数据库的日志文件$ORACLE_BASE/admin/orasid/bdump/alert_orasid.log记录了重作日志的转换,数据库启动和关闭,数据库结构的改变,回退段的修改,死锁,内部错误等信息.  数据库管理员需要检查这个文件有无...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    目录回到顶部↑第1章 开发成功的Oracle应用 1 1.1 我的方法 2 1.2 黑盒方法 4 1.3 开发数据库应用的正确(和不正确)方法 8 1.3.1 了解Oracle体系结构 8 1.3.2 理解并发控制 14 1.3.3 多版本 19 1.3.4 数据库...

    Java-learning:我在Eclipse下用Java编写

    Ora是Oracle的连接器,是jdbc8的包装器。 缓存连接实例,显示测试表的内容。 DeadlockSandbox是一个简单死锁的说明。 两个嵌套事务将更新同一行。 在jdbc中,可以使用反射来调用一个私有方法,该方法提供会话标识符...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时是很好的,效率也很高 小型企业 三、 Oracle数据库概述 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以...

    Oracle优化日记:一个金牌DBA的故事 白鳝.扫描版

    《Oracle优化日记:一个金牌DBA的故事》是一本介绍Oracle数据库优化方法的书,以一个实际的大型优化项目为原型,用日记的形式记录了一个优化小组的DBA 如何从纷繁的头绪中找到突破口,进而完成了一个看似不可能完成...

    Oracle 查询死锁并解锁的终极处理方法

    一些ORACLE中的进程被杀掉后,状态被置为”killed”,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。 1.下面的语句用来...

    ORACLE9i_优化设计与系统调整

    §11.7 Oracle等待事件 129 §11.8 Oracle诊断和调整包 129 第12章 优化SQL语句 130 §12.1 SQL语句的优化方法 130 §12.1.1 重新构造语句 130 §12.1.2 调整或使触发器无效 137 §12.1.3 重组数据 137 §12.2 优化...

    Oracle编程艺术

    3.4.2 Oracle数据库中的存储层次体系..............................................181 3.4.3 字典管理和本地管理的表空间..................................................186 3.5 临时文件..........

Global site tag (gtag.js) - Google Analytics