Connecter des clients à une session de mise en miroir de bases de données (SQL Server)Connect Clients to a Database Mirroring Session (SQL Server)

Pour établir une connexion avec une session de mise en miroir de bases de données, un client peut soit utiliser SQL ServerSQL Server Native Client, soit le fournisseur de données .NET Framework pour SQL ServerSQL Server.To connect to a database mirroring session, a client can use either SQL ServerSQL Server Native Client or .NET Framework Data Provider for SQL ServerSQL Server. S'ils sont configurés pour une base de données SQL Server 2017SQL Server 2017 , ces deux fournisseurs d'accès aux données prennent pleinement en charge la mise en miroir de bases de données.When configured for a SQL Server 2017SQL Server 2017 database, these data access providers both fully support database mirroring. Pour plus d'informations sur les éléments de programmation à prendre en compte pour l'utilisation d'une base de données mise en miroir, consultez Using Database Mirroring.For information about programming considerations for using a mirrored database, see Using Database Mirroring. Qui plus est, l'instance de serveur principal actuelle doit être disponible et la connexion du client doit avoir été créée dans l'instance de serveur.In addition, the current principal server instance must be available and the login of the client must have been created on the server instance. Pour plus d’informations, consultez Dépanner des utilisateurs orphelins (SQL Server).For more information, see Troubleshoot Orphaned Users (SQL Server). Les connexions clientes à une session de mise en miroir de base de données n'exigent pas l'intervention de l'instance de serveur témoin (le cas échéant).Client connections to a database mirroring session do not involve the witness server instance, if one exists.

Établissement de la connexion initiale à une session de mise en miroir de bases de données Making the Initial Connection to a Database Mirroring Session

Pour établir la connexion initiale avec une base de données mise en miroir, un client doit fournir une chaîne de connexion contenant au minimum le nom d'une instance de serveur.For the initial connection to a mirrored database, a client must supply a connection string that minimally supplies the name of a server instance. Ce nom de serveur obligatoire doit identifier l'instance du serveur principal actuel et est appelé nom du serveur partenaire initial.This required server name should identify the current principal server instance and is known as the initial partner name.

Éventuellement, la chaîne de connexion peut également fournir le nom d'une autre instance de serveur, qui doit alors identifier l'instance du serveur miroir actuel, à utiliser si le serveur partenaire initial n'est pas disponible lors de la première tentative de connexion.Optionally, the connection string can also supply the name of another server instance, which should identify the current mirror server instance, for use if the initial partner is unavailable during the first connection attempt. Ce deuxième nom est appelé nom du partenaire de basculement.The second name is known as the failover partner name.

La chaîne de connexion doit également contenir un nom de base de données.The connection string must also supply a database name. Cette information est requise pour permettre au fournisseur d'accès aux données d'effectuer des tentatives de basculement.This is necessary to enable failover attempts by the data access provider.

