在循环中重试死锁,它们最终会解决吗?

时间:2011-10-21 13:24:37

标签: sql database oracle plsql locking

如果我在PL / SQL函数中编写代码,在捕获ORA-00060死锁异常(Oracle 10g)时,只需回滚并重试事务,这样的函数会在有限的时间内完成(你可以假设数据库要完成的工作是有限的,而不是无限的流?)

在重试之前,我有什么特别的理由要添加等待吗?

1 个答案:

答案 0 :(得分:1)

通常,它取决于系统中的其他事务,特别是涉及死锁的其他事务正在做什么。您可能会遇到第二次尝试因资源锁定而无限期阻塞,甚至遇到第二次死锁的情况。

至少,在实现此解决方案之前,我认为您应该了解死锁是如何产生的,并考虑在第一个会话获得异常时其他会话中可能发生的情况。