Prise en charge des fonctionnalités de récupération d'urgence, haute disponibilité par SQL Server Native ClientSQL Server Native Client Support for High Availability, Disaster Recovery

Cette rubrique s’applique à : OuiSQL ServerOuibase de données SQL AzureOuiAzure SQL Data Warehouse Oui Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Cette rubrique décrit la prise en charge de SQL ServerSQL Server Native Client (ajouté dans SQL Server 2012SQL Server 2012) pour Groupes de disponibilité Always OnAlways On availability groups.This topic discusses SQL ServerSQL Server Native Client support (added in SQL Server 2012SQL Server 2012) for Groupes de disponibilité Always OnAlways On availability groups. Pour plus d’informations sur Groupes de disponibilité Always OnAlways On availability groups, consultez Écouteurs de groupe de disponibilité, connectivité client et basculement d’application (SQL Server), Création et configuration des groupes de disponibilité (SQL Server), Clustering de basculement et groupes de disponibilité AlwaysOn (SQL Server), et Secondaires actifs : réplicas secondaires lisibles actifs (groupes de disponibilité AlwaysOn).For more information about Groupes de disponibilité Always OnAlways On availability groups, see Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server), Creation and Configuration of Availability Groups (SQL Server), Failover Clustering and AlwaysOn Availability Groups (SQL Server), and Active Secondaries: Readable Secondary Replicas (AlwaysOn Availability Groups).

Vous pouvez spécifier l’écouteur d’un groupe de disponibilité donné dans la chaîne de connexion.You can specify the availability group listener of a given availability group in the connection string. Si une application SQL ServerSQL Server Native Client est connectée à une base de données dans un groupe de disponibilité qui bascule, la connexion d'origine est rompue et l'application doit ouvrir une nouvelle connexion pour reprendre le travail après le basculement.If a SQL ServerSQL Server Native Client application is connected to a database in an availability group that fails over, the original connection is broken, and the application must open a new connection to continue work after the failover.

Si vous ne vous connectez pas à un écouteur du groupe de disponibilité et si plusieurs adresses IP sont associées à un nom d'hôte, SQL ServerSQL Server Native Client effectue une itération de façon séquentielle parmi toutes les adresses IP associées à l'entrée DNS.If you are not connecting to an availability group listener, and if multiple IP addresses are associated with a hostname, SQL ServerSQL Server Native Client will iterate sequentially through all IP addresses associated with DNS entry. Cette opération 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 (NIC).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 du groupe de disponibilité, SQL ServerSQL Server Native Client tente d'établir des connexions à toutes les adresses IP en parallèle et, si une tentative de connexion réussit, le pilote ignore toutes les tentatives de connexion en attente.When connecting to an availability group listener, SQL ServerSQL Server Native Client attempts to establish connections to all IP addresses in parallel and if a connection attempt succeeds, the driver will discard any pending connection attempts.

Note

L'augmentation du délai de connexion et l'implémentation de la logique de tentative de connexion augmente 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 raison du risque d'échec de connexion en cas de basculement d'un groupe de disponibilité, il est également nécessaire d'implémenter la logique de déclenchement de nouvelles tentatives de connexion, afin de multiplier les tentatives jusqu'à ce qu'une connexion soit établie.Also, because a connection can fail because of an availability group failover, you should implement connection retry logic, retrying a failed connection until it reconnects.

Connexion à MultiSubnetFailoverConnecting With MultiSubnetFailover

Spécifiez toujours MultiSubnetFailover=Yes lors de la connexion à un écouteur du groupe de disponibilité SQL Server 2012 ou à une instance de cluster de basculement SQL Server 2012.Always specify MultiSubnetFailover=Yes 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 de cluster de basculement de l’instance de SQL Server 2012 et réduisent considérablement le temps de basculement de sous-réseaux uniques et multiples Always On topologies.MultiSubnetFailover enables faster failover for all Availability Groups and failover cluster instance in SQL Server 2012 and will significantly reduce failover time for single and multi-subnet Always On topologies. Lors d'un basculement de sous-réseaux multiples, le client tente les connexions en parallèle.During a multi-subnet failover, the client will attempt connections in parallel. Lors d'un basculement de sous-réseau, SQL ServerSQL Server Native Client retente de façon intensive d'établir la connexion TCP.During a subnet failover, SQL ServerSQL Server Native Client will aggressively retry the TCP connection.

