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 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.