我已经读过旧版本的SQL Server ..它有一个悲观的锁定策略。即与Oracle不同,读者等待编写者访问相同的数据(行或页面级别)。
在较新版本中仍然如此吗?我已经读过锁定策略在最近的版本中已经改变了。
答案 0 :(得分:5)
您所听到的是SNAPSHOT ISOLATION
,自SQL Server 2005以来可用。快照隔离,又名。行版本控制,是Oracle中的默认行为。通过在数据库上启用READ_COMMITTED_SNAPSHOT
,您也可以在SQL Server中将其设置为默认值:
ALTER DATABASE [<dbname>] SET READ_COMMITTED_SNAPSHOT ON;
使用行版本控制SQL Server在读取期间不会获取数据锁定。如果发生并发写入,则读取将获取该行的先前版本。有关详细信息,请阅读Row Versioning-based Isolation Levels in the Database Engine。
您不应该将行版本控制和快照与脏读取混淆。脏读取提供inconsistent data,这使编程成为一种挑战,至少可以说(即你不应该使用它!)。快照读取始终提供事务一致的数据映像。
答案 1 :(得分:2)
默认情况下,SQL Server使用 READ COMMITTED 隔离级别,这意味着它会在尝试读取之前等待未经修改的更改。
http://msdn.microsoft.com/en-us/library/ms173763.aspx
请注意,如果您不关心所返回数据的准确性,您可以随时将隔离级别设置为 Read Uncommitted 这将为您提供所有记录,这些记录会在具有绑定更改的情况下进行
您还可以使用快照隔离级别,它将为您提供所有记录,包括当前正在修改的最新已知数据版本,不当前修改
答案 2 :(得分:1)
锁定策略是基于连接的连接处理的东西 - 这可以由应用程序设置并使用SQL Server本身。
了解更多详情,了解Transaction Isolation Levels。