Partilhar via


Resiliência de conexão (JDBC)

Baixar o JDBC Driver

A resiliência de conexão permite que uma conexão ociosa interrompida seja restabelecida, dentro de limitações. Se uma conexão inicial falhar, a resiliência de conexão também permitirá que o driver tente se reconectar automaticamente. Apenas o SQL Server 2014 e versões posteriores e o Banco de Dados SQL do Azure dão 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.

Nova tentativa de conexão

Há dois aspectos na resiliência da conexão. O primeiro é a capacidade de repetir de modo transparente uma conexão de banco de dados inicial. O segundo é a capacidade de restaurar de modo transparente uma conexão ociosa existente. Uma conexão ociosa típica pode ser uma conexão em um pool de conexões. Uma conexão "ociosa" geralmente está ociosa por pelo menos 30 segundos. Essas conexões geralmente podem ser encerradas 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 de propriedades da fonte de dados.

Palavra-chave Valores Padrão Descrição
connectRetryCount Um 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, apenas uma nova tentativa é feita. Um valor de 0 significa que uma nova tentativa não será feita.
connectRetryInterval Um inteiro entre 1 e 60 (inclusive) 10 O tempo em segundos entre cada tentativa de conexão. O driver tentará se reconectar imediatamente após a detecção de uma conexão ociosa interrompida e aguardará connectRetryInterval segundos antes de tentar novamente. Essa palavra-chave será ignorada se connectRetryCount for 0.

Se o produto de connectRetryCount multiplicado por connectRetryInterval é maior que loginTimeout, o driver para de tentar se conectar quando loginTimeout é atingido. Caso contrário, ele continuará a tentar se reconectar até que connectRetryCount seja atingido.

Recuperação da conexão

Para detectar conexões ociosas interrompidas, o driver depende dos pacotes keep alive TCP no nível do soquete. No Linux e no Java 11+, o driver automaticamente habilita pacotes keep alive em um intervalo de 30 segundos (KeepAliveTime) com um atraso de um segundo entre repetições quando ocorre uma falha (KeepAliveInterval).

Importante

No Windows e no macOS ou no Java 8, os keep alives precisam ser manualmente configurados no sistema operacional para tirar proveito da restauração de conexões ociosas interrompidas. Para obter informações sobre como configurar keep alives, confira Conexão com o banco de dados SQL do Azure.

Limitações

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

  • Há um conjunto de resultados aberto que não foi completamente analisado ou armazenado em buffer
  • Como alternar bancos de dados no SQL do Azure
  • Há uma transação aberta

Confira também

Conectando-se a um banco de dados SQL do Azure
Artigo técnico – Resiliência contra conexões ociosas
Visão geral do JDBC Driver