自訂交易隔離等級
READ COMMITTED 是 Microsoft SQL Server Database Engine 的預設隔離等級。如果應用程式必須在不同隔離等級操作,可以使用下列方法來設定隔離等級:
- 執行 SET TRANSACTION ISOLATION LEVEL 陳述式。
- 如果 ADO.NET 應用程式使用 System.Data.SqlClient Managed 命名空間,則可以使用 SqlConnection.BeginTransaction 方法來指定 IsolationLevel 選項。
- 使用 ADO 的應用程式可以設定**「自動認可隔離等級」**屬性。
- 當啟動交易時,使用 OLE DB 的應用程式可以將 isoLevel 設為所要的交易隔離等級,以呼叫 ITransactionLocal::StartTransaction。當在自動認可模式中指定隔離等級時,使用 OLE DB 的應用程式可以將 DBPROPSET_SESSION 屬性 DBPROP_SESS_AUTOCOMMITISOLEVELS 設為所要的交易隔離等級。
- 使用 ODBC 的應用程式可以使用 SQLSetConnectAttr 來設定 SQL_COPT_SS_TXN_ISOLATION 屬性。
如需有關設定交易隔離等級的詳細資訊,請參閱<調整交易隔離等級>。
已指定隔離等級時,在 SQL Server 工作階段中,所有查詢和資料操作語言 (DML) 陳述式的鎖定行為都會在此隔離等級運作。此隔離等級會維持有效,直到工作階段結束或隔離等級設為另一個等級為止。
下列範例會設定 SERIALIZABLE
隔離等級:
USE AdventureWorks
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
GO
BEGIN TRANSACTION;
SELECT EmployeeID
FROM HumanResources.Employee;
GO
如果有必要,藉由指定資料表層級的提示,可以覆寫個別查詢或 DML 陳述式的隔離等級。指定資料表層級的提示不會影響到工作階段的其他陳述式。建議您只有在絕對必要時,才使用資料表層級的提示來變更預設的行為。
Database Engine 讀取中繼資料時可能必須取得鎖定,即使隔離等級設為讀取資料時不要求共用鎖定。例如,在讀取未認可之隔離等級執行的交易,讀取資料時不會取得共用鎖定,但在讀取系統目錄檢視時,有時可能會要求鎖定。這表示,當並行交易正在修改資料表的中繼資料,而讀取未認可的交易同時查詢此資料表時,可能會造成鎖定。
若要判斷目前設定的交易隔離等級,可使用下例所示的 DBCC USEROPTIONS
陳述式。結果集和您系統上的結果集可能不盡相同。
USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
DBCC USEROPTIONS;
GO
以下為結果集:
Set Option Value
---------------------------- -------------------------------------------
textsize 2147483647
language us_english
dateformat mdy
datefirst 7
... ...
Isolation level repeatable read
(14 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
請參閱
其他資源
DBCC USEROPTIONS (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
SELECT (Transact-SQL)