Uso de la creación de reflejo de la base de datos en SQL Server Native Client

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Nota:

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. En su lugar, use Grupos de disponibilidad AlwaysOn.

Importante

SQL Server Native Client (a menudo abreviado SNAC) se ha quitado de SQL Server 2022 (16.x) y SQL Server Management Studio 19 (SSMS). No se recomienda SQL Server Native Client (SQLNCLI o SQLNCLI11) ni el proveedor OLE DB de Microsoft heredado para SQL Server (SQLOLEDB) para el desarrollo de nuevas aplicaciones. Cambie al nuevo controlador OLE DB de Microsoft (MSOLEDBSQL) para SQL Server o al controlador ODBC de Microsoft ODBC Driver for SQL Server más reciente de ahora en adelante. Para SQLNCLI que se incluye como componente de motor de base de datos de SQL Server (versiones 2012 a 2019), consulte esta excepción de ciclo de vida de soporte técnico.

La creación de reflejo de la base de datos, introducida en SQL Server 2005 (9.x), es una solución de software para aumentar la disponibilidad de la base de datos y la redundancia de datos. SQL Server Native Client proporciona compatibilidad implícita con la creación de reflejo de la base de datos, por lo que el desarrollador no necesita escribir ningún código ni realizar ninguna otra acción una vez que se haya configurado para la base de datos.

La creación de reflejo de la base de datos, implementada para cada base de datos, conserva una copia de una base de datos de producción de SQL Server en un servidor en espera. Este servidor puede ser un servidor en estado de espera activa o semiactiva, dependiendo de la configuración y del estado de la sesión de creación de reflejo de la base de datos. Un servidor en estado de espera activa admite la conmutación por error rápida sin pérdida de las transacciones confirmadas, mientras que un servidor en estado de espera semiactiva admite la acción de forzar el servicio (con posible pérdida de datos).

La base de datos de producción se llama base de datos principal y la copia en espera se llama base de datos reflejada. La base de datos principal y la base de datos reflejada deben residir en instancias independientes de SQL Server (instancias del servidor) y, si es posible, en equipos diferentes.

La instancia del servidor de producción, denominado servidor principal, se comunica con la instancia del servidor en espera, denominado servidor reflejado. Los servidores principal y reflejado actúan como asociados dentro de una sesión de creación de reflejo de la base de datos. Si el servidor principal genera un error, el servidor reflejado puede convertir su base de datos en la base de datos principal mediante un proceso llamado conmutación por error. Por ejemplo, Partner_A y Partner_B son dos servidores asociados, con la base de datos principal inicialmente en Partner_A como servidor principal y la base de datos reflejada en Partner_B como servidor reflejado. Si Partner_A se queda sin conexión, la base de datos de Partner_B puede realizar la conmutación por error para convertirse en la base de datos principal actual. Cuando Partner_A se vuelve a unir a la sesión de creación de reflejo, se convierte en el servidor reflejado y su base de datos pasa a ser la base de datos reflejada.

Las configuraciones alternativas de creación de reflejo de la base de datos proporcionan diferentes niveles de rendimiento y de seguridad de los datos, y admiten varias formas de conmutación por error. Para obtener más información, consulte Creación de reflejo de la base de datos (SQL Server).

Se puede utilizar un alias al especificar el nombre de la base de datos reflejada.

Nota

Para más información sobre los intentos de conexión inicial y de reconexión a una base de datos reflejada, consulte Conectar clientes a una sesión de creación de reflejo de la base de datos (SQL Server).

Consideraciones sobre la programación

Cuando el servidor principal genera un error, la aplicación cliente recibe mensajes de error como respuesta a las llamadas a la API que indican que se ha perdido la conexión a la base de datos. Cuando esto sucede, se pierde cualquier cambio no confirmado en la base de datos y se revierte la transacción actual. Si esto se produce, la aplicación debe cerrar la conexión (o liberar el objeto de origen de datos) y volverla a abrir. La conexión se redirige de forma transparente a la base de datos reflejada, que ahora actúa como servidor principal.

