Partager via


Résilience de connexion (JDBC)

Télécharger le pilote JDBC

La résilience de connexion permet de rétablir une connexion inactive interrompue, dans certaines limites. Si une connexion initiale échoue, la résilience de connexion permet également au pilote de retenter automatiquement la reconnexion. Seuls SQL Server 2014 et ultérieur et Azure SQL Database prennent en charge la reconnexion d’une connexion inactive interrompue. Cette fonctionnalité est disponible à compter de Microsoft JDBC Driver 10.2.0 pour SQL Server.

Nouvelle tentative de connexion

Il existe deux aspects de la résilience de connexion. Le premier est la possibilité de retenter de façon transparente une connexion de base de données initiale. Le second est la possibilité de restaurer de façon transparente une connexion inactive existante. Une connexion inactive peut être typiquement une connexion dans un pool de connexions. Une connexion « inactive » est généralement une connexion qui est inactive pendant au moins 30 secondes. Ces connexions peuvent souvent être fermées par le serveur ou par des appareils réseau entre le client et le serveur.

Le pilote JDBC a deux options de connexion qui contrôlent le comportement de la résilience de connexion. Ces options peuvent être ajoutées à la chaîne de connexion ou définies via les propriétés de la source de données.

Mot clé Valeurs Default Description
connectRetryCount Entier compris entre 0 et 255 (inclus) 1 Nombre maximal de tentatives pour établir ou rétablir une connexion avant abandon. Par défaut, une seule tentative est effectuée. La valeur 0 signifie qu’aucune tentative ne sera effectuée.
connectRetryInterval Entier compris entre 1 et 60 (inclus) 10 Durée en secondes entre chaque nouvelle tentative de connexion. Le pilote tente une reconnexion tout de suite en cas de détection d’une connexion inactive interrompue, puis attend connectRetryInterval secondes avant de réessayer. Ce mot clé est ignoré si connectRetryCount est 0.

Si le produit de connectRetryCount multiplié par connectRetryInterval est supérieur à loginTimeout, le pilote arrête la tentative de connexion une fois que loginTimeout est atteint. Dans le cas contraire, il continue à tenter une reconnexion jusqu’à ce que connectRetryCount soit atteint.

Récupération de la connexion

Pour détecter les connexions inactives interrompues, le pilote s’appuie sur des paquets TCP de keepalives au niveau du socket. Sur Linux et Java 11+, le pilote active automatiquement les paquets de keepalives à un intervalle de 30 secondes (KeepAliveTime) avec un délai de 1 seconde entre les nouvelles tentatives en cas de panne (KeepAliveInterval).

Important

Sur Windows et macOS ou sur Java 8, les keepalives doivent être configurées manuellement dans le système d’exploitation afin de tirer parti de la restauration des connexions inactives interrompues. Pour plus d’informations sur la configuration des keepalives, consultez Connexion à une base de données Azure SQL.

Limites

Les connexions inactives interrompues ne peuvent pas être restaurées quand :

  • Il existe un jeu de résultats ouvert qui n’a pas été entièrement analysé ou mis en mémoire tampon
  • Il y a un changement de bases de données sur Azure SQL
  • Une transaction est ouverte

Voir aussi

Connexion à une base de données Azure SQL Database
Article technique – Résilience des connexions inactives
Présentation du pilote JDBC