搜尋本站文章

2017-03-07

[SQL Server]:啟用「讀取認可快照(READ_COMMITTED_SNAPSHOT)」


關聯式資料庫為了確保資料一致性,使用:交易與鎖定等機制來處理。
若是為了:

  1. 防止交易讀到尚未認可的資料修改 (中途讀取)。
  2. 將鎖定爭用的情況降到最低。

在SQL Server 2005中提供了:

  1. 「讀取認可快照(READ_COMMITTED_SNAPSHOT)」
  2. 「快照集隔離(SNAPSHOT isolation)」


若要啟用「讀取認可快照(READ_COMMITTED_SNAPSHOT)」,可以使用以下的方式:

  • SSMS管理工具:指定資料庫的屬性
  • T-SQL 陳述式:ALTER DATABASE...SET READ_COMMITTED_SNAPSHOT ON




-- 01_SSMS_啟用讀取認可快照





T-SQL 陳述式:ALTER DATABASE...SET READ_COMMITTED_SNAPSHOT ON

啟用「讀取認可快照(READ_COMMITTED_SNAPSHOT)」


-- 01_查詢伺服器上各個資料庫的「讀取認可快照」、「快照集隔離」之狀態
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
GO

-- 02_啟用特定資料庫的「讀取認可快照」
USE master
GO
ALTER DATABASE DB01
    SET READ_COMMITTED_SNAPSHOT ON
 WITH ROLLBACK IMMEDIATE;
GO

-- 03_查詢伺服器上各個資料庫的「讀取認可快照」、「快照集隔離」之狀態
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
GO

-- 04_關閉:特定資料庫的「讀取認可快照」
USE master
GO
ALTER DATABASE DB01
    SET READ_COMMITTED_SNAPSHOT OFF
 WITH ROLLBACK IMMEDIATE;
GO

-- 05_查詢伺服器上各個資料庫的「讀取認可快照」、「快照集隔離」之狀態
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
GO




-- 21_TSQL_查詢_讀取認可快照


-- 22_啟用特定資料庫的「讀取認可快照」


-- 23_TSQL_查詢_讀取認可快照






參考資料

在「資料庫鏡像」上,啟用「讀取認可快照(Read Committed Snapshot)」。遭遇錯誤:訊息 1468,層級 16,狀態 4,因為它牽涉到資料庫鏡像工作階段(because it is involved in a database mirroring session)。
http://sharedderrick.blogspot.tw/2010/05/read-committed-snapshot-1468-16.html

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

SQL Server 中的快照集隔離
https://msdn.microsoft.com/zh-tw/library/tcbchxcb(v=vs.110).aspx

選擇以資料列版本控制為基礎的隔離等級
https://technet.microsoft.com/zh-tw/library/ms188277(v=sql.90).aspx