Resiliência de conexão ociosa no Driver do OLE DB

Aplica-se a: SQL Server 2014 (12.x) e posterior Banco de Dados SQL do Azure

Baixar o driver do OLE DB

Visão geral

Começando no Driver do Microsoft OLE DB para SQL Server versão 18.6.0, a resiliência de conexão permite que o driver restaure automaticamente as conexões ociosas interrompidas.

O seguinte diagrama explica como funciona a resiliência de conexão ociosa no Driver do 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, o que resulta em uma conexão ociosa. Durante esse tempo, a conexão de rede pode ser interrompida. A interrupção pode acontecer com um dispositivo de rede fechando um soquete ocioso ou colocando um dispositivo em espera por um breve período.
  3. Em T3, o aplicativo cliente tenta executar um comando usando o driver do OLE DB (por exemplo, usando ICommand::Execute. O driver detecta que a conexão foi interrompida e estabelece a conexão de maneira transparente.

Palavras-chave e propriedades

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

As seguinte páginas 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 em uma conexão interrompida, o driver do OLE DB não vai exibir a caixa de diálogo novamente.

Ao obter o status da conexão por meio da propriedade DBPROP_CONNECTIONSTATUS:

  • Durante a recuperação, a propriedade vai retornar DBPROPVAL_CS_INITIALIZED.
  • Se a recuperação falhar, a propriedade vai retornar DBPROPVAL_CS_COMMUNICATIONFAILURE.

Observação

Se o tempo limite de comando (DBPROP_COMMANDTIMEOUT em DBPROPSET_ROWSET) estiver definido como um valor diferente de zero e a recuperação de 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 a conexão precisar ser recuperada ao usar a execução assíncrona, a recuperação de conexão ocorrerá de maneira síncrona antes que a chamada assíncrona seja executada. Para obter mais informações sobre a execução assíncrona, confira Executar operações assíncronas.

Erros esperados

Se a recuperação de conexão falhar, poderá ocorrer um dos seguintes erros:

  • A conexão foi interrompida 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 de conexão 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 protocolo TDS do cliente 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 do servidor exata solicitada durante uma tentativa de recuperação; a recuperação da conexão não é possível.
  • A conexão foi interrompida e a recuperação não é possível. A conexão foi marcada pelo servidor como não recuperável. Não foi feita nenhuma tentativa de restaurar a conexão.
  • A conexão foi interrompida e a recuperação não é possível. A conexão foi marcada pelo driver do cliente como não recuperável. Não foi feita nenhuma tentativa de restaurar a conexão.
  • O servidor não preservou a criptografia SSL durante a tentativa de recuperação e a recuperação de conexão não é possível.