Partilhar via


Resiliência de conexão (JDBC)

Baixar driver JDBC

A resiliência da conexão permite que uma conexão ociosa quebrada seja restabelecida, dentro de limitações. Se uma conexão inicial falhar, a resiliência da conexão também permite que o driver tente novamente automaticamente a conexão. Somente o SQL Server 2014 e posterior e o Banco de Dados SQL do Azure oferecem suporte à reconexão de uma conexão ociosa interrompida. Esse recurso está disponível a partir do Microsoft JDBC Driver 10.2.0 para SQL Server.

Repetição da conexão

Há dois aspetos na resiliência da conexão. O primeiro é a capacidade de repetir de forma transparente uma conexão inicial de banco de dados. O segundo é a capacidade de restaurar de forma transparente uma conexão existente e ociosa. Uma conexão ociosa típica pode ser uma conexão situada em um pool de conexões. Uma conexão "ociosa" é geralmente aquela que ficou ociosa por pelo menos 30 segundos. Essas conexões geralmente podem ser fechadas pelo servidor ou por dispositivos de rede entre o cliente e o servidor.

O driver JDBC tem duas opções de conexão que controlam o comportamento de resiliência da conexão. Essas opções podem ser adicionadas à cadeia de conexão ou definidas por meio das propriedades da fonte de dados.

Keyword Valores Default Description
connectRetryCount Inteiro entre 0 e 255 (inclusive) 1 O número máximo de tentativas de estabelecer ou restabelecer uma conexão antes de desistir. Por padrão, uma única tentativa de repetição é feita. Um valor de 0 significa que uma nova tentativa não será tentada.
connectRetryInterval Inteiro entre 1 e 60 (inclusive) 10 O tempo, em segundos, entre as tentativas de repetição da conexão. O driver tentará se reconectar imediatamente após detetar uma conexão ociosa quebrada e, em seguida, aguardará connectRetryInterval segundos antes de tentar novamente. Esta palavra-chave é ignorada se connectRetryCount for 0.

Se o produto de connectRetryCount multiplicado por connectRetryInterval for maior que loginTimeout, então o driver deixará de tentar conectar-se assim que loginTimeout é alcançado. Caso contrário, ele continuará a tentar se reconectar até connectRetryCount ser alcançado.

Recuperação de conexão

Para detetar conexões ociosas quebradas, o driver depende de pacotes keepalive TCP no nível do soquete. No Linux e Java 11+, o driver habilita automaticamente os pacotes keepalive em um intervalo de 30 segundos (KeepAliveTime) com um atraso de 1 segundo entre as novas tentativas quando ocorre uma falha (KeepAliveInterval).

Importante

No Windows e em Java 11 e anteriores, keepalives devem ser configurados manualmente no sistema operacional para tirar proveito da restauração de conexões inativas que foram interrompidas. Para obter informações sobre como configurar keepalives, consulte Conexão com o banco de dados SQL do Azure.

Limitações

Conexões ociosas quebradas não podem ser restauradas quando:

  • Há um conjunto de resultados aberto que não foi completamente analisado ou armazenado em buffer
  • Mudança de bases de dados contra Azure SQL
  • Há uma transação aberta

Consulte também

Conectando-se a um banco de dados SQL do Azure
Artigo Técnico - Resiliência de conexão ociosa
Visão geral do driver JDBC