关于“ORA-00060:等待资源时检测到死锁”问题的分析
最近现场反馈问题:一个访问Oracle数据库的通讯程序记录了一些关于“ORA-00060:等待资源时检测到死锁”的错误日志。但通讯程序记录异常后并没有崩溃,还能继续运行,并且通讯数据看起来也很正常。
其实,鉴于数据库是存在大量并发访问的,只要存在并发访问,死锁就无法彻底避免,无非是几率大小而已。oracle数据库有检测当前会话死锁的功能,当死锁发生时,两个或多个并发事务相互等待,不靠外力就再也无法继续执行完了。数据库检测到死锁时,就会将死锁的各个事务回滚,并抛出ORA-00060异常。所以我们访问数据的程序,特别是无人值守的程序,一定要能处理此异常,在数据库发生这个异常之后,将其记录在日志中,并继续(重新)执行访问数据库的操作。
当然,我们还可以通过改进程序的效率来减少死锁发生的几率。首先可以提供数据库访问效率,优化数据库,优化sql,尽量减少访问数据库的时间,从而降低与其他会话并发死锁的可能性。另外,在业务允许的情况下,应尽可能减少数据库事务的范围,将一个大的事务,分成小的事务,尽早提交。当然,事务的划分这是由业务决定的,不可能随便分开。
相关推荐
Justdoit00 2020-05-10
Youda 2018-12-07
tufeiax 2019-01-23
AC即性感 2015-07-15
imacoder 2013-05-15
TemateRoom 2012-12-23
amberoracle 2012-07-31
nbwinpe 2012-07-03
huangliang00 2020-04-22
喝绿茶的猫 2020-04-20
whyname 2020-02-15
踩风火轮的乌龟 2020-02-03
DAV数据库 2020-01-09
最近,公司现网的业务中出现上图所示的死锁异常,沿着问题分析,发现这个问题涉及很多数据库的基础知识。 <update id = "A" parameterType = "java.util.List"&
韩学敏 2019-12-19
CoderJiang 2019-11-21
liumin 2019-11-19
lxypeter 2019-09-05
timewind 2019-03-18
YangSunshine 2019-02-28