Prise en charge de SqlClient pour la haute disponibilité et la récupération d'urgenceSqlClient Support for High Availability, Disaster Recovery

Cette rubrique décrit la prise en charge de SqlClient (ajoutée dans .NET Framework 4.5) haute disponibilité et récupération d’urgence--groupes de disponibilité AlwaysOn.This topic discusses SqlClient support (added in .NET Framework 4.5) for high-availability, disaster recovery -- AlwaysOn Availability Groups. Fonctionnalité de groupes de disponibilité AlwaysOn a été ajoutée à SQL Server 2012.AlwaysOn Availability Groups feature was added to SQL Server 2012. Pour plus d’informations sur les groupes de disponibilité AlwaysOn, consultez la documentation en ligne de SQL Server.For more information about AlwaysOn Availability Groups, see SQL Server Books Online.

Vous pouvez désormais spécifier l’écouteur de groupe de disponibilité d’une (haute disponibilité et récupération d’urgence) groupe de disponibilité (AG) ou l’Instance de Cluster de basculement SQL Server 2012 dans la propriété de connexion.You can now specify the availability group listener of a (high-availability, disaster-recovery) availability group (AG) or SQL Server 2012 Failover Cluster Instance in the connection property. Si une application SqlClient est connectée à une base de données AlwaysOn qui bascule, la connexion initiale est interrompue et l'application doit ouvrir une nouvelle connexion pour continuer les tâches après le basculement.If a SqlClient application is connected to an AlwaysOn database that fails over, the original connection is broken and the application must open a new connection to continue work after the failover.

Si vous n’êtes pas connecté à un écouteur de groupe de disponibilité ou d’une Instance de Cluster de basculement SQL Server 2012, et si plusieurs adresses IP sont associées à un nom d’hôte, SqlClient sera itérer séquentiellement toutes les adresses IP associées avec l’entrée DNS.If you are not connecting to an availability group listener or SQL Server 2012 Failover Cluster Instance, and if multiple IP addresses are associated with a hostname, SqlClient will iterate sequentially through all IP addresses associated with DNS entry. Cela peut prendre du temps si la première adresse IP retournée par le serveur DNS n'est liée à aucune carte d'interface réseau.This can be time consuming if the first IP address returned by DNS server is not bound to any network interface card (NIC). Lors de la connexion à un écouteur de groupe de disponibilité ou d’une Instance de Cluster de basculement SQL Server 2012, SqlClient tente d’établir des connexions à toutes les adresses IP en parallèle et si une tentative de connexion réussit, le pilote ignore toute connexion en attente tentatives.When connecting to an availability group listener or SQL Server 2012 Failover Cluster Instance, SqlClient attempts to establish connections to all IP addresses in parallel and if a connection attempt succeeds, the driver will discard any pending connection attempts.

Notes

L'augmentation du délai de connexion et l'implémentation de la logique de nouvelles tentatives de connexion augmentent la probabilité qu'une application se connecte à un groupe de disponibilité.Increasing connection timeout and implementing connection retry logic will increase the probability that an application will connect to an availability group. En outre, étant donné qu'une connexion peut échouer en raison d'un basculement, vous devez implémenter la logique pour les nouvelles tentatives de connexion, nouvelle tentative de connexion jusqu'à reconnexion.Also, because a connection can fail because of a failover, you should implement connection retry logic, retrying a failed connection until it reconnects.

Les propriétés de connexion suivantes ont été ajoutées à SqlClient dans .NET Framework 4.5 :The following connection properties were added to SqlClient in .NET Framework 4.5:

  • ApplicationIntent

  • MultiSubnetFailover

Vous pouvez modifier par programmation ces mots clés de chaîne de connexion avec :You can programmatically modify these connection string keywords with:

  1. ApplicationIntent

  2. MultiSubnetFailover

Notes

Paramètre MultiSubnetFailover à true n’est pas nécessaire avec .NET Framework 4.6.1 ou version ultérieure.Setting MultiSubnetFailover to true isn't required with .NET Framework 4.6.1 or later versions.

