使用快照隔离

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 值:

属性 ID

说明

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 值:

属性 ID

说明

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_ISOLATION_OPTION 信息类型的 SQL_TXN_SS_SNAPSHOT 值。

有关如何在事务中支持快照隔离的细信息,请参阅游标事务隔离级别