La propriété de connexion MultiSubnetFailover indique que l’application est déployée sur un groupe de disponibilité ou une instance de cluster de basculement et que SQL ServerSQL Server Native Client tente de se connecter à la base de données sur l’instance SQL ServerSQL Server principale en essayant toutes les adresses IP du groupe de disponibilité.The MultiSubnetFailover connection property indicates that the application is being deployed in an availability group or Failover Cluster Instance, and that SQL ServerSQL Server Native Client will try to connect to the database on the primary SQL ServerSQL Server instance by trying to connect to all the IP addresses. Quand MultiSubnetFailover=Yes est spécifié dans le cadre d’une connexion, le client retente d’établir une connexion TCP plus rapidement que les intervalles de retransmission TCP par défaut du système d’exploitation.When MultiSubnetFailover=Yes 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 le basculement d’un groupe de disponibilité AlwaysOn ou d’une toujours sur Instance Cluster de basculement et s’applique à la fois unique et à plusieurs sous-réseaux groupes de disponibilité et Instances de Cluster de basculement.This enables faster reconnection after failover of either an Always On Availability Group or an Always On 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, consultez Utilisation de mots clés de chaîne de connexion avec SQL Server Native Client.For more information about connection string keywords, see Using Connection String Keywords with SQL Server Native Client.

La spécification de MultiSubnetFailover=Yes quand la connexion n’est pas établie avec un écouteur de groupe de disponibilité ou une instance de cluster de basculement peut avoir un impact négatif sur les performances et n’est pas prise en charge.Specifying MultiSubnetFailover=Yes when connecting to something other than an availability group listener or Failover Cluster Instance may result in a negative performance impact, and is not supported.

Utilisez les instructions suivantes pour la connexion à un serveur dans un groupe de disponibilité ou dans une instance de cluster de basculement :Use the following guidelines to connect to a server in an availability group or Failover Cluster Instance:

  • Utilisez la propriété de connexionMultiSubnetFailover quand vous vous connectez à un sous-réseau unique ou à des sous-réseaux multiples pour améliorer leurs performances.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.

  • La connexion à une instance SQL ServerSQL Server configurée avec plus de 64 adresses IP provoque un échec de connexion.Connecting to a SQL ServerSQL Server instance configured with more than 64 IP addresses will cause a connection failure.

  • Le comportement d’une application qui utilise la propriété de connexion MultiSubnetFailover peut ne pas être affecté en fonction du type d’authentification : authentification SQL ServerSQL Server, authentification Kerberos ou authentification Windows.Behavior of an application that uses the MultiSubnetFailover connection property is not affected based on the type of authentication: SQL ServerSQL Server Authentication, Kerberos Authentication, or Windows Authentication.

  • Vous pouvez augmenter la valeur de loginTimeout pour tenir compte du temps de basculement et réduire les nouvelles tentatives de connexion de l’application.You can increase the value of loginTimeout 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 dans un groupe de disponibilité échoue dans les situations suivantes :If read-only routing is not in effect, connecting to a secondary replica location in an availability group will fail in the following situations:

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

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

    Une connexion échoue si un réplica principal est configuré pour rejeter des charges de travail en lecture seule et si 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 sous-réseaux multiples à partir de la mise en miroir de bases de donnéesUpgrading to Use Multi-Subnet Clusters from Database Mirroring

Une erreur de connexion se produit si les mots clés de connexion MultiSubnetFailover et Failover_Partner sont présents dans la chaîne de connexion.A connection error will occur if the MultiSubnetFailover and Failover_Partner connection keywords are present in the connection string. Une erreur se produit également si MultiSubnetFailover est utilisé et si SQL ServerSQL Server retourne une réponse de partenaire de basculement qui indique qu’il fait partie d’une paire de mise en miroir de bases de données.An error will also occur if MultiSubnetFailover is used and the SQL ServerSQL Server returns a failover partner response indicating it is part of a database mirroring pair.

