Oracle中的死锁是否可能无法回滚,我们必须手动清除死锁?
我在Oracle文档中读到,它说:
Oracle数据库会自动检测死锁并解决它们 回滚一个涉及死锁的声明,释放一组 冲突的行锁。
我的问题是,是否会出现不会发生这种情况的情况?
答案 0 :(得分:2)
是否有可能没有回滚死锁,我们必须手动清除死锁。
嗯,这不是所有回滚的事务。 Oracle自动检测到死锁,抛出ORA-00060: deadlock detected while waiting for resource
,并回滚Oracle决定作为受害者的死锁中涉及的一个事务。以前成功的事务不会回滚。即使在死锁错误之后,如果发出提交,也会提交先前成功的事务。此时,其他会话的事务也将成功,您可以发出提交。
死锁会自动清除 - 您永远不需要清除它们。
有关详细示例,请查看此answer。您可以使用此处演示的简单测试用例进行复制:Understanding Oracle Deadlock