Partilhar via


Resiliência de conexão ociosa no driver OLE DB

Aplica-se a: SQL Server 2014 (12.x) e versões posteriores Azure SQL Databaseem Microsoft Fabric

Baixar driver OLE DB

Visão geral

A partir do Microsoft OLE DB Driver para SQL Server versão 18.6.0, a resiliência de conexão permite que o driver restaure automaticamente conexões ociosas quebradas.

O diagrama a seguir explica como a resiliência de conexão ociosa funciona no driver OLE DB: Diagrama de informações de resiliência de conexão

  1. Em T1, uma conexão é feita usando IDBInitialize::Initialize.
  2. Há um período sem comunicação entre o driver e o servidor entre T2 e T3, resultando em uma conexão ociosa. Durante esse tempo, a conexão de rede pode ser interrompida. A interrupção pode ser algo como um dispositivo de rede fechando uma tomada ociosa ou colocando um dispositivo em espera por um breve período.
  3. Em T3, o aplicativo cliente tenta executar um comando usando o driver OLE DB (por exemplo, usando ICommand::Execute. O driver deteta que a conexão está quebrada e restabelece a conexão de forma transparente.

Palavras-chave e propriedades

Keyword Propriedade Valores Predefinido Description
ConnectRetryCount SSPROP_INIT_CONNECT_RETRY_COUNT Valor inteiro entre 0 e 255 (inclusive) 1 Controla o número máximo de tentativas de reconexão se a conexão tiver sido interrompida. Por padrão, uma única tentativa é feita para restabelecer uma conexão quando quebrada. Um valor 0 significa que nenhuma reconexão será tentada.
ConnectRetryInterval SSPROP_INIT_CONNECT_RETRY_INTERVAL Inteiro entre 1 e 60 (inclusive) 10 O tempo, em segundos, entre cada tentativa de repetição de conexão. Essa palavra-chave será ignorada se ConnectRetryCount for igual a 0.

As páginas a seguir fornecem mais informações sobre como definir essas propriedades:

Se um aplicativo estabelecer uma conexão com DBPROP_INIT_PROMPT e posteriormente tentar executar uma instrução sobre uma conexão quebrada, o driver OLE DB não exibirá a caixa de diálogo novamente.

Ao obter o status da conexão através da propriedade DBPROP_CONNECTIONSTATUS:

  • Durante a recuperação, o imóvel devolverá DBPROPVAL_CS_INITIALIZED.
  • Se a recuperação falhar, a propriedade retornará DBPROPVAL_CS_COMMUNICATIONFAILURE.

Observação

Se o tempo limite do comando (DBPROP_COMMANDTIMEOUT em DBPROPSET_ROWSET) tiver sido definido como um valor diferente de zero e a recuperação da conexão demorar mais do que o tempo limite do comando, a conexão não será recuperada.

Recuperação de conexão com execução assíncrona

Se estiver usando a execução assíncrona e a conexão precisar ser recuperada, a recuperação da conexão acontecerá de forma síncrona antes que a chamada assíncrona seja executada. Para obter mais informações sobre execução assíncrona, consulte Executando operações assíncronas.

Erros esperados

Se a recuperação da conexão falhar, um dos seguintes erros pode ocorrer:

  • A conexão está quebrada e a recuperação não é possível. O driver do cliente tentou recuperar a conexão uma ou mais vezes e todas as tentativas falharam. Aumente o valor de ConnectRetryCount para aumentar o número de tentativas de recuperação.
  • O servidor não reconheceu uma tentativa de recuperação, a recuperação da conexão não é possível.
  • O servidor não preservou a versão exata do cliente TDS solicitada durante uma tentativa de recuperação, a recuperação da conexão não é possível.
  • O servidor não preservou a versão principal exata do servidor solicitada durante uma tentativa de recuperação, a recuperação da conexão não é possível.
  • A conexão está quebrada e a recuperação não é possível. A conexão é marcada pelo servidor como irrecuperável. Nenhuma tentativa foi feita para restaurar a conexão.
  • A conexão está quebrada e a recuperação não é possível. A conexão é marcada pelo driver do cliente como irrecuperável. Nenhuma tentativa foi feita para restaurar a conexão.
  • O servidor não preservou a criptografia SSL durante uma tentativa de recuperação, a recuperação da conexão não é possível.