Resilienz bei Verbindungen im Leerlauf im OLE DB-Treiber

Gilt für: SQL Server 2014 (12.x) und höher Azure SQL-Datenbank

OLE DB-Treiber herunterladen

Übersicht

Ab Version 18.6.0 des Microsoft OLE DB-Treibers für SQL Server ermöglicht die Verbindungsresilienz dem Treiber, unterbrochene Verbindungen im Leerlauf automatisch wiederherzustellen.

In der folgenden Abbildung wird erläutert, wie Verbindungsresilienz im Leerlauf im OLE DB-Treiber funktioniert: Informationsabbildung zur Verbindungsresilienz

  1. Bei T1 wird mit IDBInitialize::Initialize eine Verbindung hergestellt.
  2. Zwischen T2 und T3 gibt es einen Zeitraum, in dem keine Kommunikation zwischen Treiber und Server besteht, was zu einer Verbindung im Leerlauf führt. Während dieser Zeit kann die Netzwerkverbindung unterbrochen werden. Die Unterbrechung kann z. B. hervorgerufen werden, weil ein Netzwerkgerät ein Socket im Leerlauf schließt oder weil ein Gerät für einen kurzen Zeitraum in den Standbymodus versetzt wird.
  3. Bei T3 versucht die Clientanwendung, einen Befehl mit dem OLE DB-Treiber auszuführen, z. B. mit ICommand::Execute. Der Treiber erkennt, dass die Verbindung unterbrochen wurde, und stellt die Verbindung transparent wieder her.

Schlüsselwörter und Eigenschaften

Schlüsselwort Eigenschaft Werte Standard BESCHREIBUNG
ConnectRetryCount SSPROP_INIT_CONNECT_RETRY_COUNT Ganzzahliger Wert von 0 bis 255 (inklusive) 1 Steuert die maximale Anzahl von Verbindungswiederherstellungsversuchen, wenn die Verbindung unterbrochen wurde. Standardmäßig wird nur ein einziger Versuch unternommen, eine Verbindung nach einer Unterbrechung wiederherzustellen. Der Wert 0 bedeutet, dass kein Wiederherstellungsversuch unternommen wird.
ConnectRetryInterval SSPROP_INIT_CONNECT_RETRY_INTERVAL Ganze Zahl von 1 bis 60 10 Die Zeit in Sekunden zwischen jedem Verbindungswiederholungsversuch. Dieses Schlüsselwort wird ignoriert, wenn ConnectRetryCount gleich 0 ist.

Auf den folgenden Seiten finden Sie weitere Informationen zum Festlegen dieser Eigenschaften:

Wenn eine Anwendung eine Verbindung mit DBPROP_INIT_PROMPT herstellt und dann versucht, eine Anweisung über eine unterbrochene Verbindung ausführen, zeigt der OLE DB-Treiber das Dialogfeld nicht noch einmal an.

Beim Abrufen des Verbindungsstatus über die Eigenschaft DBPROP_CONNECTIONSTATUS:

  • Während der Wiederherstellung gibt die Eigenschaft DBPROPVAL_CS_INITIALIZED zurück.
  • Wenn bei der Wiederherstellung ein Fehler auftritt, gibt die Eigenschaft DBPROPVAL_CS_COMMUNICATIONFAILURE zurück.

Hinweis

Wenn das Befehlstimeout (DBPROP_COMMANDTIMEOUT in DBPROPSET_ROWSET) auf einen Wert ungleich 0 (Null) festgelegt wurde und die Verbindungswiederherstellung länger dauert als das Befehlstimeout, wird die Verbindung nicht wiederhergestellt.

Verbindungswiederherstellung mit asynchroner Ausführung

Wenn die asynchrone Ausführung verwendet wird und die Verbindung wiederhergestellt werden muss, erfolgt die Verbindungswiederherstellung synchron, bevor der asynchrone Aufruf ausgeführt wird. Weitere Informationen zur asynchronen Ausführung finden Sie unter Ausführen von asynchronen Vorgängen.

Erwartete Fehler

Wenn die Verbindungswiederherstellung fehlschlägt, kann einer der folgenden Fehler auftreten:

  • Die Verbindung ist unterbrochen und kann nicht wiederhergestellt werden. Der Client-Treiber hat versucht, die Verbindung ein oder mehrere Male wiederherzustellen und alle Versuche sind fehlgeschlagen. Erhöhen Sie den Wert der Verbindungszeichenfolgen von ConnectRetryCount, um die Anzahl der Wiederherstellungsversuche zu erhöhen.
  • Der Server hat einen Wiederherstellungsversuch nicht bestätigt. Die Wiederherstellung der Verbindung ist nicht möglich.
  • Der Server hat nicht die genaue Client TDS-Version beibehalten, die bei einem Wiederherstellungsversuch gefordert war. Die Wiederherstellung der Verbindung ist nicht möglich.
  • Der Server hat nicht die genaue Serverhauptversion beibehalten, die bei einem Wiederherstellungsversuch gefordert war. Die Wiederherstellung ist nicht möglich.
  • Die Verbindung ist unterbrochen und kann nicht wiederhergestellt werden. Die Verbindung wird vom Server als nicht behebbar markiert. Es wurde nicht versucht, die Verbindung wiederherzustellen.
  • Die Verbindung ist unterbrochen und kann nicht wiederhergestellt werden. Die Verbindung wird vom Clienttreiber als nicht behebbar markiert. Es wurde nicht versucht, die Verbindung wiederherzustellen.
  • Der Server konnte die SSL-Verschlüsselung während eines Wiederherstellungsversuchs nicht aufrechterhalten. Eine Wiederherstellung der Verbindung ist nicht möglich.