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.
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 JDBC-Treiber 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. Um fehlgeschlagene Anweisungen automatisch zu wiederholen (z. B. Deadlock-Opfer 1205 oder Sperrzeitüberschreitung 1222) oder die Liste der Verbindungswiederholungen mit benutzerdefinierten Fehlernummern zu erweitern (z. B. vorübergehende Azure SQL-Fehler 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 JDBC-Treiber Wiederholungsversuche durchführt
Der JDBC-Treiber bietet drei unabhängige Wiederholungsmechanismen. Sie arbeiten zusammen, damit Sie alle gleichzeitig verwenden können:
| Mechanismus | Was es bewirkt | Weitere Informationen |
|---|---|---|
| Widerstandsfähigkeit inaktiver Verbindungen | Stellt eine unterbrochene inaktive Verbindung transparent wieder her (z. B. eine vom Server oder einem Load Balancer geschlossene gepoolte Verbindung). | Erkennen fehlerhafter Leerlaufverbindungen (in diesem Artikel) |
| Erster Wiederholungsversuch der Verbindung | Eine fehlgeschlagene erste Verbindung wird nach einem festen Zeitplan für eine integrierte Liste vorübergehender Fehler erneut versucht. | Erneutes Wiederholen der ersten Verbindungen (in diesem Artikel) |
| Konfigurierbare Wiederholungslogik (CRL) | Regelbasierte Wiederholungsversuche für fehlgeschlagene Anweisungen und für benutzerdefinierte Fehlernummern. Eingeführt in Microsoft JDBC-Treiber 12.10. | Konfigurierbare Wiederholungslogik |
Wiederholen der ersten Verbindungen
Der JDBC-Treiber enthält zwei Verbindungseigenschaften, die steuern, wie oft und wie lange der Treiber wartet, bevor er erneut versucht, die ursprüngliche Verbindung herzustellen. Fügen Sie diese Eigenschaften dem Verbindungszeichenfolge hinzu, oder legen Sie sie über Datenquelleneigenschaften fest.
| Schlüsselwort | Werte | Standard | Beschreibung |
|---|---|---|---|
connectRetryCount |
Ganzzahl zwischen 0 und 255 (einschließlich) | 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 von 0 deaktiviert die Wiederholung. |
connectRetryInterval |
Ganze Zahl zwischen 1 und 60 (einschließlich) | 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 connectRetryCount0 ist. |
Wenn connectRetryCount * connectRetryInterval größer als loginTimeoutist, stoppt der Treiber den Versuch, eine Verbindung herzustellen, sobald loginTimeout erreicht ist. Andernfalls läuft sie weiter, bis connectRetryCount aufgebraucht 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 dieser Menge benutzerdefinierte Fehlernummern hinzufügen oder sie vollständig ersetzen möchten, verwenden Sie retryConn in Konfigurierbare Wiederholungslogik. Verwenden Sie retryExec zum Wiederholen fehlgeschlagener Anweisungen im selben Artikel.
Festlegen der Eigenschaften
Legen Sie connectRetryCount und connectRetryInterval in der JDBC-URL, in einem Properties-Objekt oder in einem SQLServerDataSource fest.
In der JDBC-URL:
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 inaktive Verbindung ist eine, die in einem Verbindungspool wartet. Der Treiber betrachtet eine Verbindung nach etwa 30 Sekunden ohne Aktivität als inaktiv. 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 ist eine offene Ergebnismenge vorhanden, die nicht vollständig geparst oder gepuffert ist.
- Die Verbindung hat die Datenbank für Azure SQL gewechselt.
- Es gibt eine geöffnete Transaktion.