启用基于行版本控制的隔离级别

数据库管理员可以通过在 ALTER DATABASE 语句中使用 READ_COMMITTED_SNAPSHOT 和 ALLOW_SNAPSHOT_ISOLATION 数据库选项来控制行版本控制的数据库级别设置。

将 READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON 后,用于支持该选项的机制将立即激活。设置 READ_COMMITTED_SNAPSHOT 选项时,数据库中只允许存在执行 ALTER DATABASE 命令的连接。在 ALTER DATABASE 完成之前,数据库中不允许有其他打开的连接。数据库不必一定要处于单用户模式下。

下面的 Transact-SQL 语句将启用 READ_COMMITTED_SNAPSHOT:

ALTER DATABASE AdventureWorks
    SET READ_COMMITTED_SNAPSHOT ON;

如果 ALLOW_SNAPSHOT_ISOLATION 数据库选项设置为 ON,则数据库中数据已修改的所有活动事务完成之前,Microsoft SQL Server 数据库引擎实例不会为已修改的数据生成行版本。如果存在活动的修改事务,SQL Server 将把该选项的状态设置为 PENDING_ON。所有修改事务完成后,该选项的状态更改为 ON。在该选项完全处于 ON 状态之前,用户无法在数据库中启动快照事务。数据库管理员将 ALLOW_SNAPSHOT_ISOLATION 选项设置为 OFF 后,数据库将跳过 PENDING_OFF 状态。

下面的 Transact-SQL 语句将启用 ALLOW_SNAPSHOT_ISOLATION:

ALTER DATABASE AdventureWorks
    SET ALLOW_SNAPSHOT_ISOLATION ON;

下表列出并说明了 ALLOW_SNAPSHOT_ISOLATION 选项的各个状态。同时使用 ALTER DATABASE 和 ALLOW_SNAPSHOT_ISOLATION 选项不会妨碍当前正在访问数据库数据的用户。

当前数据库的快照隔离框架状态 说明

OFF

未启用对快照隔离事务的支持。不允许执行快照隔离事务。

PENDING_ON

对快照隔离事务的支持处于转换状态(从 OFF 到 ON)。打开的事务必须完成。

不允许执行快照隔离事务。

ON

已启用对快照隔离事务的支持。

允许执行快照事务。

PENDING_OFF

对快照隔离事务的支持处于转换状态(从 ON 到 OFF)。

此后启动的快照事务无法访问此数据库。更新事务仍会导致此数据库中出现版本控制开销。现有快照事务仍可以访问此数据库,不会遇到任何问题。直到数据库快照隔离状态为 ON 时处于活动状态的所有快照事务完成后,状态 PENDING_OFF 才变为 OFF。

使用 sys.databases 目录视图可以确定两个行版本控制数据库选项的状态。

对用户表和存储在 mastermsdb 中的某些系统表的任何更新都会生成行版本。

mastermsdb 数据库中,ALLOW_SNAPSHOT_ISOLATION 选项自动设置为 ON,并且不能禁用。

master 数据库、tempdb 数据库或 msdb 数据库中,用户不能将 READ_COMMITTED_SNAPSHOT 选项设置为 ON。

请参阅

概念

显示行版本控制信息
了解基于行版本控制的隔离级别
使用基于行版本控制的隔离级别

其他资源

ALTER DATABASE (Transact-SQL)
sys.databases (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助