Cuando se establece una conexión, el servidor principal envía la identidad de su asociado de conmutación por error al cliente que se va a utilizar cuando se produzca la conmutación por error. Si una aplicación intenta establecer una conexión después de producirse un error en el servidor principal, el cliente no conocerá la identidad del asociado de conmutación por error. Para que los clientes tengan la oportunidad de solucionar esta situación, una propiedad de inicialización y una palabra clave de cadena de conexión asociada permiten al cliente especificar por sí solo la identidad del asociado de conmutación por error. El atributo de cliente solamente se utiliza en esta situación; si el servidor principal está disponible, no se utiliza. Si el servidor asociado de conmutación por error proporcionado por el cliente no corresponde a un servidor que actúa como asociado de conmutación por error, el servidor rechaza la conexión. Para que las aplicaciones puedan adaptarse a los cambios de configuración, se puede determinar la identidad del asociado de conmutación por error real inspeccionando el atributo una vez establecida la conexión. Conviene almacenar en la memoria caché la información del asociado para actualizar la cadena de conexión o concebir una estrategia de reintento en caso de que no se consiga establecer una conexión en el primer intento.

Nota

Debe especificar explícitamente la base de datos que va a ser utilizada por una conexión si desea usar esta característica en un nombre del origen de datos (DSN), una cadena de conexión, o un atributo o propiedad de conexión. SQL Server Native Client no intentará conmutar por error a la base de datos del asociado si no se realiza.

La creación de reflejo es una característica de la base de datos. Puede darse el caso de que las aplicaciones que utilizan varias bases de datos no puedan utilizar esta característica.

Además, los nombres de servidor no distinguen mayúsculas de minúsculas, pero los nombres de base de datos sí lo hacen. Debe asegurarse, por lo tanto, de utilizar la misma grafía en los nombres de origen de datos (DSN) y en las cadenas de conexión.

Proveedor OLE DB de SQL Server Native Client

El proveedor OLE DB de SQL Server Native Client admite la creación de reflejo de la base de datos a través de atributos de conexión y cadena de conexión. Se ha agregado la propiedad SSPROP_INIT_FAILOVERPARTNER al conjunto de propiedades DBPROPSET_SQLSERVERDBINIT, y la palabra clave FailoverPartner es un nuevo atributo de cadena de conexión para DBPROP_INIT_PROVIDERSTRING. Para obtener más información, vea Uso de palabras clave de cadena de Conectar ion con SQL Server Native Client.

La caché de conmutación por error se mantiene siempre que se cargue el proveedor, que es hasta que se llame a CoUninitialize o siempre que la aplicación tenga una referencia a algún objeto administrado por el proveedor OLE DB de SQL Server Native Client, como un objeto de origen de datos.

Para obtener más información sobre la compatibilidad del proveedor OLE DB de SQL Server Native Client para la creación de reflejo de la base de datos, consulte Propiedades de inicialización y autorización.

Controlador ODBC de SQL Server Native Client

El controlador ODBC de SQL Server Native Client admite la creación de reflejo de la base de datos mediante la conexión y los atributos cadena de conexión. En concreto, el atributo SQL_COPT_SS_FAILOVER_PARTNER se ha agregado para su uso con las funciones SQLSet Conectar Attr y SQLGet Conectar Attr; y la palabra clave Failover_Partner se ha agregado como un nuevo atributo cadena de conexión.

La memoria caché de conmutación por error se mantiene mientras la aplicación tiene asignado por lo menos un identificador de entorno. En cambio, se pierde cuando se cancela la asignación del último identificador de entorno.

Nota:

El Administrador de controladores ODBC se ha mejorado para admitir la especificación del nombre del servidor de conmutación por error.

Consulte también

Características de SQL Server Native Client
Conectar clientes a una sesión de creación de reflejo de la base de datos (SQL Server)
Creación de reflejo de la base de datos (SQL Server)