啟用資料列版本控制式的隔離等級
資料管理員可使用 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 目錄檢視,可判定兩個資料列版本控制資料庫選項的狀態。
對使用者資料表的所有更新,以及儲存在 master 與 msdb 中的一些系統資料表,都會產生資料列版本。
在 master 與 msdb 資料庫中會自動將 ALLOW_SNAPSHOT_ISOLATION 選項設為 ON,且無法停用。
使用者無法在 master、tempdb 或 msdb 中將 READ_COMMITTED_SNAPSHOT 選項設為 ON。