Oracle中与SQL Server快照隔离级别相对应的是什么?

6
在Microsoft SQL Server中,我使用READ_COMMITTED_SNAPSHOT隔离级别。
ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON

ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON

在第一次会话中,将贷款本金从4000更新为5000。

BEGIN TRAN
Update MyTable Set Principal=5000 Where InvestorId=10 

现在进入第二节,我说

Select Principal from MyTable where InvestorId=10

我得到了4000,因为会话1事务没有提交。
如果我不使用READ_COMMITTED_SNAPSHOT隔离模式,并且使用
  1. READ COMMITTED ISOLATION模式,那么我的第二个会话将一直等待。
  2. 如果我使用READ_UNCOMMITTED隔离模式,那么我的第二个会话将返回5000(相当于在select语句上使用nolock)
在Oracle中,如果我执行等效的命令集,默认情况下它的行为就好像设置了READ_COMMITTED_SNAPSHOT隔离模式。
我在微软文章中读到,快照隔离模式在更新完成之前会写入tempdb。
- Oracle如何实现这一点?
- 它是否也写入磁盘?这会导致I/O问题吗?
- Oracle中的默认锁定级别与SQL Server不同吗?
感谢您的帮助和时间。

1
在Oracle中没有“READ_UNCOMMITTED ISOLATION Mode”的类似物。 - Egor Skriptunoff
你是指 Oracle 中的 POST,而不是 READ_UNCOMMITTED ISOLATION 吗? - Anjan Biswas
2个回答

4
在Oracle中,READ_COMMITTED隔离级别是默认模式,即数据写入数据文件(磁盘)并且只有在提交后才能被其他会话选择。它使用UNDO段进行此操作。在执行选择时不会引起任何I/O问题。Oracle默认使用行级锁定。
您可以查看 Oracle DataBase Concepts的第9章和第10章以获取更多详细信息。

谢谢Vishad..非常有帮助。 - VenVig
https://docs.oracle.com/cd/E17276_01/html/gsg_xml_txn/cxx/isolation.html#snapshot_isolation - suresh
请注意,mssql的READ COMMITTED SNAPSHOT和SNAPSHOT并不完全相同。因此,虽然这回答了OP的问题,但还有更多需要说的:https://dba.stackexchange.com/questions/54680/sql-servers-read-committed-snapshot-vs-snapshot - Johan Boulé

1
在Oracle中,默认情况下是非阻塞查询..类似于SQL快照隔离模式。锁定行为仍然存在,但不影响读取,只查询受影响行上事务开始之前提交的数据,从而避免脏读。 请参见第9章 - 非阻塞查询。

请尽量提供更多信息以改进答案,例如示例 - 最好使用问题中使用的相同示例。 - Jithin Scaria
请注意,mssql的READ COMMITTED SNAPSHOT和SNAPSHOT并不完全相同。因此,虽然这回答了OP的问题,但还有更多需要说的:https://dba.stackexchange.com/questions/54680/sql-servers-read-committed-snapshot-vs-snapshot - Johan Boulé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接