启用基于行版本控制的隔离级别
数据库管理员可以通过在 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 目录视图可以确定两个行版本控制数据库选项的状态。
对用户表和存储在 master 和 msdb 中的某些系统表的任何更新都会生成行版本。
在 master 和 msdb 数据库中,ALLOW_SNAPSHOT_ISOLATION 选项自动设置为 ON,并且不能禁用。
在 master 数据库、tempdb 数据库或 msdb 数据库中,用户不能将 READ_COMMITTED_SNAPSHOT 选项设置为 ON。
请参阅
概念
显示行版本控制信息
了解基于行版本控制的隔离级别
使用基于行版本控制的隔离级别
其他资源
ALTER DATABASE (Transact-SQL)
sys.databases (Transact-SQL)