![](/img/trans.png)
[英]Will two concurrent updates on same Oracle 11 row cause deadlock or failure to update?
[英]Concurrent Updates in Oracle: Locking or not?
我糊涂了。 我正在读Oracle中的MVCC。 我以为MVCC意味着没有锁。 但是,我在其他地方读到所有UPDATE
都自动锁定,无论隔离级别如何。 有人可以解释Oracle更新期间会发生什么吗? 当多个读取提交的事务尝试进行并发update t set c = c + 1 where id = 3
时,会发生什么? update t set c = c + 1 where id = 3
。 结果是什么,在任何一个交易之前给定c = 1,以及锁和SCN发生了什么?
Begin T1
Begin T2
T1: update t set c = c + 1 where id = 3
T2: update t set c = c + 1 where id = 3
Commit T1
Commit T2
你没错,无论隔离级别如何,都会锁定行。 使用MVCC,您可以在没有锁的情况下获得一致的读取,但在写入时仍需要锁定。
在尝试执行任何操作之前,第二个事务将等待第一个事务完成(例如: COMMIT
或ROLLBACK
)。 因此,在这种情况下,T2上的光标将“挂起”在更新上,等待T1完成。
你会在T1提交后获得一个新的SCN,在T2提交后获得另一个SCN。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.