請參考以下的範例來啟用「讀取認可快照」:
--啟用資料列版本控制的讀取認可快照(READ_COMMITTED_SNAPSHOT) USE master GO ALTER DATABASE <資料庫> SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE; GO
可能會遭遇到以下的錯誤訊息與下圖所示:
訊息 1468,層級 16,狀態 4,行 1 無法在資料庫 "Northwind_DatabaseMirroring" 上執行作業,因為它牽涉到資料庫鏡像工作階段。 訊息 5069,層級 16,狀態 1,行 1 ALTER DATABASE 陳述式失敗。 -- 訊息 1468,層級 16,狀態 4,行 1 The operation cannot be performed on database "Northwind_DatabaseMirroring" because it is involved in a database mirroring session. 訊息 5069,層級 16,狀態 1,行 1 ALTER DATABASE statement failed.
在設定 READ_COMMITTED_SNAPSHOT 資料庫選項設為 ON ,只允許使用執行 ALTER DATABASE 命令的連接。在 ALTER DATABASE 完成以前,資料庫中不可以有其他開啟的連接。資料庫不一定要處於單一使用者模式。
在「資料庫鏡像」機制上,「主體資料庫」與「鏡像資料庫」之間有「資料庫鏡像工作階段」的連線,所以,這應該可以預期會發生的情形。
若要在「資料庫鏡像」組態上,直接對「主體資料庫」啟用「讀取認可快照」功能。
請參考以下的流程:
- 工作1:中斷「資料庫鏡像工作階段」。
- 工作2:設定啟用「讀取認可快照」。
- 工作3:重建「資料庫鏡像工作階段」。
工作1:中斷「資料庫鏡像工作階段」
可以使用兩種方式:
(1)使用 SSMS 管理工具,對「主體資料庫」,執行「移除鏡像」。請參考下圖所示:
(2)在「主體資料庫」上,執行以下的範例程式碼:
USE master GO ALTER DATABASESET PARTNER OFF GO
工作2:設定啟用「讀取認可快照」
對「主體資料庫」,執行以下的範例程式碼:
--啟用資料列版本控制的讀取認可快照(READ_COMMITTED_SNAPSHOT) USE master GO ALTER DATABASE Northwind_DatabaseMirroring SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE; GO --查詢是否有啟用「讀取認可快照」 SELECT name N'資料庫', snapshot_isolation_state N'快照集隔離交易狀態', snapshot_isolation_state_desc N'快照集隔離交易狀態的描述', is_read_committed_snapshot_on N'啟用讀取認可快照' FROM sys.databases ORDER BY 4 DESC
請參考下圖所示:
工作3:重建「資料庫鏡像工作階段」
可以使用兩種方式:
(1)使用 SSMS 管理工具,執行「設定資料庫鏡像安全性精靈」來重新建立「資料庫鏡像工作階段」。
(2)使用以下的範例程式碼:
USE master GO ALTER DATABASESET PARTNER = <....> GO
由上,已經完成在「資料庫鏡像」上,啟用「讀取認可快照(Read Committed Snapshot)」組態的作業。
參考資料:
Database Engine 中的隔離等級
http://msdn.microsoft.com/zh-tw/library/ms189122.aspx
Database Engine 中資料列版本控制式的隔離等級
http://msdn.microsoft.com/zh-tw/library/ms179599.aspx
啟用資料列版本控制式的隔離等級
http://msdn.microsoft.com/zh-tw/library/ms175095.aspx
How to Enable RCSI for a Database with Database Mirroring
http://blogs.msdn.com/sqlcat/archive/2010/03/16/how-to-enable-rcsi-for-a-database-with-database-mirroring.aspx
沒有留言:
張貼留言