我有一系列脚本作为 nohup 在托管 Oracle 10g 的 AIX 服务器上并行运行。这些脚本是由其他人编写的,旨在同时执行。所有脚本都在表上执行更新。我收到错误,
ORA-00060: 检测到死锁
等待资源
当我用谷歌搜索这个时,我发现,http://www.dba-oracle.com/t_deadly_perpetual_embrace_locks.htm http://www.dba-oracle.com/t_deadly_perpetual_embrace_locks.htm
即使脚本同时对同一个表执行更新,它们也会对表的不同记录执行更新,这些记录由WHERE
子句之间没有记录重叠。
那么这会导致错误吗?
无论在表的何处执行更新,都会发生此错误吗?
我应该始终避免表上的并发更新吗?
奇怪的是我还在 nohup.out 日志上发现,PL/SQL successfully completed
在上面引用的错误之后。
这是否意味着 oracle 已从死锁中恢复并成功完成更新,或者我应该连续重新运行这些脚本吗?
我最近也遇到了类似的问题。结果发现数据库缺少外键索引。这导致 Oracle 锁定了比需要的更多的记录,从而在高并发期间很快导致死锁。
这是一篇优秀的文章,其中包含许多详细信息、建议以及有关如何修复死锁的详细信息:http://www.oratechinfo.co.uk/deadlocks.html#unindex_fk http://www.oratechinfo.co.uk/deadlocks.html#unindex_fk
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)