在 SQL Server Native Client 中使用快照隔离
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) 未随附:
- SQL Server 2022 (16.x) 及更高版本
- SQL Server Management Studio 19 及更高版本
不建议在新应用开发中使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。
对于新项目,请使用以下驱动程序之一:
对于作为 SQL Server 数据库引擎组件(版本 2012 到 2019)随附的 SQLNCLI,请参阅此支持生命周期特例。
SQL Server 2005 (9.x) 引入了旨在增强联机事务处理 (OLTP) 应用程序的并发处理能力的新“快照”隔离级别。 在早期版本的 SQL Server 中,并发仅基于锁定,对于某些应用程序,这可能导致阻塞和死锁问题。 快照隔离依赖于行版本控制的增强功能,旨在通过避免读取器-编写器阻塞情况来提高性能。
在快照隔离下启动的事务读取该事务启动时的数据库快照。 一种结果是在快照事务上下文中打开的键集、动态和静态服务器游标的行为与在可序列化事务中打开的静态游标的行为非常相似。 但是,当在快照隔离级别下打开游标时,则不会取得锁,这会减少服务器的阻塞。
SQL Server Native Client OLE DB 访问接口
SQL Server Native Client OLE DB 访问接口具有利用 SQL Server 2005(9.x)中引入的快照隔离的增强功能。 这些增强功能包括对 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 之前的 SQL Server 2005 (9.x) 版本时设置 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值。
有关事务中如何支持快照隔离的信息,请参阅 游标事务隔离级别。