Resistencia de conexión (JDBC)
La resistencia de la conexión permite restablecer una conexión inactiva interrumpida, dentro de las limitaciones. Si se produce un error en una conexión inicial, la resistencia de la conexión también permite al controlador intentar volver a conectarse automáticamente. Solo SQL Server 2014 y versiones posteriores, y Azure SQL Database admiten volver a conectar una conexión inactiva interrumpida. Esta característica está disponible a partir del Controlador ODBC 10.2.0 de Microsoft para SQL Server.
Reintento de conexión
Hay dos aspectos de la resistencia de la conexión. La primera es la capacidad de reintentar de forma transparente una conexión de base de datos inicial. La segunda es la capacidad de restaurar de forma transparente una conexión inactiva existente. Una conexión inactiva típica podría ser una conexión que se encuentra en un grupo de conexiones. Por lo general, una conexión "inactiva" es aquella que ha estado inactiva durante al menos 30 segundos. A menudo, el servidor o los dispositivos de red pueden cerrar estas conexiones entre el cliente y el servidor.
El controlador JDBC tiene dos opciones de conexión que controlan el comportamiento de resistencia de la conexión. Estas opciones se pueden agregar a la cadena de conexión o establecerse mediante las propiedades del origen de datos.
Palabra clave | Valores | Valor predeterminado | Descripción |
---|---|---|---|
connectRetryCount |
Un entero comprendido entre 0 y 255, ambos incluidos | 1 | El número máximo de intentos de establecer o restablecer una conexión antes de abandonar. De forma predeterminada, se realiza un único reintento. Un valor de 0 significa que no se intenta realizar un reintento. |
connectRetryInterval |
Un entero comprendido entre 1 y 60, ambos incluidos | 10 | Tiempo en segundos entre los reintentos de conexión. El controlador intentará volver a conectarse inmediatamente al detectar una conexión inactiva interrumpida y, a continuación, esperará connectRetryInterval segundos antes de volver a intentarlo. Esta palabra clave se omite si connectRetryCount es 0. |
Si el producto de connectRetryCount
multiplicado por connectRetryInterval
es mayor que loginTimeout
, el controlador dejará de intentar conectarse una vez que se alcance loginTimeout
. De lo contrario, seguirá intentando volver a conectarse hasta que se alcance connectRetryCount
.
Recuperación de conexión
Para detectar conexiones inactivas interrumpidas, el controlador se basa en paquetes keepalive TCP en el nivel de socket. En Linux y Java 11 o versiones posteriores, el controlador habilita automáticamente paquetes keepalive en un intervalo de 30 segundos (KeepAliveTime
) con un retraso de 1 segundo entre reintentos cuando se produce un error (KeepAliveInterval
).
Importante
En Windows y macOS o en Java 8, los keepalives deben configurarse manualmente en el sistema operativo para aprovechar las ventajas de restaurar las conexiones inactivas interrumpidas. Para obtener información sobre cómo configurar keepalives, consulte Conexión a base de datos de Azure SQL.
Limitaciones
Las conexiones inactivas interrumpidas no se pueden restaurar cuando:
- Hay un conjunto de resultados abierto que no se ha analizado ni almacenado en búfer por completo.
- Se cambia de bases de datos en Azure SQL.
- Hay una transacción abierta.
Vea también
Conectarse a una instancia de Azure SQL Database
Artículo técnico: Resistencia de conexión inactiva
Introducción al controlador JDBC