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
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:
- Em T1, uma conexão é feita usando IDBInitialize::Initialize.
- 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.
- 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:
- Uso de palavras-chave de cadeia de conexão com o Driver do OLE DB para SQL Server
- Propriedades de inicialização e autorização
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.