Si vous mettez à niveau une application SQL ServerSQL Server Native Client qui utilise actuellement la mise en miroir de bases de données vers un scénario de sous-réseaux multiples, vous devez supprimer la propriété de connexion Failover_Partner et la remplacer par MultiSubnetFailover avec la valeur Yes et remplacer le nom du serveur dans la chaîne de connexion par un écouteur du groupe de disponibilité.If you upgrade a SQL ServerSQL Server Native Client 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 Yes 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=Yes, le pilote génère une erreur.If a connection string uses Failover_Partner and MultiSubnetFailover=Yes, the driver will generate an error. Toutefois, si une chaîne de connexion utilise Failover_Partner et MultiSubnetFailover=No (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=No (or ApplicationIntent=ReadWrite), the application will use database mirroring.

Le pilote retournera une erreur si la mise en miroir de bases de données est utilisée pour la base de données principale au sein du groupe de disponibilité, et si MultiSubnetFailover=Yes est utilisé dans la chaîne de connexion qui établit une connexion avec une base de données principale au lieu d’un écouteur de groupe de disponibilité.The driver will return an error if database mirroring is used on the primary database in the availability group, and if MultiSubnetFailover=Yes 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 un travail en lecture lors de la connexion à une base de données Always On est activé.When ApplicationIntent=ReadOnly, the client requests a read workload when connecting to an Always On enabled database. Le serveur applique l'intention au moment de la connexion et pendant une instruction de base de données USE mais uniquement sur une base de données prenant en charge 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 existantes.The ApplicationIntent keyword does not work with legacy, read-only databases.

Une base de données peut autoriser ou interdire les charges de travail en lecture sur la base de données AlwaysOn ciblée.A database can allow or disallow read workloads on the targeted Always On database. (Utilisez la clause ALLOW_CONNECTIONS des instructions PRIMARY_ROLE et SECONDARY_ROLE Transact-SQLTransact-SQL.)(This is done with the ALLOW_CONNECTIONS clause of the PRIMARY_ROLE and SECONDARY_ROLE Transact-SQLTransact-SQL statements.)

Le mot clé ApplicationIntent est utilisé pour activer 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 peut garantir 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é Always On.You must connect to an Always On Availability Group availability group listener.

  2. Dans la chaîne de connexion, le mot clé 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 activer 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 toutes 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 apportées à la synchronisation de base de données ou à la configuration du routage du serveur peuvent entraîner des connexions clientes à différents 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 vérifier que toutes les demandes en lecture seule se connectent au même réplica en lecture seule, ne transmettez pas d’écouteur du groupe de disponibilité au mot clé de chaîne de connexion Server.To ensure that all read-only requests connect to the same read-only replica, do not pass an availability group listener to the Server connection string keyword. Au lieu de cela, 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 de temps que la connexion au réplica primaire car le routage en lecture seule se connecte d'abord au réplica primaire, 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. Pour cette raison, vous devez augmenter le délai de connexion.Because of this, you should increase your login timeout.

ODBCODBC

Deux mots clés de chaîne de connexion ODBC ont été ajoutés pour prendre en charge Groupes de disponibilité Always OnAlways On availability groups dans SQL ServerSQL Server Native Client :Two ODBC connection string keywords were added to support Groupes de disponibilité Always OnAlways On availability groups in SQL ServerSQL Server Native Client:

  • ApplicationIntentApplicationIntent

  • MultiSubnetFailoverMultiSubnetFailover

    Pour plus d’informations sur les mots clés de chaîne de connexion ODBC dans SQL ServerSQL Server Native Client, consultez Utilisation de mots clés de chaîne de connexion avec SQL Server Native Client.For more information about ODBC connection string keywords in SQL ServerSQL Server Native Client, see Using Connection String Keywords with SQL Server Native Client.

    Les propriétés de connexion équivalentes sont :The equivalent connection properties are:

  • SQL_COPT_SS_APPLICATION_INTENTSQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVERSQL_COPT_SS_MULTISUBNET_FAILOVER

    Pour plus d’informations sur les propriétés de connexion ODBC dans SQL ServerSQL Server Native Client, consultez SQLSetConnectAttr.For more information about ODBC connection properties in SQL ServerSQL Server Native Client, see SQLSetConnectAttr.

    Les fonctionnalités des mots clés ApplicationIntent et MultiSubnetFailover sont exposées dans l’Administrateur de sources de données ODBC pour les noms de source de données (DSN) qui utilisent le pilote SQL ServerSQL Server Native Client, à compter de SQL Server 2012SQL Server 2012.The functionality of the ApplicationIntent and MultiSubnetFailover keywords will be exposed in the ODBC Data Source Administrator for DSNs that use the SQL ServerSQL Server Native Client driver, beginning in SQL Server 2012SQL Server 2012.

    Une application ODBC SQL ServerSQL Server Native Client peut utiliser l'une de ces trois fonctions pour établir la connexion :A SQL ServerSQL Server Native Client ODBC application can use one of three functions to make the connection:

FonctionFunction DescriptionDescription
SQLBrowseConnectSQLBrowseConnect La liste de serveurs retournée par SQLBrowseConnect n’inclut pas de VNN.The list of servers returned by SQLBrowseConnect will not include VNNs. Vous verrez seulement une liste de serveurs sans indication si ces derniers sont des serveurs autonomes, ou un serveur principal ou secondaire dans un cluster de Clustering de basculement Windows Server (WSFC) qui contient deux instances ou plus de SQL ServerSQL Server activées pour Groupes de disponibilité Always OnAlways On availability groups.You will only see a list of servers without any indication if the server is a standalone server, or a primary or secondary server in a Windows Server Failover Clustering (WSFC) cluster that contains two or more SQL ServerSQL Server instances that have been enabled for Groupes de disponibilité Always OnAlways On availability groups. Si la connexion à un serveur se solde par un échec, c’est peut-être parce que le paramètre ApplicationIntent n’est pas compatible avec la configuration de ce serveur.If you connect to a server and get a failure, it may be because you have connected to a server, and the ApplicationIntent setting is not compatible with the server configuration.

Étant donné que SQLBrowseConnect ne reconnaît pas de serveurs dans un cluster Clustering de basculement Windows Server (WSFC) qui contient deux d’instances ou plus de SQL ServerSQL Server activées pour Groupes de disponibilité Always OnAlways On availability groups, SQLBrowseConnect ignore le mot clé de chaîne de connexion MultiSubnetFailover.Because SQLBrowseConnect does not recognize servers in a Windows Server Failover Clustering (WSFC) cluster that contains two or more SQL ServerSQL Server instances that have been enabled for Groupes de disponibilité Always OnAlways On availability groups, SQLBrowseConnect ignores the MultiSubnetFailover connection string keyword.
SQLConnectSQLConnect SQLConnect prend en charge ApplicationIntent et MultiSubnetFailover par le biais d’un nom de source de données ou de propriétés de connexion.SQLConnect supports both ApplicationIntent and MultiSubnetFailover via a data source name (DSN) or connection properties.
SQLDriverConnectSQLDriverConnect SQLDriverConnect prend en charge ApplicationIntent et MultiSubnetFailover par le biais de mots clés de chaîne de connexion, de propriétés de connexion ou d’un nom de source de données.SQLDriverConnect supports ApplicationIntent and MultiSubnetFailover via connection string keywords, connection properties, or DSN.

OLE DBOLE DB

OLE DB dans SQL ServerSQL Server Native Client ne prend pas en charge le mot clé MultiSubnetFailover.OLE DB in the SQL ServerSQL Server Native Client does not support the MultiSubnetFailover keyword.

OLE DB dans SQL ServerSQL Server Native Client prendra en charge l'intention de l'application.OLE DB in the SQL ServerSQL Server Native Client will support application intent. L'intention de l'application se comporte de manière identique pour les applications OLE DB et les applications ODBC (voir ci-dessus).Application intent will behave the same for OLE DB applications as ODBC applications (see above).

Un mot clé de chaîne de connexion OLE DB a été ajouté pour prendre en charge Groupes de disponibilité Always OnAlways On availability groups dans SQL ServerSQL Server Native Client :One OLE DB connection string keyword added to support Groupes de disponibilité Always OnAlways On availability groups in SQL ServerSQL Server Native Client:

  • Intention de l’applicationApplication Intent

    Pour plus d’informations sur les mots clés de chaîne de connexion dans SQL ServerSQL Server Native Client, consultez Utilisation de mots clés de chaîne de connexion avec SQL Server Native Client.For more information about connection string keywords in SQL ServerSQL Server Native Client, see Using Connection String Keywords with SQL Server Native Client.

    Les propriétés de connexion équivalentes sont :The equivalent connection properties are:

  • SSPROP_INIT_APPLICATIONINTENTSSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRINGDBPROP_INIT_PROVIDERSTRING

    Une application OLE DB SQL ServerSQL Server Native Client peut utiliser l'une de ces méthodes pour spécifier l'intention de l'application :A SQL ServerSQL Server Native Client OLE DB application can use one of the methods to specify application intent:

    IDBInitialize::InitializeIDBInitialize::Initialize
    IDBInitialize::Initialize utilise le jeu de propriétés configuré précédemment pour initialiser la source de données et créer l’objet source de données.IDBInitialize::Initialize uses the previously configured set of properties to initialize the data source and create the data source object. Spécifiez l'intention de l'application en tant que propriété de fournisseur ou dans le cadre de la chaîne de propriétés étendues.Specify application intent as a provider property or as part of the extended properties string.

    IDataInitialize::GetDataSourceIDataInitialize::GetDataSource
    IDataInitialize::GetDataSource accepte une chaîne de connexion d’entrée qui peut contenir le mot clé Application Intent.IDataInitialize::GetDataSource takes an input connection string that can contain the Application Intent keyword.

    IDBProperties::GetPropertiesIDBProperties::GetProperties
    IDBProperties::GetProperties récupère la valeur de la propriété définie actuellement sur la source de données.IDBProperties::GetProperties retrieves the value of the property that is currently set on the data source. Vous pouvez récupérer la valeur Application Intent au moyen des propriétés DBPROP_INIT_PROVIDERSTRING et SSPROP_INIT_APPLICATIONINTENT.You can retrieve the Application Intent value through the DBPROP_INIT_PROVIDERSTRING property and SSPROP_INIT_APPLICATIONINTENT property.

    IDBProperties::SetPropertiesIDBProperties::SetProperties
    Pour définir la valeur de propriété ApplicationIntent, appelez IDBProperties::SetProperties qui passe la propriété SSPROP_INIT_APPLICATIONINTENT avec la valeur « ReadWrite » ou « ReadOnly » ou DBPROP_INIT_PROVIDERSTRING avec la valeur qui contient « ApplicationIntent=ReadOnly » ou « ApplicationIntent=ReadWrite ».To set the ApplicationIntent property value, call IDBProperties::SetProperties passing in the SSPROP_INIT_APPLICATIONINTENT property with value "ReadWrite" or "ReadOnly" or DBPROP_INIT_PROVIDERSTRING property with value containing "ApplicationIntent=ReadOnly" or "ApplicationIntent=ReadWrite".

    Vous pouvez spécifier l’intention de l’application dans le champ Propriétés de l’intention de l’application de l’onglet Tous de la boîte de dialogue Propriétés de liaison de données.You can specify application intent in the Application Intent Properties field of the All tab in the Data Link Properties dialog box.

    Lorsque des connexions implicites sont établies, la connexion implicite utilise le paramètre d'intention de l'application de la connexion parente.When implicit connections are established, the implicit connection will use the application intent setting of the parent connection. De la même façon, plusieurs sessions créées à partir de la même source de données héritent du paramètre d'intention de l'application de la source de données.Similarly, multiple sessions created from the same data source will inherit the data source's application intent setting.

Voir aussiSee Also

Fonctionnalités de SQL Server Native Client SQL Server Native Client Features
Utilisation de mots clés de chaîne de connexion avec SQL Server Native ClientUsing Connection String Keywords with SQL Server Native Client