在Oracle中运行以下查询时出现死锁
update MYTABLE
set COLUMN1 = COLUMN1 + 589
where COLUMN1 >= 7988
and COLUMN1 <= 7988
update MYTABLE
set COLUMN1 = COLUMN1 + 660
where COLUMN1 >= 7840当两个查询都在两个独立的事务中运行时,为什么我会得到一个死锁?我的观点是,当隔离设置为READCOMMITTED时,第二个查询将一直等到第一个查询完成其事务,对吗?
有什么提示可以避免死锁吗?
注意:COLUMN1不是该表中的主键,但应用程序会确保没有重复项。
发布于 2014-03-03 18:15:38
由于两个窗口都是重叠的,我认为可能存在问题。Oracle为两个查询锁定相同的块,因此在同时执行时会出现问题。
另外,检查SO上的answer in this question。
通过检查dba_lock表来检查是否发生了锁。请参见文档here。
https://stackoverflow.com/questions/22143806
复制相似问题