À la réception d'une chaîne de connexion, le fournisseur d'accès aux données stocke le nom du serveur partenaire initial et, le cas échéant, le nom du partenaire de basculement dans un cache de la mémoire volatile du client (pour le code managé, le cache se limite au domaine d'application).On receiving a connection string, the data access provider stores the initial partner name and the failover partner name, if supplied, in a cache in the client's volatile memory (for managed code, the cache is scoped to the application domain). Une fois mis en cache, le nom du serveur partenaire initial n'est jamais mis à jour par le fournisseur d'accès aux données.Once cached, the initial partner name is never updated by the data access provider. Lorsque le client fournit le nom du partenaire de basculement, le fournisseur d'accès aux données stocke aussi ce nom temporairement pour pouvoir se connecter s'il ne peut pas le faire en utilisant le nom du serveur partenaire initial.When the client supplies the failover partner name, the data access provider also stores this failover partner name temporarily in case the provider cannot connect using the initial partner name.

Une session de mise en miroir de bases de données ne fournit aucune protection contre les problèmes d'accès au serveur qui sont spécifiques aux clients, comme lorsqu'un ordinateur client n'arrive pas à communiquer avec le réseau.A database mirroring session does not protect against server-access problems that are specific to clients, such as when a client computer is having a problems communicating with the network. Une tentative de connexion à une base de données mise en miroir peut également échouer pour diverses raisons qui n'ont aucun rapport avec le fournisseur d'accès aux données ; par exemple, une tentative de connexion peut échouer parce que l'instance du serveur principal est inactive, comme c'est le cas pendant le basculement de la base de données, ou à cause d'une erreur réseau.A connection attempt to a mirrored database can also fail for a variety of reasons that are unrelated to the data-access provider; for example, a connection attempt can fail because the principal server instance is inactive, as occurs when the database is failing over, or because of a network error.

Lorsque le fournisseur d'accès aux données tente de se connecter, il commence par utiliser le nom du serveur partenaire initial.When attempting to connect, the data access provider begins by using the initial partner name. En règle générale, si l'instance de serveur spécifiée est disponible et qu'il s'agit bien de l'instance du serveur principal actuel, la tentative de connexion aboutit.If the specified server instance is available and is the current principal server instance, the connection attempt typically succeeds.

Note

Si la session de mise en miroir est suspendue, le client se connecte généralement au serveur principal et télécharge le nom du serveur partenaire.If the mirroring session is paused, the client typically connects to the principal server and the downloads the partner name. Cependant, le client ne peut pas accéder à la base de données tant que la mise en miroir n'a pas redémarré.However, the database is unavailable to the client until mirroring resumes.

Si cette tentative échoue, le fournisseur d'accès aux données essaie de se connecter à l'aide du nom du partenaire de basculement (s'il est disponible).If that attempt does not work, the data access provider tries the failover partner name, if available. Si l'un des noms de serveur partenaire identifie correctement le serveur principal actuel, le fournisseur d'accès aux données réussit généralement à ouvrir la connexion initiale.If either partner name correctly identifies the current principal server, the data access provider normally succeeds in opening the initial connection. Une fois cette connexion établie, le fournisseur d'accès aux données télécharge le nom d'instance de serveur du serveur miroir actuel.On completing this connection, the data access provider downloads the server instance name of the current mirror server. Ce nom est stocké dans le cache en tant que nom du partenaire de basculement et remplace, le cas échéant, le nom du partenaire de basculement fourni par le client.This name is stored in the cache as the failover partner name, overwriting the client-supplied failover partner name, if any. Par la suite, le fournisseur de données .NET Framework pour SQL ServerSQL Server ne met pas à jour le nom du partenaire de basculement.Thereafter, the .NET Framework Data Provider for SQL ServerSQL Server does not update the failover partner name. En revanche, SQL ServerSQL Server Native Client met le cache à jour à chaque fois qu'une connexion ou réinitialisation de connexion ultérieure retourne un nom de serveur partenaire différent.In contrast, SQL ServerSQL Server Native Client updates the cache whenever a subsequent connection or connection reset returns a different partner name.

La figure suivante représente une connexion cliente au serveur partenaire initial, Partner_A, pour une base de données en miroir appelée Db_1.The following figure illustrates a client connection to the initial partner, Partner_A, for a mirrored database named Db_1. Cette figure illustre le cas où le nom du serveur partenaire initial fourni par le client identifie correctement le serveur principal actuel, Partner_A.This figure shows a case in which the initial partner name supplied by the client correctly identifies the current principal server, Partner_A. La tentative de connexion initiale aboutit et le fournisseur d’accès aux données stocke le nom du serveur miroir (actuellement Partner_B) en tant que nom du partenaire de basculement dans le cache local.The initial connection attempt succeeds, and the data access provider stores the name of the mirror server (currently Partner_B) as the failover partner name in the local cache. Pour terminer, le client se connecte à la copie principale de la base de données Db_1 .Finally, the client connects to the principal copy of the Db_1 database.

Connexion cliente si le serveur partenaire initial est le principalClient connection if initial partner is principal

La tentative de connexion initiale peut échouer, entre autres, à cause d'une erreur réseau ou d'une instance de serveur inactive.The initial connection attempt may fail, for example, because of a network error or an inactive server instance. Étant donné que le serveur partenaire initial est alors indisponible, pour que le fournisseur d'accès aux données puisse essayer de se connecter au partenaire de basculement, le client doit avoir fourni le nom de ce dernier dans la chaîne de connexion.Because the initial partner is unavailable, for the data access provider to attempt to connect to the failover partner, the client must have supplied the failover partner name in the connection string.

Si ce n'est pas le cas et que le nom du partenaire de basculement n'est pas disponible, la tentative de connexion initiale se poursuit jusqu'à l'expiration de la connexion réseau ou jusqu'à ce qu'une erreur soit retournée (exactement comme pour une base de données qui n'est pas mise en miroir).In that case, if the failover partner name is unavailable, the original connection attempt continues until the network connection timeout or an error is returned (just as for a non-mirrored database).

Lorsque le nom du partenaire de basculement est fourni dans la chaîne de connexion, le comportement du fournisseur d'accès aux données dépend du protocole réseau et du système d'exploitation du client, comme indiqué ci-après :When the failover partner name is supplied in the connection string, the behavior of the data access provider depends on the network protocol and operating system of the client, as follows:

  • Pour TCP/IP, les tentatives de connexion sont régies par un algorithme de délai entre deux tentatives de connexion spécifique à la mise en miroir de bases de données.For TCP/IP, the connection attempts are regulated by a connection retry algorithm that is specific to database mirroring. L’ algorithme de délai entre deux tentatives de connexion détermine la durée maximale (le délai entre deux tentatives) allouée à l’ouverture d’une connexion lors d’une tentative de connexion donnée.The connection retry algorithm determines the maximum time (the retry time) allotted for opening a connection in a given connection attempt.

  • Pour les autres protocoles réseauFor other network protocols

    Si une erreur se produit ou si le serveur partenaire initial est indisponible, la tentative de connexion initiale attend l'expiration du délai d'attente de la connexion réseau ou du délai d'attente de la connexion du fournisseur d'accès aux données.If an error occurs or if the initial partner is unavailable, the initial connection attempt waits until the network connection timeout period expires or the login timeout period expires on the data access provider. En général, ce délai est de l'ordre de 20 à 30 secondes.Typically, this wait is on the order of 20 to 30 seconds. Ensuite, si la connexion du fournisseur d'accès aux données n'a pas expiré, le fournisseur tente de se connecter au partenaire de basculement.Thereafter, if the data access provider has not timed out, it attempts to connect to the failover partner. Si le délai d'attente de la connexion expire avant l'établissement de la connexion ou si le partenaire de basculement est indisponible, la tentative de connexion échoue.If the connection timeout period expires before the connection succeeds or the failover partner is unavailable, the connection attempt fails. Par contre, si le partenaire de basculement est disponible avant l'expiration du délai d'attente de la connexion et qu'il s'agit désormais du serveur principal, la tentative de connexion aboutit généralement.If failover partner is available within the login timeout period and is now the principal server, the connection attempt normally succeeds.

Chaînes de connexion pour une base de données en miroirConnection Strings for a Mirrored Database

La chaîne de connexion fournie par le client contient des informations que le fournisseur d'accès aux données utilise pour se connecter à la base de données.The connection string supplied by the client contains information that the data access provider uses to connect to the database. Cette section présente les mots clés qui sont tout particulièrement appropriés pour se connecter à une base de données mise en miroir à l'aide d'une connexion au pilote ODBC de SQL ServerSQL Server Native Client.This section discusses the keywords that are specifically relevant for connecting to a mirrored database using a SQL ServerSQL Server Native Client ODBC Driver Connection.

Attribut NetworkNetwork Attribute

La chaîne de connexion doit contenir l’attribut Network pour spécifier le protocole réseau.The connection string should contain the Network attribute to specify the network protocol. Cela permet d'assurer la persistance du protocole réseau spécifié entre les connexions avec différents serveurs partenaires.This ensures that the specified network protocol persists between connections to different partners. TCP/IP est le meilleur protocole pour se connecter à une base de données mise en miroir.The best protocol for connecting to a mirrored database is TCP/IP. Pour garantir que le client exige TCP/IP à chaque fois qu'il se connecte aux serveurs partenaires, la chaîne de connexion doit fournir l'attribut suivant :To ensure that the client requests TCP/IP for every connection to the partners, a connection string supplies the following attribute:

Network=dbmssocn;   

Important

Nous vous recommandons de laisser TCP/IP en haut de la liste de protocoles d'un client.We recommend keeping TCP/IP at the top of a client's protocol list. Toutefois, si la chaîne de connexion spécifie l’attribut Network , l’ordre de cette liste est ignoré.However, if the connection string specifies the Network attribute, this overrides the list order.

Sinon, pour garantir que le client exige des canaux nommés chaque fois qu'il se connecte aux serveurs partenaires, la chaîne de connexion doit fournir l'attribut suivant :Alternatively, to ensure that the client requests named pipes for every connection to the partners, a connection string supplies the following attribute:

Network=dbnmpntw;   

Important

Étant donné que le protocole des canaux nommés n'utilise pas l'algorithme de tentative de connexion TCP/IP, une tentative de connexion utilisant des canaux nommés risque, dans de nombreux cas, d'expirer avant de se connecter à une base de données mise en miroir.Because named pipes does not use the TCP/IP retry algorithm, in many cases, a named pipes connection attempt may time out before connecting to a mirrored database.

Attribut ServerServer Attribute

La chaîne de connexion doit contenir un attribut Server indiquant le nom du serveur partenaire initial, lequel doit identifier l'instance du serveur principal actuel.The connection string must contain a Server attribute that supplies the initial partner name, which should identify the current principal server instance.

La façon la plus simple d’identifier l’instance de serveur consiste à spécifier son nom : <nom_serveur>[\<nom_instance_SQL_Server>].The simplest way to identify the server instance is by specifying its name , <server_name>[\<SQL_Server_instance_name>]. Par exemple :For example:

Server=Partner_A;

ouor

Server=Partner_A\Instance_2;

Cependant, lorsque le nom système est utilisé, le client doit effectuer une recherche DNS pour obtenir l'adresse IP du serveur et une requête SQL Server Browser pour obtenir le numéro de port du serveur sur lequel le serveur partenaire réside.However, when the system name is used, the client must perform a DNS lookup to obtain the IP address of the server and a SQL Server Browser query to obtain the port number of the server on which the partner resides. Vous pouvez éviter ces recherches et requêtes en spécifiant l’adresse IP et le numéro de port du partenaire dans l’attribut Server , au lieu de spécifier le nom du serveur.Those lookups and queries can be bypassed by specifying the IP address and port number of the partner in the Server attribute, rather than specifying the server name. Cette méthode est recommandée afin de minimiser la possibilité de délais externes pendant la connexion à ce serveur partenaire.This is recommended to minimize the possibility of external delays while connecting to that partner.

Note

Il est nécessaire d'effectuer une requête SQL Server Browser si la chaîne de connexion spécifie le nom de l'instance nommée et pas le port.A SQL Server Browser query is necessary if the connection string specifies the named instance name and not the port.

Pour spécifier l’adresse IP et le port, l’attribut Server doit se présenter sous la forme suivante : Server=<adresse_ip>,<port>. Par exemple :To specify the IP address and port, the Server attribute takes the following form, Server=<ip_address>,<port>, for example:

Server=123.34.45.56,4724;   

Note

L'adresse IP peut être une adresse IP Version 4 (IPv4) ou IP Version 6 (IPv6).The IP address can be IP Version 4 (IPv4) or IP Version 6 (IPv6).

Attribut DatabaseDatabase Attribute

En outre, la chaîne de connexion doit spécifier l'attribut Database pour fournir le nom de la base de données mise en miroir.In addition, the connection string must specify the Database attribute to supply the name of the mirrored database. Si la base de données est indisponible lors de la tentative de connexion du client, une exception est générée.If the database is unavailable when the client attempts to connect, an exception is raised.

Par exemple, pour se connecter explicitement à la base de données AdventureWorks sur le serveur principal Partner_A, un client doit utiliser la chaîne de connexion suivante :For example, to expressly connect to the AdventureWorks database on the principal server Partner_A, a client uses the following connection string:

" Server=Partner_A; Database=AdventureWorks "

Note

Cette chaîne omet les informations d'authentification.This string omits authentication information.

Important

L’intégration du préfixe du protocole avec l’attribut Server (Server=tcp:<nom_serveur>) est incompatible avec l’attribut Network. Si vous spécifiez le protocole aux deux emplacements, vous obtiendrez probablement une erreur.Bundling the protocol prefix with the Server attribute (Server=tcp:<servername>) is incompatible with the Network attribute, and specifying the protocol in both places will likely result in an error. Nous vous recommandons de faire en sorte qu’une chaîne de connexion spécifie le protocole à l’aide de l’attribut Network et spécifie uniquement le nom du serveur dans l’attribut Server ("Network=dbmssocn; Server=<nom_serveur>").Therefore, we recommend that a connection string specify the protocol using the Network attribute and specify only the server name in the Server attribute ("Network=dbmssocn; Server=<servername>").

Attribut partenaire de basculementFailover Partner Attribute

Outre le nom du serveur partenaire initial, le client peut aussi spécifier le nom du partenaire de basculement, lequel doit identifier l'instance du serveur miroir actuel.In addition to the initial partner name, the client can also specify failover partner name, which should identify the current mirror server instance. Le partenaire de basculement est spécifié par l'un des mots clés pour l'attribut de partenaire de basculement.The failover partner is specified by one of the keywords for the failover partner attribute. Le mot clé de cet attribut dépend de l'API que vous utilisez.The keyword for this attribute depends on the API that you are using. La table suivante répertorie ces mots clés :The following table lists these keywords:

APIAPI Mot clé pour l'attribut de partenaire de basculementKeyword for failover partner attribute
Fournisseur OLE DBOLE DB Provider FailoverPartnerFailoverPartner
Pilote ODBCODBC Driver Failover_PartnerFailover_Partner
ActiveX Data Objects (ADO)ActiveX Data Objects (ADO) Failover PartnerFailover Partner

La façon la plus simple d’identifier l’instance de serveur consiste à employer son nom système : <nom_serveur>[\<nom_instance_SQL_Server>].The simplest way to identify the server instance is by its system name, <server_name>[\<SQL_Server_instance_name>].

Il est également possible de fournir l’adresse IP et le numéro de port dans l’attribut Failover Partner .Alternatively, the IP address and port number can be supplied in the Failover Partner attribute. Si la tentative de connexion initiale échoue au cours de la première connexion à la base de données, la tentative de connexion au partenaire de basculement ne sera pas tributaire de DNS et de SQL Server Browser.If the initial connection attempt fails during the first connection to the database, the attempt to connect to the failover partner will be freed from relying on DNS and SQL Server Browser. Une fois qu'une connexion est établie, le nom du partenaire de basculement sera remplacé par le nom du partenaire de basculement, si bien qu'en cas de basculement, les connexions redirigées feront appel à DNS et à SQL Server Browser.Once a connection is established, the failover partner name will be overwritten with the failover partner name, so if a failover occurs, the redirected connections will require DNS and SQL Server Browser.

Note

Lorsque seul le nom du serveur partenaire initial est fourni, les développeurs d'applications n'ont rien à faire, ni aucun code à écrire, mis à part le code relatif à la reconnexion.When only the initial partner name is provided, application developers do not need to take any action or write any code except about how to reconnect.

Note

Les développeurs d'applications en code managé fournissent le nom du partenaire de basculement dans la propriété ConnectionString de l'objet SqlConnection .Managed code application developers supply the failover partner name in the ConnectionString of the SqlConnection object. Pour plus d'informations sur l'utilisation de cette chaîne de connexion, consultez « Database Mirroring Support in the .NET Framework Data Provider for SQL Server » (en anglais) dans la documentation ADO.NET qui fait partie du kit de développement logiciel (SDK) MicrosoftMicrosoft .NET Framework.For information on using this connection string, see "Database Mirroring Support in the .NET Framework Data Provider for SQL Server" in the ADO.NET documentation, which is part of the MicrosoftMicrosoft .NET Framework SDK.

Exemple de chaîne de connexionExample Connection String

Par exemple, pour se connecter explicitement à l’aide de TCP/IP à la base de données AdventureWorks sur Partner_A ou sur Partner_B, une application cliente qui utilise le pilote ODBC peut fournir la chaîne de connexion suivante :For example, to explicitly connect using TCP/IP to the AdventureWorks database on either Partner_A or Partner_B, a client application that uses the ODBC Driver could supply the following connection string:

"Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"  

Sinon, le client peut utiliser l'adresse IP et le numéro de port pour identifier le serveur partenaire initial, Partner_A ; par exemple, si l'adresse IP est 250.65.43.21 et le numéro de port est 4734, la chaîne de connexion est la suivante :Alternatively, the client could use the IP address and port number to identify the initial partner, Partner_A; for example, if the IP address is 250.65.43.21 and the port number is 4734, the connection string would be:

"Server=250.65.43.21,4734; Failover_Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"  

Algorithme de délai entre deux tentatives de connexion (pour les connexions TCP/IP) Connection Retry Algorithm (for TCP/IP Connections)

Pour une connexion TCP/IP, lorsque les noms des deux partenaires sont dans le cache, le fournisseur d'accès aux données se conforme à un algorithme de délai entre deux tentatives de connexion.For a TCP/IP connection, when both partner names are in the cache, the data access provider adheres to a connection retry algorithm. Ceci s'applique lors de l'établissement de la connexion initiale à la session et lors de la reconnexion lorsqu'une connexion établie a été perdue.This is true both for making the initial connection to the session and for reconnecting after losing an established connection. Une fois qu'une connexion a été ouverte, la réalisation des opérations de préouverture et d'ouverture de session prend du temps.Once a connection has been opened, completing the pre-login and login steps takes additional time.

Note

Le temps consacré à l'établissement d'une connexion peut être supérieur au délai alloué entre deux tentatives en raison de facteurs externes, tels que les recherches DNS, un centre de distribution de clés de contrôleur de domaine/Kerberos lent, le temps consacré à contacter le service SQL Server Browser, un encombrement sur le réseau, etc.The time spent in opening a connection can exceed the retry time because of external factors, such as slow DNS lookups, slow domain controller/Kerberos Key Distribution Center (KDC), time spent contacting SQL Server Browser, network congestion, and so forth. Ces facteurs externes peuvent empêcher un client de se connecter à une base de données mise en miroir.Such external factors can prevent a client from connecting to a mirrored database. L'ouverture d'une connexion peut également être plus longue que le délai prévu entre deux tentatives en raison de facteurs externes.Also, external factors can cause a connection to take longer to open than the allotted retry time. Pour plus d'informations sur le contournement de DNS et du service SQL Server Browser afin de tenter d'établir une connexion au partenaire initial, consultez Établissement de la connexion initiale à une session de mise en miroir de bases de données, plus haut dans cette rubrique.For information on bypassing DNS and SQL Server Browser for connection attempt to the initial partner, see Making the Initial Connection to a Database Mirroring Session, earlier in this topic.

Si une tentative de connexion échoue ou si le délai entre deux tentatives expire avant que la connexion n'ait été établie, le fournisseur d'accès aux données se tourne vers l'autre partenaire.If a connection attempt fails or the retry time expires before it succeeds, the data access provider tries the other partner. Si une connexion n'est pas ouverte à ce stade, le fournisseur tente alors d'utiliser le nom du partenaire initial et celui du partenaire de basculement, jusqu'à ce qu'une connexion ait été ouverte ou que le délai de connexion ait expiré. Par défaut, le délai d'expiration de connexion est de 15 secondes.If a connection is not opened by this point, the provider alternately tries the initial and failover partner names, until a connection is opened or the login period times out. The default login time-out period is 15 seconds. Nous vous conseillons d'utiliser un délai d'expiration de connexion d'au moins 5 secondes.We recommend that the login time-out period be at least 5 seconds. Si vous spécifiez un délai d'expiration plus court, il est possible que toutes les tentatives de connexion échouent.Specifying a smaller time-out period might prevent any of the connection attempts from succeeding.

Le délai entre deux tentatives correspond à un pourcentage du délai de connexion.The retry time is a percentage of the login period. Le délai entre deux tentatives de connexion augmente lors de chaque essai successif.The retry time for a connection attempt is larger in each successive round. Lors du premier essai, le délai entre deux tentatives correspond à 8 % du délai de connexion total.In the first round, the retry time for each of the two attempts is 8 percent of the total login period. Lors de chaque essai qui suit, l'algorithme de délai entre deux tentatives augmente la durée maximale accordée en fonction de cette même valeur.In each successive round, the retry algorithm increases the maximum retry time by the same amount. Par conséquent, les valeurs de délai entre les huit premières tentatives de connexion sont les suivantes :Thus, the retry times for the first eight connection attempts is as follows:

8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%

Le délai entre deux tentatives est calculé au moyen de la formule suivante :The retry time is calculated using the following formula:

RetryTime = PreviousRetryTime +( 0.08 \LoginTimeout)RetryTime* = PreviousRetryTime +( 0.08 \LoginTimeout)*

PreviousRetryTime a la valeur 0 au départ.Where PreviousRetryTime is initially 0.

Par exemple, si vous utilisez le délai d’expiration de connexion par défaut de 15 secondes, LoginTimeout = 15.For example, if using the default login time-out period of 15 seconds, LoginTimeout = 15. Dans ce cas, les délais entre deux tentatives alloués lors des trois premiers essais sont les suivants :In this case, the retry times allotted in the first three rounds are as follows:

ArrondiRound Calcul deRetryTime RetryTime calculation Délai entre chaque tentativeRetry time per attempt
11 0 +(0,08 \* 15)0 +(0.08 \* 15) 1,2 secondes1.2 seconds
22 1,2 +(0,08 \* 15)1.2 +(0.08 \* 15) 2,4 secondes2.4 seconds
33 2,4 +(0,08 \* 15)2.4 +(0.08 \* 15) 3,6 secondes3.6 seconds
44 3,6 +(0,08 \* 15)3.6 +(0.08 \* 15) 4,8 secondes4.8 seconds

Le tableau suivant illustre ces délais pour les tentatives de connexion successives, lesquelles excèdent toutes le délai d'expiration.The following figure illustrates these retry times for successive connection attempts, each of which times out.

Délai maximal de reprise pour un délai de connexion de 15 secondesMaximum retry delays for 15 second login timeout

Pour le délai d'expiration de connexion par défaut, la durée maximale allouée aux trois premières tentatives de connexion est de 14,4 secondes.For the default login time-out period, the maximum time allotted to the first three rounds of connection attempts is 14.4 seconds. Si chaque tentative venait à utiliser la totalité du temps qui lui est alloué, il ne resterait alors que 0,6 secondes avant l'expiration du délai de connexion. Dans ce cas, la quatrième tentative serait écourtée et permettrait uniquement une dernière tentative de connexion rapide à l'aide du nom du partenaire initial.If every attempt were to use all of its allotted time, only 0.6 seconds of time would remain before the login period times out. In that case, the fourth round would be curtailed, allowing only a final quick attempt to connect using the initial partner name. Cependant, une tentative de connexion peut échouer avant le délai autorisé, surtout lors des tentatives ultérieures.However, a connection attempt may fail in less than its allotted retry time, particularly in later rounds. Par exemple, la réception d'une erreur réseau peut entraîner l'arrêt d'une tentative avant l'expiration du délai entre deux tentatives.For example, receiving a network error can cause an attempt to end before the retry time expires. Si les premières tentatives échouent en raison d'une erreur réseau, un délai supplémentaire est alors disponible pour la quatrième tentative, et éventuellement, pour des tentatives supplémentaires.If earlier attempts fail due to a network error, additional time would be available for the fourth round and, perhaps, additional rounds.

L'échec d'une tentative de connexion peut également être lié à une instance de serveur inactive, comme dans les cas de figure où une instance de serveur procède au basculement de sa base de données.Another cause of a failed attempt is an inactive server instance, as occurs when a server instance is engaged in failing over its database. Dans ce cas, un délai entre deux tentatives est imposé pour empêcher que les clients surchargent les partenaires de tentatives de connexion à répétition.In this case, a retry delay is imposed to prevent clients from overloading the partners with a rapid succession of connection attempts.

Note

Lorsque les noms des deux partenaires sont disponibles, si le délai d'expiration de connexion est illimité, le client tente de se reconnecter indéfiniment aux serveurs, en alternant entre le nom du partenaire initial et le nom du partenaire de basculement.When both partner names are available, if the login time-out period is infinite, the client attempts to reconnect to the servers indefinitely, alternating between the initial partner name and the failover partner name.

Délais entre deux tentatives lors d'un basculementRetry Delays During Failover

Si un client tente de se connecter à un partenaire qui fait l'objet d'un basculement, le partenaire répond immédiatement qu'il est inactif.If a client attempts to connect to a partner that is failing over, the partner immediately responds that it is inactive. Dans ce cas, chaque nouvelle tentative de connexion est beaucoup plus brève que le délai imparti entre deux tentatives.In this case, each round of connection attempts are much briefer than the allotted retry time. Ceci signifie que de nombreux essais de connexion peuvent survenir avant l'expiration du délai de connexion. Pour éviter que les partenaires ne soient surchargés par une série rapide de tentatives de connexion lors d'un basculement, le fournisseur d'accès aux données ajoute un délai court entre deux tentatives après chaque cycle.This means that many rounds of connection attempts could happen before the login period times out. To avoid overloading the partners with a rapid series of connection attempts during a failover, the data access provider adds a brief retry delay after each retry cycle. La durée d'un délai entre deux tentatives est déterminée par l'algorithme de délai entre deux tentatives.The length of a given retry delay is determined by the retry-delay algorithm. Après le premier essai, le délai est de 100 millisecondes.After the first round, the delay is 100 milliseconds. Après chacun des trois essais suivants, le délai entre deux tentatives est multiplié par deux : 200, 400 et 800.After each of the next three rounds, the retry delay doubles—to 200, 400, and 800. Pour tous les essais ultérieurs, le délai entre deux tentatives est de 1 seconde tant que la tentative de connexion n'a pas réussi ou que le délai n'a pas expiré.For all later rounds, the retry delay is 1 second until the connection attempt succeeds or times out.

Note

Si l'instance de serveur n'est pas arrêtée, la demande de connexion échoue immédiatement.If the server instance is stopped, then the connection request fails immediately.

Le tableau suivant illustre l'incidence du délai entre deux tentatives de connexion lors d'un basculement manuel dans lequel les partenaires intervertissent leur rôle.The following figure illustrates how the retry delay affects connection attempts during a manual failover, in which the partners switch their roles. Le délai d'expiration de connexion est de 15 secondes.The login time-out period is 15 seconds.

Algorithme de délai entre reprisesRetry-delay algorithm

Reconnexion à une session de mise en miroir de bases de données Reconnecting to a Database Mirroring Session

Si une connexion établie à une session de mise en miroir de bases de données échoue pour une raison quelconque, par exemple suite au basculement de mise en miroir de bases de données, et que l'application tente de se reconnecter au serveur initial, le fournisseur d'accès aux données peut essayer de se reconnecter à l'aide du nom du partenaire de basculement stocké dans le cache du client.If an established connection to a database mirroring session fails for any reason, for example, due to a database mirroring failover, and the application attempts to reconnect to the initial server, the data access provider can attempt to reconnect using the failover partner name stored in the client's cache. La reconnexion n'est cependant pas automatique.Reconnecting is not automatic, however. L'application doit avoir connaissance de l'erreur.The application must become aware of the error. Ensuite, elle doit fermer la connexion qui a échoué et en ouvrir une nouvelle à l'aide des mêmes attributs de chaîne de connexion.Then, the application needs to close the failed connection and open a new connection using the same connection string attributes. À ce stade, le fournisseur d'accès aux données redirige la connexion vers le partenaire de basculement.At this point, the data access provider redirects the connection to the failover partner. Si l'instance de serveur identifiée par ce nom est actuellement le serveur principal, la tentative de connexion réussit en général.If the server instance identified by this name is currently the principal server, the connection attempt usually succeeds. S'il est incertain si une transaction a été validée ou restaurée, l'application doit vérifier son état, de la même façon que lors de la reconnexion à une instance de serveur autonome.If it is unclear whether a transaction was committed or rolled back, the application must check on the state of the transaction, in the same way as when reconnecting to a stand-alone server instance.

La reconnexion s'apparente à une connexion initiale pour laquelle la chaîne de connexion a fourni un nom de partenaire de basculement.Reconnecting resembles an initial connection for which the connection string supplied a failover partner name. Si la première tentative de connexion échoue, les tentatives de connexion alternent entre le nom du partenaire initial et le nom du partenaire de basculement jusqu'à ce que le client se connecte au serveur principal ou que le délai d'attente du fournisseur d'accès aux données soit atteint.If the first connection attempt fails, connection attempts alternate back and forth between the initial partner name and failover partner name until either the client connects to the principal server or the data access provider times out.

Note

SQL ServerSQL Server Native Client vérifie qu’il se connecte à une instance de serveur principal, mais ne vérifie pas si cette instance est le serveur partenaire de l’instance de serveur spécifiée dans le nom de serveur partenaire initial de la chaîne de connexion. Native Client verifies that it connects to a principal server instance but not whether this instance is the partner of server instance specified in the initial partner name of the connection string.

Si les connexions utilisent TCP/IP, l'algorithme de délai entre deux tentatives de connexion détermine la durée allouée aux tentatives de connexion à chaque cycle.If the connections use TCP/IP, the connection retry algorithm determines the amount of time allotted to the connection attempts in each round.

Important

Si le client se retrouve déconnecté de la base de données, le fournisseur d'accès aux données n'essaie pas de se reconnecter.If the client gets disconnected from the database, the data access provider does not attempt to reconnect. Le client doit faire une nouvelle demande de connexion.The client must issue a new connection request. De plus, si une application s'arrête suite à la perte de la connexion, elle perd les noms de partenaire mis en cache.Also, if an application shuts down on losing the connection, it will lose the cached partner names. Si la perte de la connexion est due à l'indisponibilité soudaine du serveur principal, la seule solution pour l'application de se reconnecter au serveur miroir consiste à fournir le nom du partenaire de basculement dans sa chaîne de connexion.If the connection was lost because the principal server became unavailable, the only way that the application can reconnect to the mirror server is by supplying the failover partner name in its connection string.

Impact de la redirection sur une application clienteImpact of Redirection on a Client Application

Après un basculement, le fournisseur d'accès aux données redirige la connexion vers l'instance de serveur principal actuelle.After a failover, the data access provider redirects the connection to the current principal server instance. La redirection est cependant transparente pour les clients.However, the redirection is transparent to clients. Pour un client, une connexion redirigée semble être une connexion à l'instance de serveur identifiée par le nom de partenaire initial.To a client, a redirected connection appears to be a connection to the server instance identified by the initial partner name. Lorsque le partenaire initial est actuellement le serveur miroir, le client peut sembler être connecté au serveur miroir et mettre à jour la base de données miroir.When the initial partner is currently the mirror server, the client can appear to be connected to the mirror server and updating the mirror database. En réalité, le client a été redirigé vers le partenaire de basculement (qui est la base de données principale actuelle) et il met à jour la nouvelle base de données principale.Actually, however, the client has been redirected to the failover partner, which is the current principal database, and the client is updating the new principal database.

Après avoir été redirigé vers le partenaire de basculement, un client peut rencontrer des résultats inattendus lors de l'utilisation d'une instruction Transact-SQLTransact-SQL USE pour utiliser une base de données différente.After being redirected to the failover partner, a client can experience unexpected results when using a Transact-SQLTransact-SQL USE statement to use a different database. Cela peut se produire si l'instance de serveur principal actuelle (le partenaire de basculement) possède un ensemble de bases de données différent du serveur principal d'origine (le partenaire initial).This can happen if the current principal server instance (the failover partner) has a different set of databases than the original principal server (the initial partner).

Impact d'un nom de partenaire de basculement obsolète The Impact of a Stale Failover Partner Name

L'administrateur de base de données peut modifier le partenaire de basculement à tout moment.The database administrator can change the failover partner at any time. C’est pourquoi un nom de partenaire de basculement fourni par le client peut être périmé ou obsolète.Therefore, a client-supplied failover partner name might be out of date, or stale. Prenons par exemple un partenaire de basculement nommé Partner_B qui est remplacé par une autre instance de serveur nommée Partner_C.For example, consider a failover partner named Partner_B that is replaced by another server instance, Partner_C. Si un client fournit Partner_B comme nom de partenaire de basculement, ce nom est obsolète.Now, if a client supplies Partner_B as the failover partner name, that name is stale. Quand le nom du partenaire de basculement fourni par le client est obsolète, le comportement du fournisseur d'accès aux données est identique à celui adopté lorsque le nom du partenaire de basculement n'est pas fourni par le client.When the client-supplied failover partner name is stale, the behavior of the data access provider equates to the case in which a failover partner name is not supplied by the client.

Par exemple, imaginons une situation dans laquelle un client utilise une chaîne de connexion unique pour une série de quatre tentatives de connexion.For example, consider situation in which a client uses one connection string for a series of four connection attempts. Dans la chaîne de connexion, le nom du serveur partenaire initial est Partner_A et le nom du partenaire de basculement est Partner_B :In the connection string, the initial partner name is Partner_A, and the failover partner name is Partner_B:

"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks"  

Le tableau suivant représente quatre configurations de partenaire et indique pour chacune d'entre elles si la chaîne de connexion permet ou non de connecter le client la première fois.The following table shows four partner configurations and indicates for each whether this connection string works for connecting the client for the first time.

Note

Une application peut assurer le suivi des modifications de configuration et modifier sa chaîne de connexion en conséquence.An application can track configuration changes and change its connection string accordingly. Cela demande d'ajouter du code supplémentaire mais réduit la charge administrative.This requires extra code but reduces the administrative burden.

ConfigurationConfiguration Serveur principalPrincipal server Serveur miroirMirror server Comportement lors de la tentative de connexion en spécifiant Partner_A et Partner_BBehavior when attempting to connect specifying Partner_A and Partner_B
Configuration de la mise en miroir de départ.Original mirroring configuration. Partner_APartner_A Partner_BPartner_B Partner_A est mis en cache en tant que nom du partenaire initial.Partner_A is cached as the initial partner name. Le client réussit à se connecter à Partner_A.The client succeeds in connecting to Partner_A. Le client télécharge le nom du serveur miroir, Partner_B, et le met en cache en ignorant le nom du partenaire de basculement fourni par le client.The client downloads the name of mirror server, Partner_B, and caches it, ignoring the client-supplied failover partner name.
Partner_A subit une défaillance matérielle et un basculement a lieu (suivi d'une déconnexion des clients).Partner_A experiences a hardware failure, and failover occurs (disconnecting clients). Partner_BPartner_B aucunnone Partner_A est toujours mis en cache comme nom de partenaire initial, mais le nom de partenaire de basculement fourni par le client, Partner_B, permet au client de se connecter au serveur principal actuel.The Partner_A is still cached as the initial partner name, but the client-supplied failover partner name, Partner_B, permits the client to connect to the current principal server.
L'administrateur de base de données arrête la mise en miroir (et déconnecte les clients), remplace Partner_A par Partner_C et redémarre la mise en miroir.The database administrator stops mirroring (disconnecting clients), replaces Partner_A with Partner_C, and restarts mirroring. Partner_BPartner_B Partner_CPartner_C Le client essaie de se connecter à Partner_A sans succès. Ensuite, il essaie avec Partner_B (le serveur principal actuel) et sa tentative aboutit.The client attempts to connect to Partner_A and fails; then the client tries Partner_B (the current principal server) and succeeds. Le fournisseur d'accès aux données télécharge le nom du serveur miroir actuel, Partner_C, et le met en cache comme nom de partenaire de basculement.The data access provider downloads the name of the current mirror server, Partner_C, and caches it as the current failover partner name.
Le service est manuellement basculé vers Partner_C (déconnexion des clients).Service is manually failed over to Partner_C (disconnecting clients). Partner_CPartner_C Partner_BPartner_B Le client tente tout d'abord de se connecter à Partner_A, puis à Partner_B.Client attempts to connect to Partner_A initially, and then to Partner_B. Ces deux noms échouent et la demande de connexion finit par expirer et par échouer.Both names fail, and eventually the connection request times out and fails.

Voir aussiSee Also

Mise en miroir de bases de données (SQL Server) Database Mirroring (SQL Server)
Défaillances possibles pendant la mise en miroir d’une base de donnéesPossible Failures During Database Mirroring