Home  >  Article  >  Database  >  关于“ORA-00060:等待资源时检测到死锁”问题的分析

关于“ORA-00060:等待资源时检测到死锁”问题的分析

WBOY
WBOYOriginal
2016-06-07 17:09:152674browse

最近现场反馈问题:一个访问oracle数据库的通讯程序记录了一些关于ldquo;ORA-00060:等待资源时检测到死锁rdquo;的错误日志。但

最近现场反馈问题:一个访问Oracle数据库的通讯程序记录了一些关于“ORA-00060:等待资源时检测到死锁”的错误日志。但通讯程序记录异常后并没有崩溃,还能继续运行,并且通讯数据看起来也很正常。

其实,鉴于数据库是存在大量并发访问的,只要存在并发访问,死锁就无法彻底避免,无非是几率大小而已。oracle数据库有检测当前会话死锁的功能,当死锁发生时,两个或多个并发事务相互等待,不靠外力就再也无法继续执行完了。数据库检测到死锁时,就会将死锁的各个事务回滚,并抛出ORA-00060异常。所以我们访问数据的程序,特别是无人值守的程序,一定要能处理此异常,在数据库发生这个异常之后,将其记录在日志中,并继续(重新)执行访问数据库的操作。

当然,我们还可以通过改进程序的效率来减少死锁发生的几率。首先可以提供数据库访问效率,优化数据库,优化sql,尽量减少访问数据库的时间,从而降低与其他会话并发死锁的可能性。另外,在业务允许的情况下,,应尽可能减少数据库事务的范围,将一个大的事务,分成小的事务,尽早提交。当然,事务的划分这是由业务决定的,不可能随便分开。

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn