行のバージョン管理に基づく分離レベルの有効化

データベース管理者は、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 AdventureWorks2008R2
    SET READ_COMMITTED_SNAPSHOT ON;

ALLOW_SNAPSHOT_ISOLATION データベース オプションが ON であれば、Microsoft SQL Server データベース エンジンのインスタンスは、データベース内のデータを変更したアクティブなトランザクションがすべて完了するまで、変更されたデータの行に対応するバージョンを生成しません。アクティブな変更トランザクションが存在すると、SQL Server によってオプションの状態が PENDING_ON に設定されます。すべての変更トランザクションが完了してから、このオプションの状態が ON に変更されます。ユーザーは、オプションが完全に ON になるまで、そのデータベースでのスナップショット トランザクションを開始できません。データベース管理者が ALLOW_SNAPSHOT_ISOLATION オプションを OFF に設定すると、データベースは PENDING_OFF の状態を経てから OFF に設定されます。

次の Transact-SQL ステートメントで、ALLOW_SNAPSHOT_ISOLATION を有効にします。

ALTER DATABASE AdventureWorks2008R2
    SET ALLOW_SNAPSHOT_ISOLATION ON;

次の表では、ALLOW_SNAPSHOT_ISOLATION オプションの状態を一覧し、それぞれについて説明します。ALLOW_SNAPSHOT_ISOLATION オプションを指定して ALTER DATABASE を使用すると、現在データベースのデータにアクセスしているユーザーはブロックされません。

現在のデータベースのスナップショット分離フレームワークの状態

説明

OFF

スナップショット分離トランザクションのサポートはアクティブになりません。スナップショット分離トランザクションは許可されません。

PENDING_ON

スナップショット分離トランザクションのサポートが遷移中の状態 (OFF から ON) です。開いているトランザクションが完了する必要があります。

スナップショット分離トランザクションは許可されません。

ON

スナップショット分離トランザクションのサポートがアクティブになります。

スナップショット トランザクションが許可されます。

PENDING_OFF

スナップショット分離トランザクションのサポートが遷移中の状態 (ON から OFF) です。

これ以降に開始されるスナップショット トランザクションは、このデータベースにアクセスできません。このデータベースのバージョン管理の負荷は、依然として更新トランザクションが担っています。既存のスナップショット トランザクションからは、このデータベースに引き続き問題なくアクセスできます。PENDING_OFF の状態は、データベースのスナップショット分離の状態が ON のときにアクティブであったすべてのスナップショット トランザクションが完了するまで OFF になりません。

行のバージョン管理データベース オプションの両方の状態を判断するには、sys.databases カタログ ビューを使用します。

ユーザー テーブルと、master と msdb に格納されている一部のシステム テーブルに対して更新を行うと、常に行のバージョンが生成されます。

master データベースと msdb データベースでは、ALLOW_SNAPSHOT_ISOLATION オプションが自動的に ON に設定されます。このオプションを無効にすることはできません。

master、tempdb、または msdb では、ユーザーが READ_COMMITTED_SNAPSHOT オプションを ON に設定することはできません。