Condividi tramite


Resilienza delle connessioni (JDBC)

Scaricare il driver 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