SQL Server 2005 引入了新的“快照”隔离级别,旨在增强联机事务处理(OLTP)应用程序的并发性。 在早期版本的 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 | DESCRIPTION |
|---|---|
| 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 | DESCRIPTION |
|---|---|
| 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 驱动程序通过对 SQLSetConnectAttr 和 SQLGetInfo 函数的增强功能来支持快照隔离。
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值。
有关事务中如何支持快照隔离的信息,请参阅 游标事务隔离级别。