Share via


使用快照隔離

SQL Server 2005 引進了新的「快照」隔離等級,目的是增強線上交易處理 (OLTP) 應用程式的並行存取。在舊版的 SQL Server 中,並行存取完全以鎖定為基礎,因此導致某些應用程式發生封鎖及死結問題。快照集隔離相依於對資料列版本控制的增強功能,目的是藉由避免發生讀取器-寫入器封鎖的案例來改善效能。

在快照隔離下啟動的交易會根據交易啟動的時間而讀取資料庫快照。其結果之一,就是索引鍵集、動態和靜態伺服器資料指標在快照交易內容內開啟時,其行為與在可序列化交易內開啟的靜態資料指標非常類似。不過,當資料指標開啟時,快照隔離等級並不會鎖定,因而可能減少伺服器上發生封鎖的機會。

如需有關 SQL Server 的快照隔離支援的詳細資訊,請參閱<瞭解以資料列版本控制為基礎的隔離等級>。

SQL Server Native Client OLE DB 提供者

SQL Server Native Client OLE DB 提供者現具備增強功能,能利用 SQL Server 2005 中所引進的快照隔離。這些增強功能包括對 DBPROPSET_DATASOURCEINFO 和 DBPROPSET_SESSION 屬性集所做的變更。

DBPROPSET_DATASOURCEINFO

DBPROPSET_DATASOURCEINFO 屬性集已變更,現藉由加入用於 DBPROP_SUPPORTEDTXNISOLEVELS 屬性中的 DBPROPVAL_TI_SNAPSHOT 値來支援快照隔離等級。這個新値代表不論資料庫上是否啟用版本控制,快照隔離等級都受到支援。下列是 DBPROP_SUPPORTEDTXNISOLEVELS 値的清單:

屬性識別碼

說明

DBPROP_SUPPORTEDTXNISOLEVELS

類型:VT_I4

R/W:唯讀

說明:指定受支援之交易隔離等級的位元遮罩。下列零或多個項目的組合:

  • DBPROPVAL_TI_CHAOS

  • DBPROPVAL_TI_READUNCOMMITTED

  • DBPROPVAL_TI_BROWSE

  • DBPROPVAL_TI_CURSORSTABILITY

  • DBPROPVAL_TI_READCOMMITTED

  • DBPROPVAL_TI_REPEATABLEREAD

  • DBPROPVAL_TI_SERIALIZABLE

  • DBPROPVAL_TI_ISOLATED

  • DBPROPVAL_TI_SNAPSHOT

DBPROPSET_SESSION

DBPROPSET_SESSION 屬性集已變更,現藉由加入用於 DBPROP_SESS_AUTOCOMMITISOLEVELS 屬性中的 DBPROPVAL_TI_SNAPSHOT 値來支援快照隔離等級。這個新値代表不論資料庫上是否啟用版本控制,快照隔離等級都受到支援。下列是 DBPROP_SESS_AUTOCOMMITISOLEVELS 値的清單:

屬性識別碼

說明

DBPROP_SESS_AUTOCOMMITISOLEVELS

類型:VT_I4

R/W:唯讀

說明:指定自動認可模式時之交易隔離等級的位元遮罩。在此位元遮罩中設定的値,與針對 DBPROP_SUPPORTEDTXNISOLEVELS 而設定的値相同。

[!附註]

如果使用早於 SQL Server 2005 的 SQL Server 版本時設定 DBPROPVAL_TI_SNAPSHOT,就會發生 DB_S_ERRORSOCCURRED 或 DB_E_ERRORSOCCURRED 錯誤。

如需有關如何在交易中支援快照隔離的詳細資訊,請參閱<支援本機交易>。

SQL Server Native Client ODBC 驅動程式

SQL Server Native Client ODBC 驅動程式透過對 SQLSetConnectAttrSQLGetInfo 函數所做的增強功能來提供對快照隔離的支援。

SQLSetConnectAttr

SQLSetConnectAttr 函數現支援 SQL_COPT_SS_TXN_ISOLATION 屬性的使用。將 SQL_COPT_SS_TXN_ISOLATION 設定為 SQL_TXN_SS_SNAPSHOT 代表交易會在快照隔離等級之下發生。

SQLGetInfo

SQLGetInfo 函數現支援 SQL_TXN_SS_SNAPSHOT 値 (已加入至 SQL_TXN_ISOLATION_OPTION 資訊類型)。

如需有關如何在交易中支援快照隔離的詳細資訊,請參閱<資料指標交易隔離等級>。