Connexion avec MultiSubnetFailoverConnecting With MultiSubnetFailover

Spécifiez toujours MultiSubnetFailover=True lors de la connexion à un écouteur de groupe de disponibilité de SQL Server 2012 ou une Instance de Cluster de basculement SQL Server 2012.Always specify MultiSubnetFailover=True when connecting to a SQL Server 2012 availability group listener or SQL Server 2012 Failover Cluster Instance. MultiSubnetFailover permet un basculement plus rapide pour tous les groupes de disponibilité et ou Instance de Cluster de basculement dans SQL Server 2012 et réduire considérablement le temps de basculement pour les topologies AlwaysOn de sous-réseaux uniques et multiples.MultiSubnetFailover enables faster failover for all Availability Groups and or Failover Cluster Instance in SQL Server 2012 and will significantly reduce failover time for single and multi-subnet AlwaysOn topologies. Pendant un basculement de multi sous-réseau, le client effectue des tentatives de connexion en parallèle.During a multi-subnet failover, the client will attempt connections in parallel. Pendant un basculement de sous-réseau, le client effectue des tentatives de connexion TCP de manière agressive.During a subnet failover, will aggressively retry the TCP connection.

Le MultiSubnetFailover propriété de connexion indique que l’application est déployée dans un groupe de disponibilité ou d’une Instance de Cluster de basculement SQL Server 2012 et que SqlClient tente de se connecter à la base de données sur l’instance de SQL Server principale en essayant de se connecter à toutes les adresses IP.The MultiSubnetFailover connection property indicates that the application is being deployed in an availability group or SQL Server 2012 Failover Cluster Instance and that SqlClient will try to connect to the database on the primary SQL Server instance by trying to connect to all the IP addresses. Lorsque MultiSubnetFailover=True est spécifié pour une connexion, le client effectue des tentatives de connexion TCP plus rapidement que les intervalles de retransmission TCP par défaut du système d'exploitation.When MultiSubnetFailover=True is specified for a connection, the client retries TCP connection attempts faster than the operating system’s default TCP retransmit intervals. Cela permet une reconnexion plus rapide après basculement d'un groupe de disponibilité AlwaysOn ou d'une instance de cluster de basculement AlwaysOn, et s'applique aux groupes de disponibilité de sous-réseau unique et de multi-sous-réseau et aux instances de cluster de basculement.This enables faster reconnection after failover of either an AlwaysOn Availability Group or an AlwaysOn Failover Cluster Instance, and is applicable to both single- and multi-subnet Availability Groups and Failover Cluster Instances.

Pour plus d'informations sur les mots clés de chaîne de connexion dans SqlClient, consultez ConnectionString.For more information about connection string keywords in SqlClient, see ConnectionString.

Spécification MultiSubnetFailover=True lorsque la connexion à un élément autre qu’un écouteur du groupe de disponibilité ou d’une Instance de Cluster de basculement SQL Server 2012 peut entraîner un impact sur les performances et n’est pas pris en charge.Specifying MultiSubnetFailover=True when connecting to something other than a availability group listener or SQL Server 2012 Failover Cluster Instance may result in a negative performance impact, and is not supported.

