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

我有一系列并行运行的脚本,作为托pipeoracle 10g的AIX服务器上的nohup。 这些脚本是由其他人编写的,意味着要同时执行。 所有脚本都在桌面上执行更新。 我收到错误,

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

当我search这个,我发现, http://www.dba-oracle.com/t_deadly_perpetual_embrace_locks.htm

即使这些脚本并发地在同一个表上执行更新,它们也会在WHERE子句所确定的表的不同logging上执行更新,而不会在它们之间重叠logging。

那么这是否会导致错误?

无论在桌面上执行更新的位置是否会发生此错误?

我应该在任何时候避免在桌面上同时更新吗?

奇怪的是我也在nohup.out日志上发现, PL/SQL successfully completed上面引用的错误之后。

这是否意味着oracle已经从僵局中恢复过来并成功完成更新,或者是否应该重新运行这些脚本? 任何帮助将受到欢迎。

提前致谢。

你可以在行锁上获得更多的死锁,例如看到这个 。 脚本可能会竞争其他资源,如索引块。

过去,我通过设计并行性来解决这个问题,即不同的实例正在处理那些不太可能影响相互靠近的块的工作量的部分; 例如,为了更新一个大表,而不是使用像MOD(n,10)这样的东西建立并行从机,我会使用TRUNC(n/10) ,这意味着每个从机工作在一个连续的数据集。

当然,有更好的方法来分解并行性的工作,例如DBMS_PARALLEL_EXECUTE 。

不知道为什么你得到“PL / SQL成功完成”,也许你的脚本处理异常?

我最近在类似的问题上挣扎。 事实证明,数据库在外键上缺少索引。 这导致Oracle锁定了比所需更多的记录,在高并发期间很快导致了死锁。

这里有一个很好的文章,有很多很好的细节,建议和有关如何解决僵局的细节: http : //www.oratechinfo.co.uk/deadlocks.html#unindex_fk

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