在Microsoft SQL Server中,我使用read_committed_snapshot隔离
ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON
在会议1中,将本金从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隔离模式,并使用
- 读取承诺的隔离模式,然后我的会议2将继续等待
- 如果我使用read_uncomment隔离模式,那么我的会话2将给出5000(相当于在选择语句上使用nolock)
在Oracle中,如果我执行等效命令集,则默认情况下它的行为就像read_committy_snapshot隔离模式一样。
我在Microsoft文章中阅读了快照模式在更新之前写入tempdb的文章。
- 默认情况下如何实现这一目标?
- 它也写入磁盘吗?它会导致i/o问题吗?
- 是Oracle中与SQL Server不同的默认锁定级别?
预先感谢您的帮助和时间。
在oracle中,read_comment隔离级别是默认模式,即数据写入数据文件(磁盘),并且仅在提交后才可以选择其他会话。它为此使用了撤消细分市场。选择时不会引起任何I/O问题Oracle默认使用行级锁定。
您可以查看Oracle数据库概念的第9章和第10章以获取更多详细信息
在Oracle中,默认情况下它是一个非阻止查询。类似于SQL快照隔离模式。锁定行为仍然存在,但不影响仅在交易开始对受影响行的交易之前查询数据的读取,从而避免了肮脏的读数。请参阅第9章 - 非阻止查询。