Resilienza delle connessioni (JDBC)
La resilienza delle connessioni consente di ristabilire le connessioni inattive, con alcune limitazioni. Se una connessione iniziale non riesce, la resilienza delle connessioni consente inoltre al driver di provare automaticamente a riconnettersi. Solo SQL Server 2014 e versioni successive e Database SQL di Azure supportano la riconnessione di una connessione inattiva interrotta. Questa funzionalità è disponibile a partire da Microsoft JDBC Driver 10.2.0 per SQL Server.
Ripetizione dei tentativi di connessione
Esistono due aspetti per la resilienza delle connessioni. Il primo è la possibilità di riprovare in modo trasparente una connessione di database iniziale. Il secondo è la possibilità di ripristinare in modo trasparente una connessione inattiva esistente. Una tipica connessione inattiva potrebbe essere una connessione residente in un pool di connessioni. Per "inattiva" si intende in genere una connessione inattiva per almeno 30 secondi. Queste connessioni possono spesso essere chiuse dal server o dai dispositivi di rete tra il client e il server.
Il driver JDBC include due opzioni di connessione che controllano il comportamento della resilienza delle connessioni. Queste opzioni possono essere aggiunte alla stringa di connessione o impostata tramite le proprietà dell'origine dati.
Parola chiave | Valori | Valore predefinito | Descrizione |
---|---|---|---|
connectRetryCount |
Numero intero compreso tra 0 e 255 inclusi | 1 | Il numero massimo di tentativi di stabilire o ristabilire una connessione prima di rinunciare. Per impostazione predefinita, viene eseguito un singolo tentativo di ripetizione. Il valore 0 significa che non verranno effettuati nuovi tentativi. |
connectRetryInterval |
Numero intero compreso tra 1 e 60 inclusi | 10 | L'intervallo di tempo, in secondi, tra i tentativi di riprovare una connessione. Il driver tenterà di riconnettersi immediatamente dopo aver rilevato una connessione inattiva interrotta e attenderà connectRetryInterval secondi prima di riprovare. Questa parola chiave viene ignorata se connectRetryCount è 0. |
Se il prodotto di connectRetryCount
moltiplicato per connectRetryInterval
è maggiore di loginTimeout
, il driver smetterà di provare a connettersi una volta raggiunto loginTimeout
. In caso contrario, continuerà a provare a riconnettersi fino a quando non viene raggiunto connectRetryCount
.
Ripristino delle connessioni
Per rilevare le connessioni inattive interrotte, il driver si basa sui pacchetti keep-alive TCP a livello di socket. In Linux e Java 11 e versioni successive il driver abilita automaticamente i pacchetti keep-alive a intervalli di 30 secondi (KeepAliveTime
) con un ritardo di 1 secondo tra i tentativi quando si verifica un errore (KeepAliveInterval
).
Importante
In Windows e macOS o in Java 8 i pacchetti keep-alive devono essere configurati manualmente nel sistema operativo per trarre vantaggio dal ripristino delle connessioni inattive interrotte. Per informazioni su come configurare i pacchetti keep-alive, vedere Connessione al database SQL di Azure.
Limiti
Le connessioni inattive interrotte non possono essere ripristinate quando:
- Esiste un set di risultati aperto che non è stato completamente analizzato o memorizzato nel buffer
- Cambio di database rispetto ad Azure SQL
- Esiste una transazione aperta
Vedi anche
Connessione a un database SQL di Azure
Articolo tecnico - Resilienza delle connessioni inattive
Panoramica del driver JDBC