Resistencia de conexión inactiva en OLE DB Driver
Se aplica a: SQL Server 2014 (12.x) y versiones posteriores de Azure SQL Database
Información general
A partir de Microsoft OLE DB Driver for SQL Server versión 18.6.0, la resistencia de conexión permite al controlador restaurar automáticamente las conexiones inactivas interrumpidas.
En el diagrama siguiente se explica cómo funciona la resistencia de conexión inactiva en OLE DB Driver:
- En T1, se realiza una conexión mediante IDBInitialize::Initialize.
- Hay un período de no comunicación entre el controlador y el servidor entre T2 y T3, lo que da lugar a una conexión inactiva. Durante este tiempo, se puede interrumpir la conexión de red. La interrupción puede ser algo parecido a un dispositivo de red que cierra un socket inactivo o que pone un dispositivo en espera durante un breve período.
- En T3, la aplicación cliente intenta ejecutar un comando mediante OLE DB Driver (por ejemplo, ICommand::Execute. El controlador detecta que la conexión está interrumpida y vuelve a establecer la conexión de forma transparente.
Palabras clave y propiedades
Palabra clave | Propiedad | Valores | Valor predeterminado | Descripción |
---|---|---|---|---|
ConnectRetryCount | SSPROP_INIT_CONNECT_RETRY_COUNT | Valor entero entre 0 y 255 (ambos incluidos) | 1 | Controla el número máximo de intentos de reconexión si se ha interrumpido la conexión. De forma predeterminada, se realiza un solo intento de restablecer una conexión cuando se interrumpe. Un valor de 0 significa que no se intentará ninguna reconexión. |
ConnectRetryInterval | SSPROP_INIT_CONNECT_RETRY_INTERVAL | Un entero comprendido entre 1 y 60, ambos incluidos | 10 | Tiempo en segundos entre cada reintento de conexión. Esta palabra clave se omite si ConnectRetryCount es igual a 0. |
Las páginas siguientes proporcionan más información sobre la configuración de estas propiedades:
- Uso de palabras clave de cadena de conexión con el controlador OLE DB para SQL Server
- Propiedades de inicialización y autorización
Si una aplicación establece una conexión con DBPROP_INIT_PROMPT y después trata de ejecutar una instrucción en una conexión interrumpida, OLE DB Driver no volverá a mostrar el cuadro de diálogo.
Al obtener el estado de conexión mediante la propiedad DBPROP_CONNECTIONSTATUS:
- Durante la recuperación, la propiedad devolverá DBPROPVAL_CS_INITIALIZED.
- Si se produce un error en la recuperación, la propiedad devolverá DBPROPVAL_CS_COMMUNICATIONFAILURE.
Nota:
Si el tiempo de espera del comando (DBPROP_COMMANDTIMEOUT en DBPROPSET_ROWSET) se ha establecido en un valor distinto de cero y la recuperación de la conexión tarda más que el tiempo de espera del comando, la conexión no se recuperará.
Recuperación de la conexión con ejecución asincrónica
Si se usa la ejecución asincrónica y es necesario recuperar la conexión, la recuperación de la conexión se realizará de forma sincrónica antes de que se ejecute la llamada asincrónica. Para obtener más información sobre la ejecución asincrónica, vea Realización de operaciones asincrónicas.
Errores esperados
Si se produce un error en la recuperación de la conexión, puede producirse uno de los siguientes errores:
- La conexión se interrumpe y no es posible realizar la recuperación. El controlador cliente intentó recuperar el error una o más veces y todos los intentos fallaron. Aumente el valor de ConnectRetryCount para aumentar el número de intentos de recuperación.
- El servidor no reconoció un intento de recuperación y no es posible recuperar la conexión.
- El servidor no conservó la versión TDS exacta de cliente solicitada durante un intento de recuperación y no es posible recuperar la conexión.
- El servidor no conservó la versión exacta de servidor solicitada durante un intento de recuperación y no es posible recuperar la conexión.
- La conexión se interrumpe y no es posible realizar la recuperación. El servidor marca la conexión como irrecuperable. No se ha intentado restaurar la conexión.
- La conexión se interrumpe y no es posible realizar la recuperación. El controlador cliente marca la conexión como irrecuperable. No se ha intentado restaurar la conexión.
- El servidor no conservó el cifrado SSL durante un intento de recuperación; la recuperación de la conexión no es posible.