【发布时间】:2014-02-20 16:07:47
【问题描述】:
在 Microsoft SQL Server 中,我使用 READ_COMMITTED_SNAPSHOT ISOLATION
ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON
在会话 1 中,将 Principal 从 4000 更新为 5000
BEGIN TRAN
Update MyTable Set Principal=5000 Where InvestorId=10
现在在第 2 节中,我说
Select Principal from MyTable where InvestorId=10
我得到 4000,因为会话 1 事务未提交。
如果我不使用 READ_COMMITTED_SNAPSHOT 隔离模式,则使用
- READ COMMITTED ISOLATION Mode 然后我的 Session 2 将继续等待
- 如果我使用 READ_UNCOMMITTED ISOLATION 模式,那么我的会话 2 将给出 5000(相当于在 select 语句上使用 nolock)
在 Oracle 中,如果我执行一组等效的命令,默认情况下它的行为就像设置了 READ_COMMITTED_SNAPSHOT 隔离模式一样。
我在微软文章中读到 SNAPSHOT 隔离模式在更新完成之前写入 tempdb。
-Oracle 默认是如何做到这一点的?
-它是否也在写入磁盘?它会导致 i/o 问题吗?
-Oracle中的默认锁定级别与SQL server不同吗?
提前感谢您的帮助和时间。
【问题讨论】:
-
Oracle 中没有“READ_UNCOMMITTED ISOLATION Mode”的类似物。
-
READ_UNCOMMITTED ISOLATION是指 Oracle 中的POST吗?
标签: sql oracle isolation-level read-committed-snapshot snapshot-isolation