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. 解决方案:在外键上添加索引
6月22日,解决了A情况,SM_RESOURCE表的两个外键添加了索引,结果现场出现了假死现象(阻塞情况),接着6月25日把SM_RESOURCE表的从表的外键都加了索引,终于解决了问题,删除检测器没有报错。
主表操作时,会锁定从表进行检查
没索引的话会对从表全表锁定
有索引的话会行锁定
分享到:
相关推荐
oracle数据库解决死锁,使用plsql语句手动解决死锁问题
有效关闭Oracle死锁进程,和释放状态为killed的session
查看 oracle 死锁程序 本程序可轻松查看oracle数据库是否有表锁死
编译的存储过程的时候,程序死住,等待一会出现ora-04021错误解决办法。文档中有查询思索的语句,以及杀掉死锁进程的方法。
一次Oracle频繁DeadLock问题分析处理经历事件描述处理过程分析结果 事件描述 早上十点,客户电话打来,描述了一下业务缓慢,卡的...ORA-00060: Deadlock detected. More info in file e:\app\dnsapp\diag\rdbms\xxxx
oracle11g常见故障总结,可以做日常培训使用:...Oracle 11g数据库常见故障及处理 安装和配置类问题 实例管理类问题 数据管理类管理 数据库恢复类问题 管理工具类问题 ORA-00600介绍和案例分析 ORA-07445介绍和案例分析
ORACLE数据库的日志文件$ORACLE_BASE/admin/orasid/bdump/alert_orasid.log记录了重作日志的转换,数据库启动和关闭,数据库结构的改变,回退段的修改,死锁,内部错误等信息. 数据库管理员需要检查这个文件有无...
目录回到顶部↑第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 数据库...
Ora是Oracle的连接器,是jdbc8的包装器。 缓存连接实例,显示测试表的内容。 DeadlockSandbox是一个简单死锁的说明。 两个嵌套事务将更新同一行。 在jdbc中,可以使用反射来调用一个私有方法,该方法提供会话标识符...
Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时是很好的,效率也很高 小型企业 三、 Oracle数据库概述 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以...
《Oracle优化日记:一个金牌DBA的故事》是一本介绍Oracle数据库优化方法的书,以一个实际的大型优化项目为原型,用日记的形式记录了一个优化小组的DBA 如何从纷繁的头绪中找到突破口,进而完成了一个看似不可能完成...
一些ORACLE中的进程被杀掉后,状态被置为”killed”,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。 1.下面的语句用来...
§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 优化...
3.4.2 Oracle数据库中的存储层次体系..............................................181 3.4.3 字典管理和本地管理的表空间..................................................186 3.5 临时文件..........