Compartir a través de


Volver a conectar una sesión de creación de reflejo de la base de datos

Si una conexión establecida de una sesión de creación de reflejo de la base de datos genera un error por alguna razón; por ejemplo, debido a una conmutación automática por error, y la aplicación intenta volver a conectarse al servidor inicial, el proveedor de acceso a datos puede tratar de volver a conectarse utilizando el nombre de asociado de la conmutación por error almacenado en la caché del cliente. No obstante, volver a conectarse no es un proceso automático. La aplicación debe detectar el error. Después, la aplicación necesita cerrar la conexión con error y abrir una nueva utilizando los mismos atributos de la cadena de conexión. En este punto, el proveedor de acceso a datos redirige la conexión al asociado de conmutación por error. Si la instancia de servidor que se identifica con este nombre es actualmente el servidor de la entidad de seguridad, el intento de conexión suele tener éxito. Si no está claro si una transacción se confirmó o revirtió, la aplicación debe comprobar el estado de la transacción, de la misma forma en que lo hace cuando se vuelve a conectar con una instancia de servidor independiente.

Volver a conectarse se parece bastante a una conexión inicial donde la cadena de conexión suministra un nombre de asociado de conmutación por error. Si el primer intento no tiene éxito, los intentos de conexión se alternan repetidamente entre el nombre del asociado inicial y el nombre del asociado de conmutación por error, hasta que el cliente se conecta al servidor de la entidad de seguridad o el proveedor de acceso a datos agota el tiempo de espera.

[!NOTA]

SQL Server Native Client comprueba que se conecta a una instancia de servidor de la entidad de seguridad, pero no si esta instancia es el asociado de la instancia de servidor especificada en el nombre de asociado inicial de la cadena de conexión.

Si las conexiones utilizan TCP/IP y los clientes usan Windows XP o una versión posterior, el algoritmo de reintento de conexión determina la cantidad de tiempo asignada a los intentos de conexión en cada ciclo. Para obtener más información, vea Usar palabras clave de cadena de conexión con SQL Server Native Client.

Nota importanteImportante

Si se desconecta el cliente de la base de datos, el proveedor de acceso a datos no intentará volver a conectarse. El cliente deberá emitir una nueva solicitud de conexión. Además, si se cierra una aplicación al perder la conexión, la aplicación pierde los nombres de asociado en la caché. Si se perdió la conexión porque el servidor de la entidad de seguridad dejó de estar disponible, la única forma en que la aplicación puede volver a conectarse al servidor reflejado es proporcionando el nombre de asociado de conmutación por error en su cadena de conexión.

Impacto de la redirección en una aplicación cliente

Después de una conmutación por error, el proveedor de acceso a datos redirige la conexión a la instancia de servidor de la entidad de seguridad actual. Sin embargo, la redirección resulta transparente para los clientes. Para un cliente, una conexión redirigida parece una conexión a la instancia de servidor identificada por el nombre de asociado inicial. Cuando el asociado inicial es actualmente el servidor reflejado, es posible que el cliente parezca estar conectado al servidor reflejado y actualizando la base de datos reflejada. No obstante, en realidad se ha redirigido el cliente al asociado de conmutación por error, que es la base de datos de la entidad de seguridad actual, y el cliente está actualizando la nueva base de datos de la entidad de seguridad.

Después de ser redirigido al asociado de conmutación por error, un cliente puede obtener resultados inesperados cuando utiliza una instrucción USE de Transact-SQL para usar otra base de datos. Esto puede producirse si la instancia del servidor de la entidad de seguridad (el asociado de conmutación por error) tiene un conjunto diferente de bases de datos que el servidor principal de la entidad de seguridad (el asociado inicial).