ORA-00060:等待资源时检测到死锁

wow*_*wrt 21 database unix oracle aix plsql

在托管oracle 10g的AIX服务器上,我有一系列并行运行的脚本作为nohup.这些脚本由其他人编写,旨在同时执行.所有脚本都在表上执行更新.我收到了错误,

ORA-00060:等待资源时检测到死锁

当我用Google搜索时,我发现, http://www.dba-oracle.com/t_deadly_perpetual_embrace_locks.htm

即使脚本同时在同一个表上执行更新,它们也会对由WHERE子句确定的表的不同记录执行更新,而不会在它们之间重叠记录.

那么这会导致错误吗?

无论在表上执行更新的位置,都会发生此错误吗?

我应该一直避免在桌面上同时进行更新吗?

奇怪的是,PL/SQL successfully completed在上面引用的错误之后,我也在nohup.out日志中找到了 .

这是否意味着oracle已从死锁中恢复并成功完成更新,还是应该按顺序重新运行这些脚本?欢迎任何帮助.

提前致谢.

ben*_*ioT 29

我最近在努力解决类似的问题.原来,数据库缺少外键索引.这导致Oracle锁定了多于所需的记录,这些记录在高并发期间很快导致死锁.

这是一篇很好的文章,包含许多有关如何修复僵局的详细信息,建议和详细信息:http: //www.oratechinfo.co.uk/deadlocks.html#unindex_fk


Jef*_*emp 11

你可以获得不仅仅是行锁的死锁,例如看到这个.脚本可能正在竞争其他资源,例如索引块.

我过去通过设计并行性来解决这个问题,不同的实例正在处理工作负载的一部分,这些部分不太可能影响彼此接近的块; 例如,对于大型表的更新,而不是使用类似的东西设置并行从属MOD(n,10),我会使用TRUNC(n/10)这意味着每个从属工作在一组连续的数据上.

当然,有更好的方法来分割并行工作,例如DBMS_PARALLEL_EXECUTE.

不确定为什么你得到"PL/SQL成功完成",也许你的脚本正在处理异常?


DaS*_*aun 5

我也遇到了这个问题。我不知道实际发生的事情的技术细节。但是,在我的情况下,根本原因是 Oracle 数据库中设置了级联删除,并且我的 JPA/Hibernate 代码也在尝试执行级联删除调用。所以我的建议是确保你确切地知道发生了什么。