我有两个 Oracle 查询在不同的会话中运行,它们处于死锁状态,我无法理解为什么会发生这种情况。
会话 1 中的查询是这样的:
UPDATE REFS R SET R.REFS_NAME = :B2 WHERE R.REFS_CODE = :B1
会话 2 中的查询是这样的:
UPDATE REFS R SET R.STATUS_CODE = :B3, R.STATUS_TYPE = :B2 WHERE R.REFS_CODE = :B1
每个都被一个游标包围,该游标循环选择主键值。当这些查询同时运行时,它们就会死锁。REFS_CODE 是主键,Oracle 跟踪显示它们正在更新不同的 rowid。显然,主键是索引的,并且有一些外键约束,索引支持这些约束,因为这在过去对我们来说一直是个问题。
进入绝望的领域,我尝试禁用桌面上的触发器,但没有帮助。还尝试使用自主事务,但这使事情变得更糟。
有什么我想念的吗?谢谢你的帮助!