Usar la creación de reflejo de bases de datos

La creación de reflejo de la base de datos, introducida en SQL Server 2005, es básicamente una solución de software para aumentar la disponibilidad de la base de datos y la redundancia de datos. SQL Server Native Client es compatible de forma implícita con la creación de reflejo de la base de datos, de modo que el programador no necesita escribir ningún código ni tomar ninguna otra medida una vez configurado para la base de datos.

La creación de reflejo de la base de datos, que ha de implementarse para cada base de datos, mantiene una copia de la 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 denomina base de datos principal y la copia en espera se denomina 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 a través de un proceso denominado 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, vea Información general sobre la creación de reflejos de la base de datos.

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

Nota

Para obtener información sobre los intentos de conexión inicial y de reconexión a una base de datos reflejada, vea Conectar clientes a una base de datos reflejada.

Consideraciones de 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 sólo 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 de origen de datos (DSN), una cadena de conexión, o un atributo o propiedad de conexión. SQL Server Native Client no intentará realizar la conmutación por error a la base de datos asociada si no se hace esto.

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 los atributos de conexión y de 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 Usar palabras clave de cadena de conexión con SQL Server Native Client.

La memoria caché de conmutación por error se mantiene mientras esté cargado el proveedor, que es hasta que se llame a CoUninitialize o mientras 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 detalles sobre la compatibilidad del proveedor OLE DB de SQL Server Native Client con la creación de reflejo de la base de datos, vea 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 a través de los atributos de conexión y de cadena de conexión. Concretamente, se ha agregado el atributo SQL_COPT_SS_FAILOVER_PARTNER para utilizarlo con las funciones SQLSetConnectAttr y SQLGetConnectAttr; y se ha agregado la palabra clave Failover_Partner como un nuevo atributo de 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.