SQL Server:读者是否等待编写者(对于相同的数据)?

vic*_*csz 1 sql-server oracle locking

我已经读过旧版本的SQL Server ..它有一个悲观的锁定策略.即读者等待编写者访问相同的数据(行或页面级别),这与Oracle不同.

在较新版本中仍然如此吗?我已经读过锁定策略在最近的版本中已经改变了.

Rem*_*anu 5

您所听到的是SNAPSHOT ISOLATION,自SQL Server 2005以来可用.快照隔离,又名.行版本控制,是Oracle中的默认行为.通过READ_COMMITTED_SNAPSHOT在数据库上启用,您也可以在SQL Server中将其设置为默认值:

ALTER DATABASE [<dbname>] SET READ_COMMITTED_SNAPSHOT ON;
Run Code Online (Sandbox Code Playgroud)

对于行版本控制,SQL Server在读取期间不会获取数据锁定.如果发生并发写入,则读取将获取该行的先前版本.有关更多详细信息,请在数据库引擎中读取基于行版本控制的隔离级别.

您不应该将行版本控制和快照与脏读取混淆.脏读取提供了不一致的数据,这使得编程成为一种挑战,至少可以说(即你不应该使用它!).快照读取始终提供事务一致的数据映像.