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成功完成",也许你的脚本正在处理异常?
归档时间: |
|
查看次数: |
100522 次 |
最近记录: |