Compartir a través de


Creación de reflejos de base de datos en SQL Server

Descargar ADO.NET

Nota:

Creación de reflejo de la base de datos en SQL Server es una tecnología distinta a Creación de reflejo de la base de datos de Microsoft Fabric.

La creación de reflejo de la base de datos de SQL Server permite mantener una copia, o reflejo, de una base de datos de SQL Server en un servidor en espera. La creación de reflejos garantiza que existan dos copias independientes de los datos en todo momento, lo que proporciona alta disponibilidad y redundancia completa de los datos. El proveedor SqlClient de Microsoft para SQL Server proporciona compatibilidad implícita para la creación de reflejos de la base de datos. El desarrollador no tiene que hacer nada una vez que el cliente se haya configurado para una base de datos SQL Server. Además, el objeto SqlConnection admite un modo de conexión explícita que permite proporcionar el nombre de un servidor de asociado de conmutación por error en ConnectionString.

La siguiente secuencia simplificada de eventos se produce para un objeto SqlConnection que tiene como destino una base de datos configurada para la creación de reflejo:

  1. La aplicación cliente se conecta correctamente a la base de datos principal y el servidor devuelve el nombre del servidor de 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 de asociado de conmutación por error en la cadena de conexión y la base de datos principal no está disponible cuando se conecta la aplicación cliente, el cliente intentará establecer de forma transparente una conexión con el asociado de conmutación por error.

";Failover Partner=PartnerServerName"

Si omite el nombre del servidor de 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, se inicia una excepción SqlException.

Cuando se abre una conexión SqlConnection correctamente, el servidor devuelve el nombre del asociado de conmutación por error, que reemplaza los valores proporcionados en 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

Cuando se produce una conmutación por error, puede recuperar el nombre del servidor al que está conectada la conexión actual mediante la propiedad DataSource de un objeto SqlConnection. El siguiente fragmento de código recupera el nombre del servidor activo, dando por sentado que la variable de conexión hace referencia a una conexión SqlConnectionabierta.

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

string activeServer = connection.DataSource;

Comportamiento de creación de reflejo de SqlClient

El cliente siempre intenta conectarse al servidor principal. 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 de forma permanente y no está disponible para las posteriores conexiones en otro dominio de aplicación o proceso. Pero está disponible para las posteriores conexiones en el mismo dominio de aplicación. Otro dominio de aplicación o proceso que se ejecute en el mismo equipo o en otro tiene siempre su grupo de conexiones, que no se restablecen. En ese caso, si la base de datos principal se interrumpe, cada proceso o AppDomain da error una vez y el grupo se borra automáticamente.

Nota:

La compatibilidad con la duplicación en el servidor se configura por 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.

Pasos siguientes

Recursos de creación de reflejo de la base de datos

Para obtener documentación conceptual e información sobre cómo configurar, implementar y administrar la creación de reflejo, vea los siguientes recursos en la documentación de SQL Server.

Recurso Descripción
Duplicación de base de datos Describe cómo establecer y configurar la creación de reflejo en SQL Server.