啟用資料列版本控制式的隔離等級

資料管理員可使用 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 時,在所有已於資料庫中修改資料的使用中交易完成之前,MicrosoftSQL Server Database Engine 的執行個體不會為已修改的資料產生資料列版本。如果有使用中的修改交易,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,且無法停用。

使用者無法在 mastertempdbmsdb 中將 READ_COMMITTED_SNAPSHOT 選項設為 ON。