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

时间:2011-09-23 01:02:56

标签: database oracle concurrency transactions

我很困惑。我正在读Oracle中的MVCC。我以为MVCC意味着没有锁。但是,我在其他地方读到所有UPDATE自动锁定,无论隔离级别如何。有人可以解释Oracle更新期间会发生什么吗?当多个读取提交的事务尝试执行并发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

1 个答案:

答案 0 :(得分:8)

你说得对,无论隔离级别如何,都会锁定行。使用MVCC,您可以获得没有锁定的一致读取,但在写入时仍需要锁定。

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

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

相关问题