Partage via


Résilience des connexions inactives dans le pilote OLE DB

S’applique à : SQL Server 2014 (12.x) et versions ultérieures d’Azure SQL Database

Télécharger le pilote OLE DB

Vue d’ensemble

À compter de Microsoft OLE DB Driver pour SQL Server version 18.6.0, la résilience des connexions permet au pilote de restaurer automatiquement les connexions inactives interrompues.

Le diagramme suivant explique le fonctionnement de la résilience des connexions inactives dans OLE DB Driver : Diagramme d’informations sur la résilience des connexions

  1. À T1, une connexion est établie à l’aide de IDBInitialize::Initialize.
  2. Il n’y a pas de communication entre le pilote et le serveur entre T2 et T3 ; la connexion est donc inactive. Pendant ce laps de temps, la connexion réseau peut être interrompue. L’interruption peut être due à la fermeture d’un socket inactif par un périphérique réseau, ou à la mise en veille d’un appareil pendant une courte période.
  3. À T3, l’application cliente tente d’exécuter une commande à l’aide du pilote OLE DB (par exemple à l’aide de ICommand::Execute. Le pilote détecte que la connexion est interrompue, et il la rétablit de manière transparente.

Mots clés et propriétés

Mot clé Propriété Valeurs Default Description
ConnectRetryCount SSPROP_INIT_CONNECT_RETRY_COUNT Valeur entière comprise entre 0 et 255 (inclus) 1 Contrôle le nombre maximal de tentatives de reconnexion si la connexion a été interrompue. Par défaut, une seule tentative est effectuée pour rétablir une connexion interrompue. La valeur 0 signifie qu’aucune reconnexion n’est tentée.
ConnectRetryInterval SSPROP_INIT_CONNECT_RETRY_INTERVAL Entier compris entre 1 et 60 (inclus) 10 Durée en secondes entre chaque nouvelle tentative de connexion. Ce mot clé est ignoré si ConnectRetryCount est égal à 0.

Pour plus d’informations sur la définition de ces propriétés, consultez les pages suivantes :

Si une application établit une connexion avec DBPROP_INIT_PROMPT, et si elle essaie plus tard d’exécuter une instruction sur une connexion interrompue, le pilote OLE DB ne réaffiche pas la boîte de dialogue.

Lors de l’obtention de l’état de la connexion via la propriété DBPROP_CONNECTIONSTATUS :

  • Pendant la récupération, la propriété retourne DBPROPVAL_CS_INITIALIZED.
  • En cas d’échec de la récupération, la propriété retourne DBPROPVAL_CS_COMMUNICATIONFAILURE.

Notes

Si le délai d’expiration de la commande (DBPROP_COMMANDTIMEOUT dans DBPROPSET_ROWSET) a été défini sur une valeur différente de zéro et que la récupération de la connexion prend plus de temps que le délai d’expiration de la commande, la connexion n’est pas récupérée.

Récupération de connexion avec exécution asynchrone

Si vous utilisez une exécution asynchrone et que la connexion doit être récupérée, la récupération de la connexion se produit de façon synchrone avant l’exécution de l’appel asynchrone. Pour plus d’informations sur l’exécution asynchrone, consultez Exécution d’opérations asynchrones.

Erreurs attendues

Si la récupération de la connexion échoue, l’une des erreurs suivantes peut se produire :

  • La connexion est interrompue et la récupération n’est pas possible. Le pilote du client a tenté de rétablir la connexion une fois ou plus et toutes les tentatives ont échoué. Augmentez la valeur de ConnectRetryCount pour augmenter le nombre de tentatives de récupération.
  • Le serveur n’a pas reconnu une tentative de récupération. La récupération de la connexion est impossible.
  • Le serveur n’a pas préservé la version TDS exacte demandée lors d’une tentative de récupération. La récupération de la connexion est impossible.
  • Le serveur n’a pas préservé la version principale du serveur exacte demandée lors d’une tentative de récupération. La récupération de la connexion est impossible.
  • La connexion est interrompue et la récupération n’est pas possible. La connexion est marquée par le serveur comme irrécupérable. Aucune tentative n’a été faite pour rétablir la connexion.
  • La connexion est interrompue et la récupération n’est pas possible. La connexion est marquée par le pilote du client comme irrécupérable. Aucune tentative n’a été faite pour rétablir la connexion.
  • Le serveur n’a pas conservé le chiffrement SSL lors d’une tentative de récupération. La récupération de la connexion est impossible.