Verbindungsstabilität (JDBC)

JDBC-Treiber herunterladen

Die Verbindungsresilienz ermöglicht es dem TREIBER, eine fehlerhafte Leerlaufverbindung transparent wiederherzustellen und die erste Verbindung erneut zu versuchen, wenn die Verbindung fehlschlägt. In diesem Artikel werden die beiden Verbindungszeichenfolgeneigenschaften behandelt, die dieses Verhalten steuern (connectRetryCount und connectRetryInterval) und die Keepalive-Einstellungen, die der Treiber verwendet, um eine verworfene Leerlaufverbindung zu erkennen. Die Verbindungsresilienz ist ab Microsoft DRIVER 10.2.0 für SQL Server verfügbar. Das erneute Verbinden einer fehlerhaften Leerlaufverbindung erfordert SQL Server 2014 oder höher oder Azure SQL-Datenbank.

Tip

Die Verbindungsresilienz wiederholt nur die anfängliche Verbindung und stellt im Hintergrund fehlerhafte Leerlaufverbindungen wieder her. Zum automatischen Wiederholen fehlgeschlagener Anweisungen (z. B. Deadlock-Opfer 1205 oder Sperrtimeout 1222) oder zum Erweitern der Liste der Verbindungsrückversuche mit benutzerdefinierten Fehlernummern (z. B. Azure SQL vorübergehenden Fehlern wie 40197 oder 40613) verwenden Sie konfigurierbare Wiederholungslogik. CRL ist regelbasiert, Sie wählen die Fehler und den Backoff aus, und es funktioniert zusammen mit den Features in diesem Artikel.

Wie der VORGANGstreiber erneut wird

Der VORGANGstreiber bietet drei unabhängige Wiederholungsmechanismen. Sie arbeiten zusammen, damit Sie alle gleichzeitig verwenden können:

Mechanismus Was es bewirkt Weitere Informationen
Ausfallsicherheit der Leerlaufverbindung Stellt eine fehlerhafte Leerlaufverbindung transparent wieder her (z. B. eine vom Server oder einem Lastenausgleich geschlossene Poolverbindung). Erkennen fehlerhafter Leerlaufverbindungen (in diesem Artikel)
Anfänglicher Verbindungs wiederholen Es wird eine fehlerhafte anfängliche Verbindung in einem festen Zeitplan für eine integrierte Liste mit vorübergehenden Fehlern erneut ausgeführt. Erneutes Wiederholen der ersten Verbindungen (in diesem Artikel)
Konfigurierbare Wiederholungslogik (CRL) Regelbasierte Wiederholung für fehlgeschlagene Anweisungen und für benutzerdefinierte Fehlernummern. Eingeführt in Microsoft DRIVER 12.10. Konfigurierbare Wiederholungslogik

Wiederholen der ersten Verbindungen

Der VORGANGstreiber enthält zwei Verbindungseigenschaften, die steuern, wie oft und wie lange der Treiber wartet, bevor die erste Verbindung erneut hergestellt wird. Fügen Sie diese Eigenschaften dem Verbindungszeichenfolge hinzu, oder legen Sie sie über Datenquelleneigenschaften fest.

Schlüsselwort Werte Standard Beschreibung
connectRetryCount Ganze Zahl von 0 bis 255 1 Die maximale Anzahl der Versuche, eine Verbindung herzustellen oder wiederherzustellen, bevor diese aufgegeben werden. Standardmäßig führt der Treiber einen einzelnen Wiederholungsversuch durch. Ein Wert der Deaktivierung des 0 Wiederholungsversuches.
connectRetryInterval Ganze Zahl von 1 bis 60 10 Die Zeit in Sekunden zwischen Verbindungsversuchen. Der Treiber versucht, die Verbindung sofort wiederherzustellen, wenn eine fehlerhafte Leerlaufverbindung erkannt wird, und wartet connectRetryInterval dann Sekunden, bevor es erneut versucht wird. Diese Eigenschaft wird ignoriert, wenn connectRetryCount dies der Fall ist 0.

Wenn connectRetryCount * connectRetryInterval größer als loginTimeoutist, stoppt der Treiber den Versuch, eine Verbindung herzustellen, sobald loginTimeout erreicht ist. Andernfalls wird sie fortgesetzt, bis connectRetryCount sie erschöpft ist.

Diese Eigenschaften wiederholen nur die integrierte Liste der vorübergehenden Verbindungsfehler. Die vollständige Liste der behandelten Fehler (4060, 40197, 40501, 40613, 49918-49920 und andere) finden Sie in der Liste der integrierten vorübergehenden Verbindungsfehlerliste. Wenn Sie diesem Satz benutzerdefinierte Fehlernummern hinzufügen oder vollständig ersetzen möchten, verwenden Sie retryConn diese in konfigurierbarer Wiederholungslogik. Verwenden Sie retryExec zum Wiederholen fehlgeschlagener Anweisungen im selben Artikel.

Festlegen der Eigenschaften

Festlegen connectRetryCount und connectRetryInterval in der URL DES OBJEKTS, in einem Properties Objekt oder in einem SQLServerDataSource.

In der URL DES SERVERS:

jdbc:sqlserver://server;databaseName=db;connectRetryCount=3;connectRetryInterval=10

Mit einem Properties Objekt. Die Java Codeausschnitte in diesem Artikel lassen Importe und Klassenwrapper aus Platzgründen weg.

Properties props = new Properties();
props.setProperty("user", "...");
props.setProperty("password", "...");
props.setProperty("connectRetryCount", "3");
props.setProperty("connectRetryInterval", "10");
Connection c = DriverManager.getConnection("jdbc:sqlserver://server;databaseName=db", props);

Mit SQLServerDataSource:

SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("server");
ds.setDatabaseName("db");
ds.setUser("...");
ds.setPassword("...");
ds.setConnectRetryCount(3);
ds.setConnectRetryInterval(10);

Erkennen fehlerhafter Leerlaufverbindungen

Eine typische Leerlaufverbindung befindet sich in einem Verbindungspool. Der Treiber betrachtet eine Verbindung ohne Aktivität nach etwa 30 Sekunden im Leerlauf. Der Server oder ein Netzwerkgerät zwischen dem Client und dem Server kann Leerlaufverbindungen schließen, sodass der Treiber eine Möglichkeit benötigt, um zu erkennen, dass der Socket tot ist, bevor die nächste Abfrage ausgeführt wird.

Um unterbrochene Leerlaufverbindungen zu ermitteln, verwendet der Treiber TCP-Keepalive-Pakete auf Socketebene. Unter Linux und Java 11 oder höher aktiviert der Treiber automatisch Keepalive-Pakete in einem 30-Sekunden-Intervall (KeepAliveTime), wobei eine 1-Sekunden-Verzögerung zwischen Wiederholungen auftritt, wenn ein Fehler auftritt (KeepAliveInterval).

Wichtig

Auf Windows und auf Java 11 oder früher müssen Sie Keepalives manuell im Betriebssystem konfigurieren, um die Wiederherstellung fehlerhafter Leerlaufverbindungen zu nutzen. Weitere Informationen zum Konfigurieren von Keepalives finden Sie unter Verbindung mit Azure SQL-Datenbank.

Einschränkungen

Der Treiber kann eine fehlerhafte Leerlaufverbindung nicht wiederherstellen, wenn eine der folgenden Bedingungen zutrifft:

  • Es gibt einen geöffneten Resultset, der nicht vollständig analysiert oder gepuffert ist.
  • Die Verbindungsdatenbanken wurden für Azure SQL gewechselt.
  • Es gibt eine geöffnete Transaktion.