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
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 :
- À T1, une connexion est établie à l’aide de IDBInitialize::Initialize.
- 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.
- À 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 :
- Utilisation de mots clés de chaîne de connexion avec OLE DB Driver pour SQL Server
- Propriétés d’initialisation et d’autorisation
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.