Verbindungsstabilität (JDBC)
Aufgrund der Verbindungsstabilität kann eine unterbrochene Leerlaufverbindung mit Einschränkungen wiederhergestellt werden. Wenn die erste Verbindung fehlschlägt, kann der Treiber aufgrund der Verbindungsstabilität auch automatisch versuchen, die Verbindung wiederherzustellen. Nur SQL Server 2014 und höher und Azure SQL-Datenbank unterstützen die Wiederherstellung einer unterbrochenen Leerlaufverbindung. Dieses Feature ist ab dem Microsoft JDBC-Treiber 10.2.0 für SQL Server verfügbar.
Wiederholen des Herstellens einer Verbindung
Die Verbindungsstabilität hat zwei Aspekte. Der erste besteht in der Möglichkeit, eine erste Datenbankverbindung transparent wiederherzustellen. Der zweite besteht darin, eine vorhandene Leerlaufverbindung transparent wiederherzustellen. Eine typische Leerlaufverbindung kann eine Verbindung sein, die sich in einem Verbindungspool befindet. Als „Leerlaufverbindung“ gilt im Allgemeinen eine Verbindung, die mindestens 30 Sekunden im Leerlauf war. Diese Verbindungen können häufig vom Server oder von Netzwerkgeräten zwischen dem Client und dem Server getrennt werden.
Der JDBC-Treiber verfügt über zwei Verbindungsoptionen, die die Verbindungsstabilität steuern. Diese Optionen können der Verbindungszeichenfolge hinzugefügt oder über Datenquelleneigenschaften festgelegt werden.
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 wird ein einzelner Verbindungsversuch unternommen. Der Wert 0 bedeutet, dass kein Verbindungsversuch unternommen wird. |
connectRetryInterval |
Ganze Zahl von 1 bis 60 | 10 | Die Zeit in Sekunden zwischen Verbindungsversuchen. Der Treiber versucht sofort nach dem Erfassen einer unterbrochenen Leerlaufverbindung, diese wiederherzustellen, und wartet dann die mit connectRetryInterval angegebene Anzahl von Sekunden, bevor er es erneut versucht. Das Schlüsselwort wird ignoriert, wenn connectRetryCount 0 beträgt. |
Wenn das Ergebnis der Multiplikation des connectRetryCount
mit connectRetryInterval
größer als der loginTimeout
ist, versucht der Treiber nicht mehr, eine Verbindung herzustellen, sobald der loginTimeout
erreicht ist. Andernfalls wird weiterhin versucht, die Verbindung wiederherzustellen, bis der connectRetryCount
erreicht ist.
Wiederherstellen einer Verbindung
Um unterbrochene Leerlaufverbindungen zu ermitteln, verwendet der Treiber TCP-Keepalive-Pakete auf Socketebene. Unter Linux und Java 11 und höher aktiviert der Treiber automatisch Keepalive-Pakete in einem 30-Sekunden-Intervall (KeepAliveTime
), wobei eine Verzögerung von einer Sekunde zwischen den Verbindungsversuchen besteht, wenn ein Fehler auftritt (KeepAliveInterval
).
Wichtig
Unter Windows und macOS oder Java 8 müssen Keepalives manuell im Betriebssystem konfiguriert werden, um die Wiederherstellung unterbrochener Leerlaufverbindungen zu durchzuführen. Weitere Informationen zum Konfigurieren von Keepalives finden Sie unter Verbindung mit Azure SQL-Datenbank.
Einschränkungen
Unterbrochene Leerlaufverbindungen können nicht wiederhergestellt werden, wenn Folgendes zutrifft:
- Es gibt ein offenes Resultset, das nicht vollständig analysiert oder gepuffert wurde.
- Es werden Datenbanken in Azure SQL gewechselt.
- Es gibt eine geöffnete Transaktion.
Weitere Informationen
Herstellen einer Verbindung mit einer Azure SQL-Datenbank
Technischer Artikel: Resilienz bei Leerlaufverbindungen
Übersicht über den JDBC-Treiber