Idioma

Reflejo de base de datos en SQL Server

La creación de reflejo de la base de datos en SQL Server permite mantener una copia o reflejo de una base de datos de SQL Server en un servidor en espera. La duplicación garantiza que existan dos copias independientes de los datos en todo momento, lo que proporciona una alta disponibilidad y una redundancia completa de los datos. Una vez configurada la duplicación de bases de datos para una base de datos de SQL Server, Microsoft.Data.SqlClient la admite sin necesidad de código de cliente adicional. También puede especificar un servidor asociado de conmutación por error en la ConnectionString propiedad .

Se produce la siguiente secuencia de eventos cuando el objeto SqlConnection se dirige a una base de datos configurada para la duplicación:

  1. La aplicación cliente se conecta correctamente a la base de datos principal y el servidor devuelve el nombre del servidor asociado, que se almacena en caché en el cliente.

  2. Si se produce un error en el servidor que contiene la base de datos principal o se interrumpe la conectividad, se pierde el estado de la transacción y la conexión. La aplicación cliente intenta volver a establecer una conexión con la base de datos principal y produce un error.

  3. A continuación, la aplicación cliente intenta establecer una conexión a la base de datos duplicada en el servidor asociado de forma transparente. Si se realiza correctamente, la conexión se redirige a la base de datos duplicada, que luego se convierte en la nueva base de datos principal.

Especificación del asociado de conmutación por error en la cadena de conexión

Si proporciona el nombre de un servidor asociado de conmutación por error en la cadena de conexión, el cliente intentará establecer de forma transparente una conexión con el asociado de conmutación por error si la base de datos principal no está disponible cuando la aplicación cliente se conecta por primera vez.

";Failover Partner=PartnerServerName"

Si omite el nombre del servidor asociado de conmutación por error y la base de datos principal no está disponible cuando la aplicación cliente se conecta por primera vez, el proveedor genera SqlException.

Cuando el SqlConnection se abre correctamente, el servidor devuelve el nombre del socio de conmutación por error. Ese nombre reemplaza el valor de la cadena de conexión.

Nota:

Debe especificar explícitamente el nombre del catálogo o la base de datos inicial en la cadena de conexión en los escenarios de duplicación de la base de datos. Si el cliente recibe información de conmutación por error sobre una conexión para la que no se ha especificado de forma explícita un catálogo o una base de datos inicial, dicha información no se almacena en caché y la aplicación no intenta conmutar por error si el servidor principal da error. Si una cadena de conexión tiene un valor para el asociado de conmutación por error, pero no para el catálogo o la base de datos inicial, se genera una excepción InvalidArgumentException.

Recuperación del nombre del servidor actual

Después de una conmutación por error, use la DataSource propiedad para recuperar el nombre del servidor conectado. En el fragmento de código siguiente se supone que la variable de conexión hace referencia a una instancia abierta de la clase SqlConnection.

Cuando se produce un evento de conmutación por error y la conexión se cambia al servidor espejo, la DataSource propiedad se actualiza para reflejar el nombre del espejo.

Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;

Comportamiento del reflejo de SqlClient

El cliente siempre intenta conectarse al servidor principal actual. Si se produce un error, lo intenta al asociado de conmutación por error. Si la base de datos reflejada ya se ha cambiado al rol principal en el servidor asociado, la conexión se realiza correctamente y la nueva asignación de reflejo principal se envía al cliente y se almacena en caché durante la llamada a AppDomain. No se almacena en el almacenamiento persistente y no está disponible para las conexiones posteriores en un proceso o diferente AppDomain . Sin embargo, está disponible para las conexiones posteriores dentro del mismo AppDomain. Tenga en cuenta que otro proceso AppDomain que se ejecuta en el mismo equipo o en otro distinto tiene siempre su propio grupo de conexiones, y esas conexiones no se restablecen. En ese caso, si la base de datos principal deja de funcionar, cada proceso o AppDomain falla una vez, y el conjunto se borra automáticamente.

Nota:

El soporte de reflejo en el servidor se configura por cada base de datos. Si las operaciones de manipulación de datos se ejecutan en otras bases de datos no incluidas en el conjunto principal o de duplicados, ya sea mediante nombres de varias partes o cambiando la base de datos actual, los cambios en estas otras bases de datos no se propagan en caso de error. No se genera ningún error cuando se modifican datos en una base de datos que no está duplicada. El desarrollador debe evaluar el posible impacto de esas operaciones.

Recursos de reflejo de bases de datos

Para obtener documentación conceptual e información sobre la configuración, la implementación y la administración de la duplicación, vea los siguientes recursos en la documentación de SQL Server.

Recurso Descripción
Reflejo de base de datos Describe cómo establecer y configurar la duplicación en SQL Server.

Consulte también