繁体   English   中英

Oracle中的并发更新:是否锁定?

[英]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,您可以在没有锁的情况下获得一致的读取,但在写入时仍需要锁定。

在尝试执行任何操作之前,第二个事务将等待第一个事务完成(例如: COMMITROLLBACK )。 因此,在这种情况下,T2上的光标将“挂起”在更新上,等待T1完成。

你会在T1提交后获得一个新的SCN,在T2提交后获得另一个SCN。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM