Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Datenbank in Microsoft Fabric
In diesem Artikel wird die OLE DB-Treiber für SQL Server-Unterstützung für Always On-Verfügbarkeitsgruppen erläutert. Weitere Informationen zu Always-On-Verfügbarkeitsgruppen finden Sie unter Verfügbarkeitsgruppenlistener, Clientkonnektivität und Anwendungsfailover (SQL Server), Erstellung und Konfiguration von Verfügbarkeitsgruppen (SQL Server), Failoverclustering und Always-On-Verfügbarkeitsgruppen (SQL Server) und Aktive sekundäre Replikate: Lesbare sekundäre Replikate (Always-On-Verfügbarkeitsgruppen).
Sie können den Verfügbarkeitsgruppenlistener einer bestimmten Verfügbarkeitsgruppe in der Verbindungszeichenfolge angeben. Wenn ein OLE DB-Treiber für SQL Server-Anwendung mit einer Datenbank in einer Verfügbarkeitsgruppe verbunden ist, die ein Failover ausführt, wird die ursprüngliche Verbindung unterbrochen, und die Anwendung muss eine neue Verbindung herstellen, um die Arbeit nach dem Failover fortzusetzen.
Wenn Sie keine Verbindung zu einem verfügbaren Gruppenlistener herstellen und mehrere IP-Adressen einem Hostnamen zugeordnet sind, durchläuft der OLE DB-Treiber für SQL Server nacheinander alle IP-Adressen, die dem DNS-Eintrag zugeordnet sind. Dies kann zeitaufwändig sein, wenn die erste vom DNS-Server zurückgegebene IP-Adresse an keine Netzwerkschnittstellenkarte (NIC) gebunden ist. Beim Herstellen einer Verbindung zu einem verfügbaren Gruppenlistener versucht der OLE DB-Treiber für SQL Server, Verbindungen zu allen IP-Adressen parallel herzustellen, und wenn ein Verbindungsversuch erfolgreich ist, verwirft der Treiber alle ausstehenden Verbindungsversuche.
Hinweis
Das Erhöhen des Verbindungstimeouts sowie die Implementierung von Verbindungswiederholungslogik erhöhen die Wahrscheinlichkeit, dass eine Anwendung eine Verbindung zu einer Verfügbarkeitsgruppe herstellt. Da zudem eine Verbindung aufgrund eines Verfügbarkeitsgruppenfailovers fehlschlagen kann, empfiehlt sich die Implementierung von Verbindungswiederholungslogik, wodurch im Fall einer fehlgeschlagenen Verbindung bis zur erneuten Verbindung Wiederholungsversuche erfolgen.
Verbindung mit MultiSubnetFailover
Speine immer MultiSubnetFailover=Yes an, wenn das Ziel die Azure SQL-Datenbank, eine Azure SQL Managed Instance, eine SQL-Datenbank in Microsoft Fabric, ein Always On Availability Group Listener oder eine SQL Server Failover Cluster Instance ist.
Wenn der Servername in deiner Verbindungszeichenfolge auf mehr als eine IP-Adresse aufgelöst wird, sagt MultiSubnetFailover=Yes dem OLE DB-Treiber für SQL Server, dass er Verbindungen zu all diesen Adressen gleichzeitig öffnen und die erste verwendet, die antwortet. Ohne sie versucht der Fahrer die Adressen nacheinander. Eine Adresse, die nicht antwortet, bleibt stehen, bis das TCP-Verbindungs-Timeout des Betriebssystems abläuft, was den Verbindungs-Timeout erschöpfen kann, bevor der Treiber eine Adresse erreicht, die antwortet. Nach einem Failover kann die Adresse, die der Treiber zuerst versucht, eine sein, die die Datenbank nicht mehr bedient, sodass eine Verbindung, die gegen eine andere Adresse erfolgreich sein würde, stattdessen mit einem Timeout fehlschlägt.
MultiSubnetFailover=Yes ändert, wie schnell der Client die Replik findet, die die Datenbank bedient. Es ändert nichts, wie lange der Server zum Failover braucht.
MultiSubnetFailover=Yes ist auf Single-IP-Zielen sicher. Wenn DNS auf eine einzige Adresse aufgelöst wird, macht der Treiber einen einzigen Verbindungsversuch, sodass die Einstellung nichts kostet, wenn sie nicht benötigt wird.
Weitere Informationen zu Verbindungszeichenfolgen-Schlüsselwörtern finden Sie unter Using Connection String Keywords with SQL Server Native Client (Verwenden von Verbindungszeichenfolgen-Schlüsselwörtern mit dem OLE DB-Treiber für SQL Server).
Befolgen Sie beim Herstellen einer Verbindung mit einem Server in einer Verfügbarkeitsgruppe oder einer Failoverclusterinstanz die folgenden Richtlinien:
Setze die MultiSubnetFailover-Verbindungseigenschaft auf Ja.
Um eine Verbindung mit einer Verfügbarkeitsgruppe herzustellen, geben Sie in der Verbindungszeichenfolge den Verfügbarkeitsgruppenlistener der Verfügbarkeitsgruppe als Server an.
Du kannst MultiSubnetFailover nicht über ein anderes Protokoll als TCP verwenden.
Die Verbindung zu einer SQL Server-Instanz mit mehr als 64 IP-Adressen führt zu einem Verbindungsfehler.
Du kannst MultiSubnetFailover mit Datenbankspiegelung nicht verwenden. Der Treiber gibt einen Fehler zurück, wenn der Server meldet, dass die Datenbank gespiegelt ist. Datenbankspiegelung ist in allen unterstützten Versionen von SQL Server veraltet. Verwenden Sie stattdessen Always On-Verfügbarkeitsgruppen.
Die Art der Authentifizierung, SQL Server-Authentifizierung, Kerberos-Authentifizierung oder Windows-Authentifizierung, beeinflusst nicht das Verhalten einer Anwendung, die die MultiSubnetFailover-Verbindungseigenschaft verwendet.
Sie können den Wert von Connect Timeout erhöhen, um die Failover-Zeit zu berücksichtigen und Versuche der Anwendung zu reduzieren. Der Standardwert ist 15 Sekunden. Die gleiche Einstellung heißt Timeout , wenn du sie durch
IDBInitialize::Initializesetzt, und sie wird auf die EigenschaftDBPROP_INIT_TIMEOUTabgebildet. Für Azure SQL-Datenbank serverlos mit aktivierter Auto-Pause verwenden Sie eine Connect-Timeout von mindestens 60 Sekunden. Eine automatisch pausierte Datenbank wird beim ersten Verbindungsversuch fortgesetzt, und dieser Versuch kann mit Fehler 40613 scheitern, während die Datenbank fortgesetzt wird, sodass die Anwendung einen neuen Versuch machen muss. Weitere Informationen finden Sie unter Auto-pause und Auto-resume.Verteilte Transaktionen werden nicht unterstützt.
Wenn das schreibgeschützte Routing nicht aktiviert ist, kann in den folgenden Situationen keine Verbindung mit einem sekundären Replikatspeicherort in einer Verfügbarkeitsgruppe hergestellt werden:
- Wenn der sekundäre Replikatspeicherort nicht zum Akzeptieren von Verbindungen konfiguriert ist
- Wenn eine Anwendung ApplicationIntent=ReadWrite verwendet und der sekundäre Replikastandort für den Schreibzugriff konfiguriert ist.
Eine Verbindung schlägt fehl, wenn eine primäre Replik so konfiguriert ist, dass sie Read-only-Workloads ablehnt, und die Verbindungszeichenfolge ApplicationIntent=ReadOnly enthält.
Aktualisierung von Datenbankspiegelung
Ein Verbindungsfehler tritt auf, wenn das Verbindungszeichenfolge sowohl das MultiSubnetFailover als auch Failover_Partner Schlüsselwörter enthält. Ein Fehler tritt auch auf, wenn Sie MultiSubnetFailover verwenden und der SQL Server eine Failover-Partnerantwort zurückgibt, die anzeigt, dass es Teil eines Datenbankspiegelungspaares ist.
Wenn du eine OLE DB-Treiber für SQL Server Anwendung aktualisierst, die derzeit Datenbankspiegelung verwendet, auf ein Multi-Subnet-Szenario umrüstest, entfern Sie die Failover_Partner Connection-Eigenschaft und ersetzen Sie sie durch MultiSubnetFailover, die auf Ja eingestellt ist. Ersetzen Sie den Servernamen in der Verbindungszeichenfolge durch einen Availability Group Listener. Wenn ein Verbindungszeichenfolge Failover_Partner verwendet und MultiSubnetFailover=Yes, erzeugt der Treiber einen Fehler. Wenn jedoch ein Verbindungszeichenfolge Failover_Partner und MultiSubnetFailover=No (oder ApplicationIntent=ReadWrite) verwendet, verwendet die Anwendung Datenbankspiegelung.
Der Treiber liefert einen Fehler, wenn Sie Datenbankspiegelung auf der primären Replik in der Verfügbarkeitsgruppe verwenden und wenn Sie MultiSubnetFailover=Yes in der Verbindungszeichenfolge verwenden, die sich mit einer primären Replik statt mit einem Availability Group Listener verbindet.
MultiSubnetFailover programmatisch festlegen
Die entsprechenden Verbindungseigenschaften sind:
- SSPROP_INIT_MULTISUBNETFAILOVER
- DBPROP_INIT_PROVIDERSTRING
Ein OLE DB-Treiber für SQL Server Application kann eine der folgenden Methoden verwenden, um die MultiSubnetFailover-Option einzustellen:
-
IDBInitialize::Initialize
Verwendet den zuvor konfigurierten Satz von Eigenschaften, um die Datenquelle zu initialisieren und das Datenquellenobjekt zu erstellen. Spezifizieren Sie MultiSubnetFailover als Provider-Eigenschaft oder als Teil der erweiterten Properties-String. -
IDataInitialize::GetDataSource
Nimmt eine Eingabe-Verbindungszeichenfolge, die das MultiSubnetFailover-Schlüsselwort enthalten kann. -
IDBProperties::SetProperties
Um den Wert der MultiSubnetFailover-Eigenschaft festzulegen, rufen Sie IDBProperties::SetProperties auf, indem die SSPROP_INIT_MULTISUBNETFAILOVER-Eigenschaft mit dem Wert VARIANT_TRUE oder VARIANT_FALSE oder die DBPROP_INIT_PROVIDERSTRING-Eigenschaft mit dem Wert MultiSubnetFailover=Yes oder MultiSubnetFailover=Nein eingegeben wird.
Beispiel
DBPROP rgPropMultisubnet;
rgPropMultisubnet.dwPropertyID = SSPROP_INIT_MULTISUBNETFAILOVER;
rgPropMultisubnet.dwOptions = DBPROPOPTIONS_REQUIRED;
rgPropMultisubnet.dwStatus = DBPROPSTATUS_OK;
rgPropMultisubnet.colid = DB_NULLID;
V_VT(&(rgPropMultisubnet.vValue)) = VT_BOOL;
V_BOOL(&(rgPropMultisubnet.vValue)) = VARIANT_TRUE;
DBPROPSET PropSet;
PropSet.rgProperties = &rgPropMultisubnet;
PropSet.cProperties = 1;
PropSet.guidPropertySet = DBPROPSET_SQLSERVERDBINIT;
IDBProperties* pIDBProperties = NULL;
hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void **)&pIDBProperties);
pIDBProperties->SetProperties(1, &PropSet);
Angeben der Anwendungsabsicht
Sie können das Schlüsselwort ApplicationIntent in Ihrer Verbindungszeichenfolge angeben. Es können die Werte ReadWrite (Standard) und ReadOnly zugewiesen werden.
Wenn Sie ApplicationIntent=ReadOnly festlegen, fordert der Client bei der Verbindungsherstellung eine Leseworkload an. Der Server erzwingt die Absicht zur Verbindungszeit und während einer USE-Datenbankanweisung.
Das Schlüsselwort ApplicationIntent funktioniert nicht mit schreibgeschützten Legacy-Datenbanken.
Ziele von ReadOnly
Wenn eine Verbindung ReadOnly auswählt, wird sie einer der folgenden speziellen Konfigurationen zugewiesen, die für die Datenbank ggf. vorhanden sind:
Always On: Eine Datenbank kann Leseworkloads in der Verfügbarkeitsgruppen-Zieldatenbank zulassen bzw. nicht zulassen. Diese Auswahl wird über die
ALLOW_CONNECTIONS-Klausel der Transact-SQL-AnweisungenPRIMARY_ROLEundSECONDARY_ROLEgesteuert.
Wenn keins dieser speziellen Ziele verfügbar ist, erfolgt der Lesevorgang in der regulären Datenbank.
Das Schlüsselwort ApplicationIntent ermöglicht schreibgeschütztes Routing.
Schreibgeschütztes Routing
Das schreibgeschützte Routing ist eine Funktion, die die Verfügbarkeit des schreibgeschützten Replikats einer Datenbank sicherstellen kann. Zum Aktivieren des schreibgeschützten Routings gelten sämtliche der folgenden Voraussetzungen:
Sie müssen eine Verbindung mit einem Always On-Verfügbarkeitsgruppenlistener herstellen.
Das Schlüsselwort der
ApplicationIntent-Verbindungszeichenfolge muss aufReadOnlyfestgelegt werden.Der Datenbankadministrator muss die Verfügbarkeitsgruppe für das schreibgeschützte Routing konfigurieren.
Mehrere Verbindungen, für die jeweils das schreibgeschützte Routing verwendet wird, werden ggf. nicht alle mit demselben schreibgeschützten Replikat hergestellt. Änderungen in der Datenbanksynchronisierung oder Änderungen in der Routingkonfiguration des Servers können zu Clientverbindungen mit anderen schreibgeschützten Replikaten führen.
Sie können sicherstellen, dass für alle schreibgeschützten Anforderungen eine Verbindung mit demselben schreibgeschützten Replikat hergestellt wird, indem Sie keinen Verfügbarkeitsgruppenlistener an das Verbindungszeichenfolgen-Schlüsselwort Server übermitteln. Geben Sie stattdessen den Namen der schreibgeschützten Instanz an.
Das schreibgeschützte Routing kann ggf. länger als das Herstellen einer Verbindung mit der primären Instanz dauern. Dies liegt daran, dass beim schreibgeschützten Routing zunächst eine Verbindung mit dem primären Replikat hergestellt wird und dann nach dem besten verfügbaren lesbaren sekundären Replikat gesucht wird. Da mehrere Schritte ausgeführt werden, sollten Sie das Timeout für login auf mindestens 30 Sekunden erhöhen.
ApplicationIntent
Der OLE DB-Treiber für SQL Server unterstützt das Keyword ApplicationIntent Verbindungszeichenfolge. Weitere Informationen zu Verbindungszeichenfolgen-Schlüsselwörtern finden Sie unter Using Connection String Keywords with SQL Server Native Client (Verwenden von Verbindungszeichenfolgen-Schlüsselwörtern mit dem OLE DB-Treiber für SQL Server).
ApplicationIntent programmatisch festlegen
Die entsprechenden Verbindungseigenschaften sind:
- SSPROP_INIT_APPLICATIONINTENT
- DBPROP_INIT_PROVIDERSTRING
Ein OLE DB-Treiber für SQL Server Application kann eine der folgenden Methoden verwenden, um die Anwendungsintention anzugeben:
-
IDBInitialize::Initialize
Verwendet den zuvor konfigurierten Satz von Eigenschaften, um die Datenquelle zu initialisieren und das Datenquellenobjekt zu erstellen. Geben Sie die Anwendungsabsicht als Anbietereigenschaft oder als einen Teil der erweiterten Eigenschaftenzeichenfolge an. -
IDataInitialize::GetDataSource
Nimmt eine Eingabe-Verbindungszeichenfolge, die das Keyword Application Intent enthalten kann. -
IDBProperties::SetProperties
Um den Wert der ApplicationIntent-Eigenschaft festzulegen, rufen Sie IDBProperties::SetProperties auf, indem die SSPROP_INIT_APPLICATIONINTENT-Eigenschaft mit dem Wert ReadWrite oder ReadOnly, oder die DBPROP_INIT_PROVIDERSTRING-Eigenschaft mit dem Wert ApplicationIntent=ReadOnly oder ApplicationIntent=ReadWrite enthalten ist.
Sie können die Anwendungsabsicht im Feld Application Intent Properties im Reiter Alle im Dialogfeld Data Link Properties angeben.
Wenn Sie implizite Verbindungen herstellen, verwendet die implizite Verbindung die Anwendungsintention-Einstellung der übergeordneten Verbindung. Ebenso übernehmen mehrere Sitzungen, die aus derselben Datenquelle erstellt werden, die Anwendungsintention-Einstellung der Datenquelle.