Utilisez les instructions suivantes pour vous connecter à un serveur dans un groupe de disponibilité ou Instance de Cluster de basculement SQL Server 2012 :Use the following guidelines to connect to a server in an availability group or SQL Server 2012 Failover Cluster Instance:

  • Utilisez la propriété de connexion MultiSubnetFailover lors de la connexion à un sous-réseau unique ou à un multi-sous-réseau ; elle permet d'améliorer les performances pour les deux.Use the MultiSubnetFailover connection property when connecting to a single subnet or multi-subnet; it will improve performance for both.

  • Pour vous connecter à un groupe de disponibilité, spécifiez l'écouteur du groupe de disponibilité en tant que serveur dans votre chaîne de connexion.To connect to an availability group, specify the availability group listener of the availability group as the server in your connection string.

  • Connexion à un serveur SQL Server instance configurée avec plus de 64 adresses IP entraînera un échec de connexion.Connecting to a SQL Server instance configured with more than 64 IP addresses will cause a connection failure.

  • Comportement d’une application qui utilise le MultiSubnetFailover propriété de connexion n’est pas affectée selon le type d’authentification : L’authentification SQL Server, l’authentification Kerberos ou l’authentification Windows.Behavior of an application that uses the MultiSubnetFailover connection property is not affected based on the type of authentication: SQL Server Authentication, Kerberos Authentication, or Windows Authentication.

  • Augmentez la valeur de Connect Timeout pour permettre la prise en charge pour le temps de basculement et réduire les tentatives de nouvelle connexion d'application.Increase the value of Connect Timeout to accommodate for failover time and reduce application connection retry attempts.

  • Les transactions distribuées ne sont pas prises en charge.Distributed transactions are not supported.

Si le routage en lecture seule n'est pas appliqué, la connexion à un emplacement de réplica secondaire échoue dans les situations suivantes :If read-only routing is not in effect, connecting to a secondary replica location will fail in the following situations:

  1. Si l'emplacement de réplica secondaire n'est pas configuré pour recevoir des connexions.If the secondary replica location is not configured to accept connections.

  2. Si une application utilise ApplicationIntent=ReadWrite (voir ci-dessous) et l'emplacement de réplica secondaire est configuré pour l'accès en lecture seule.If an application uses ApplicationIntent=ReadWrite (discussed below) and the secondary replica location is configured for read-only access.

SqlDependency n'est pas pris en charge sur des réplicas secondaires en lecture seule.SqlDependency is not supported on read-only secondary replicas.

Une connexion échoue si un réplica principal est configuré pour rejeter les charges de travail en lecture seule et la chaîne de connexion contient ApplicationIntent=ReadOnly.A connection will fail if a primary replica is configured to reject read-only workloads and the connection string contains ApplicationIntent=ReadOnly.

Mise à niveau pour utiliser des clusters de multi-sous-réseaux de mise en miroir de bases de donnéesUpgrading to Use Multi-Subnet Clusters from Database Mirroring

Une erreur de connexion (ArgumentException) se produira si les mots clés de connexion MultiSubnetFailover et Failover Partner sont présents dans la chaîne de connexion, ou si MultiSubnetFailover=True et un protocole autre que TCP est utilisé.A connection error (ArgumentException) will occur if the MultiSubnetFailover and Failover Partner connection keywords are present in the connection string, or if MultiSubnetFailover=True and a protocol other than TCP is used. Une erreur (SqlException) se produit également si MultiSubnetFailover est utilisé et le serveur SQL Server retourne une réponse de partenaire de basculement indiquant qu’il fait partie d’une paire de mise en miroir de base de données.An error (SqlException) will also occur if MultiSubnetFailover is used and the SQL Server returns a failover partner response indicating it is part of a database mirroring pair.

Si vous mettez à niveau une application SqlClient qui utilise actuellement la mise en miroir de bases de données dans un scénario de multi-sous-réseau, vous devez supprimer la propriété de connexion Failover Partner et la remplacer par MultiSubnetFailover ayant la valeur True et remplacer le nom du serveur dans la chaîne de connexion par un écouteur du groupe de disponibilité.If you upgrade a SqlClient application that currently uses database mirroring to a multi-subnet scenario, you should remove the Failover Partner connection property and replace it with MultiSubnetFailover set to True and replace the server name in the connection string with an availability group listener. Si une chaîne de connexion utilise Failover Partner et MultiSubnetFailover=True, le pilote génère une erreur.If a connection string uses Failover Partner and MultiSubnetFailover=True, the driver will generate an error. Toutefois, si une chaîne de connexion utilise Failover Partner et MultiSubnetFailover=False (ou ApplicationIntent=ReadWrite), l'application utilise la mise en miroir de bases de données.However, if a connection string uses Failover Partner and MultiSubnetFailover=False (or ApplicationIntent=ReadWrite), the application will use database mirroring.

Le pilote retourne une erreur si la mise en miroir de bases de données est utilisée dans la base de données principale du groupe de disponibilité, et si MultiSubnetFailover=True est utilisé dans la chaîne de connexion qui se connecte à une base de données principale plutôt qu'à un écouteur du groupe de disponibilité.The driver will return an error if database mirroring is used on the primary database in the AG, and if MultiSubnetFailover=True is used in the connection string that connects to a primary database instead of to an availability group listener.

Spécification de l'intention d'applicationSpecifying Application Intent

Lorsque ApplicationIntent=ReadOnly, le client demande une charge de travail de lecture lors de la connexion à une base de données AlwaysOn.When ApplicationIntent=ReadOnly, the client requests a read workload when connecting to an AlwaysOn enabled database. Le serveur applique l'intention au moment de la connexion et pendant une instruction de base de données USE, mais uniquement à une base de données AlwaysOn.The server will enforce the intent at connection time and during a USE database statement but only to an Always On enabled database.

Le mot clé ApplicationIntent ne fonctionne pas avec les bases de données en lecture seule héritées.The ApplicationIntent keyword does not work with legacy, read-only databases.

Une base de données peut autoriser ou interdire les charges de travail de lecture sur la base de données ciblée AlwaysOn.A database can allow or disallow read workloads on the targeted AlwaysOn database. (Cette opération est effectuée avec la ALLOW_CONNECTIONS clause de le PRIMARY_ROLE et SECONDARY_ROLEinstructions Transact-SQL.)(This is done with the ALLOW_CONNECTIONS clause of the PRIMARY_ROLE and SECONDARY_ROLETransact-SQL statements.)

Le mot clé ApplicationIntent est utilisé pour permettre le routage en lecture seule.The ApplicationIntent keyword is used to enable read-only routing.

Routage en lecture seuleRead-Only Routing

Le routage en lecture seule est une fonctionnalité qui garantit la disponibilité d'un réplica en lecture seule d'une base de données.Read-only routing is a feature that can ensure the availability of a read only replica of a database. Pour activer le routage en lecture seule :To enable read-only routing:

  1. Vous devez vous connecter à un écouteur du groupe de disponibilité Groupe de disponibilité AlwaysOn.You must connect to an Always On Availability Group availability group listener.

  2. Le mot clé de chaîne de connexion ApplicationIntent doit avoir la valeur ReadOnly.The ApplicationIntent connection string keyword must be set to ReadOnly.

  3. Le groupe de disponibilité doit être configuré par l'administrateur de base de données pour permettre le routage en lecture seule.The Availability Group must be configured by the database administrator to enable read-only routing.

Il est possible que plusieurs connexions utilisant le routage en lecture seule ne se connectent pas au même réplica en lecture seule.It is possible that multiple connections using read-only routing will not all connect to the same read-only replica. Les modifications de la synchronisation de base de données ou les modifications de la configuration du routage du serveur peuvent entraîner des connexions clientes à des réplicas en lecture seule.Changes in database synchronization or changes in the server's routing configuration can result in client connections to different read-only replicas. Pour vous assurer que toutes les demandes en lecture seule se connectent au même réplica en lecture seule, ne passez pas un écouteur du groupe de disponibilité au mot clé de chaîne de connexion Data Source.To ensure that all read-only requests connect to the same read-only replica, do not pass an availability group listener to the Data Source connection string keyword. À la place, spécifiez le nom de l'instance en lecture seule.Instead, specify the name of the read-only instance.

Le routage en lecture seule peut prendre plus longtemps que la connexion au principal, car il se connecte d'abord au principal, puis recherche le meilleur réplica secondaire lisible disponible.Read-only routing may take longer than connecting to the primary because read only routing first connects to the primary and then looks for the best available readable secondary. De ce fait, vous devez augmenter le délai d'attente de connexion.Because of this, you should increase your login timeout.

Voir aussiSee also