Trabalhar com Isolamento de Snapshots em Cliente Nativo do SQL Server

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)

Importante

SQL Server Native Client (SNAC) não é fornecido com:

  • SQL Server 2022 (16.x) e versões posteriores
  • SQL Server Management Studio 19 e versões posteriores

O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.

Para novos projetos, use um dos seguintes drivers:

Para o SQLNCLI fornecido como componente do Mecanismo de Base de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção ao Ciclo de Vida de Suporte .

O SQL Server 2005 (9.x) introduziu um novo nível de isolamento "snapshot" destinado a melhorar a concorrência para aplicações de processamento de transações online (OLTP). Nas versões anteriores do SQL Server, a concorrência baseava-se exclusivamente no bloqueio, o que pode causar problemas de bloqueio e deadlocks em algumas aplicações. O isolamento de instantâneos depende de melhorias na versão de linhas e destina-se a melhorar o desempenho evitando cenários de bloqueio leitor-escritor.

As transações que começam sob isolamento de snapshots leem um snapshot da base de dados no momento em que a transação começa. Um resultado disto é que os cursores de keyset, dinâmicos e estáticos do servidor, quando abertos num contexto de transação instantânea, comportam-se de forma semelhante a cursores estáticos abertos em transações serializáveis. No entanto, quando os cursores são abertos sob o snapshot, os bloqueios de nível de isolamento não são tomados, o que pode reduzir o bloqueio no servidor.

Fornecedor SQL Server Native Client OLE DB

O fornecedor OLE DB do SQL Server Native Client tem melhorias que aproveitam o isolamento de snapshots introduzido no SQL Server 2005 (9.x). Estas melhorias incluem alterações aos conjuntos de propriedades DBPROPSET_DATASOURCEINFO e DBPROPSET_SESSION.

DBPROPSET_DATASOURCEINFO

O conjunto de propriedades DBPROPSET_DATASOURCEINFO foi alterado para indicar que o nível de isolamento do instantâneo é suportado pela adição do valor DBPROPVAL_TI_SNAPSHOT usado na propriedade DBPROP_SUPPORTEDTXNISOLEVELS. Este novo valor indica que o nível de isolamento de instantâneos é suportado, independentemente de a versão ter sido ativada na base de dados ou não. Segue-se uma lista dos valores DBPROP_SUPPORTEDTXNISOLEVELS:

ID do imóvel Description
DBPROP_SUPPORTEDTXNISOLEVELS Tipo: VT_I4

R/W: Só leitura

Descrição: Uma máscara de bits que especifica os níveis de isolamento de transações suportados. Uma combinação de zero ou mais dos seguintes:

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

O conjunto de propriedades DBPROPSET_SESSION foi alterado para indicar que o nível de isolamento do instantâneo é suportado pela adição do valor DBPROPVAL_TI_SNAPSHOT usado na propriedade DBPROP_SESS_AUTOCOMMITISOLEVELS. Este novo valor indica que o nível de isolamento de instantâneos é suportado, independentemente de a versão ter sido ativada na base de dados ou não. Segue-se uma lista dos valores DBPROP_SESS_AUTOCOMMITISOLEVELS:

ID do imóvel Description
DBPROP_SESS_AUTOCOMMITISOLEVELS Tipo: VT_I4

R/W: Só leitura

Descrição: Especifica uma máscara de bits que indica o nível de isolamento da transação enquanto está em modo de auto-commit. Os valores que podem ser definidos nesta máscara de bits são os mesmos que podem ser definidos para DBPROP_SUPPORTEDTXNISOLEVELS.

Note

Os erros DB_S_ERRORSOCCURRED ou DB_E_ERRORSOCCURRED ocorrerão se DBPROPVAL_TI_SNAPSHOT for definido ao usar versões do SQL Server anteriores ao SQL Server 2005 (9.x).

Para informações sobre como o isolamento de snapshots é suportado em transações, consulte Suporte a Transações Locais.

Driver ODBC de Cliente Nativo do SQL Server

O driver ODBC do SQL Server Native Client oferece suporte para isolamento de snapshots através de melhorias feitas nas funções SQLSetConnectAttr e SQLGetInfo.

SQLSetConnectAttr

A função SQLSetConnectAttr suporta agora a utilização do atributo SQL_COPT_SS_TXN_ISOLATION. Definir SQL_COPT_SS_TXN_ISOLATION para SQL_TXN_SS_SNAPSHOT indica que a transação ocorrerá abaixo do nível de isolamento do snapshot.

SQLGetInfo

A função SQLGetInfo suporta agora o valor de SQL_TXN_SS_SNAPSHOT que foi adicionado ao tipo de informação SQL_TXN_ISOLATION_OPTION.

Para informações sobre como o isolamento de instantâneos é suportado em transações, veja Nível de Isolamento de Transações do Cursor.