Dentro de Microsoft.comIntroducción a la creación de reflejos de bases de datos

Saleem Hakani

Si su base de datos pierde la conexión, lo más probable es que esté en un aprieto, ¿verdad? No obstante, si utiliza SQL Server 2005 con SP1, la característica de creación de reflejos de bases de datos puede evitar el desastre. Esta nueva tecnología de alta disponibilidad permite mantener un estado de espera activa de su base de datos para usarlo cuando el servidor de base de datos de producción deja de estar

disponible por cualquier motivo. La característica de creación de reflejos de bases de datos funciona mediante la transferencia de registros de transacciones de una base de datos del servidor principal al secundario, que se utiliza para la espera activa. Con la creación de reflejos de bases de datos, los cambios en los datos se documentan en el registro de transacciones antes de que se lleve a cabo cualquier cambio en las páginas de datos reales, de la misma forma en que funcionan siempre las actualizaciones de SQL Server™. Los registros se colocan primero en memoria en el búfer del registro de la base de datos principal y, a continuación, se guardan en disco. Estos registros de transacciones se copian y reproducen en la base de datos del servidor reflejado. Esto hace que los cambios de la base de datos principal se dupliquen en la base de datos reflejada. Tenga en cuenta que sólo la base de datos principal es accesible desde conexiones de cliente. Cuando la base de datos principal recibe los cambios solicitados por los clientes, el servidor principal envía estos cambios activos al servidor reflejado; el reflejo no toma ninguna de estas decisiones. Cuando está habilitada la creación de reflejos de base de datos y la base de datos principal presenta errores, la base de datos reflejada pasa a estar disponible.

Funcionamiento de la creación de reflejos de bases de datos

La creación de reflejos de bases de datos funciona con todo el hardware estándar que admite SQL Server 2005 y garantiza la integridad de los datos en el caso de errores en la base de datos. La base de datos reflejada se actualizará siempre con la transacción actual que se esté procesando en el servidor de base de datos principal. En la figura 1 se ilustra el flujo de datos.

Si deja de funcionar el servidor principal, no se preocupe, ya que el servidor reflejado tiene una copia justa y exacta de la base de datos principal hasta la última transacción realizada. De esta forma, el reflejo siempre está preparado para llevar a cabo la función del servidor principal.

Figura 1 Réplica de datos en el reflejo

Figura 1** Réplica de datos en el reflejo **(Hacer clic en la imagen para ampliarla)

En la topología de creación de reflejos de bases de datos, necesitará un tercer servidor denominado "testigo" en caso de que desee habilitar la conmutación por error automática del servidor principal al reflejado y viceversa. Un servidor testigo puede ser cualquier equipo que admita SQL Server 2005.

Modos de funcionamiento

La topología de creación de reflejos de bases de datos que utilizará dependerá de la seguridad de las transacciones y de los modos de funcionamiento que seleccione. Los modos de funcionamiento que admite la creación de reflejos de bases de datos incluyen la seguridad alta (con o sin conmutación por error automática) y el rendimiento alto.

Seguridad alta (con conmutación por error automática) Este modo admite la disponibilidad máxima de base de datos con transferencia de datos sincrónica y conmutación por error automática con la base de datos reflejada. Este modo de funcionamiento es el más adecuado cuando se dispone de una comunicación rápida y muy confiable entre los servidores principal y reflejado, y hay que llevar a cabo la conmutación por error automática de una sola base de datos. En este esquema, antes de llevar a cabo una transacción, la base de datos principal espera hasta recibir un mensaje del servidor reflejado de que este ha consolidado el registro de la transacción en el disco.

Seguridad alta (sin conmutación por error automática) Este modo admite la disponibilidad máxima de base de datos con transferencia de datos sincrónica pero sin conmutación por error automática con la base de datos reflejada. En este modo, si la instancia del servidor reflejado deja de estar disponible, la instancia del servidor principal seguirá en funcionamiento pero no podrá reflejar los datos. Si el servidor principal deja de funcionar, se suspenderá la creación de reflejos de bases de datos pero podrá forzar manualmente el servicio para conmutar por error.

Rendimiento alto En este modo de funcionamiento, la transferencia de datos es asincrónica. El servidor principal no espera una confirmación del reflejo como hace en los dos modos anteriores. El servidor reflejado hace lo que puede para seguir actualizado con respecto al principal, pero en este punto no se garantiza que las transacciones más recientes del principal se consoliden en el registro de transacciones del servidor reflejado. Si el servidor principal deja de funcionar, se suspenderá la creación de reflejos de bases de datos pero podrá forzar manualmente el servicio para conmutar por error.

Asentamiento de las bases

La configuración de la creación de reflejos de bases de datos es un proceso sencillo si se establece una base sólida mediante las siguientes recomendaciones:

Edición del servidor Compruebe que tanto el servidor principal como el reflejado ejecutan la misma edición de SQL Server 2005; puede utilizar las ediciones Standard o Enterprise.

Disponibilidad del servidor testigo Si planea utilizar la seguridad alta con conmutación por error automática, asegúrese de que el servidor testigo esté disponible y de que SQL Server 2005 (cualquier edición) esté instalado. El servidor testigo se puede ejecutar en cualquier sistema informático confiable que admita SQL Server 2005.

Imagen reflejada Asegúrese de que la instancia del servidor reflejado tiene los mismos trabajos, inicios de sesión, paquetes de SQL Server Integration Service (SSIS), particiones de disco, ubicaciones de archivo y configuración de servidor que la instancia del servidor principal. La configuración del servidor reflejado con los mismos parámetros que el servidor principal permitirá que el servidor reflejado pueda funcionar del mismo modo que el principal.

Recuperación completa Es importante que todas las bases de datos que participen en la creación de reflejos de bases de datos se establezcan con el modelo de recuperación completa.

Master y TempDB Compruebe que todas las instancias de servidor en una topología de creación de reflejos utilizan la misma intercalación master y TempDB y página de códigos. El disponer de una intercalación y páginas de código diferentes puede causar problemas durante la configuración de la creación de reflejos de bases de datos.

Copias de seguridad Si la base de datos que se va a reflejar es grande, primero realice una copia de seguridad completa de la base de datos y, a continuación, restáurela en la instancia del servidor reflejado mediante la opción NORECOVERY.

Planeación por adelantado Determine todos los nombres de servidor, números de puerto, cuentas de seguridad y ubicaciones donde residirán las bases de datos y documéntelos. Consulte la barra lateral "Recomendaciones para la creación de reflejos de bases de datos" para ver una lista de comprobación.

Una vez que haya establecido bien la base, estará preparado para abordar la configuración de creación de reflejos de bases de datos en su entorno.

Recomendaciones para la creación de reflejos de bases de datos

  1. Utilice servidores de socio que tengan las mismas características de CPU, memoria, almacenamiento y capacidad de red.
  2. Asegúrese de que los socios tienen las mismas ediciones de sistema operativo y SQL Server, Service Pack y actualizaciones.
  3. Instale SQL Server en una estructura idéntica de directorios y de unidades en las instancias del servidor principal y del reflejado.
  4. Si el rendimiento se convierte en un problema, considere el uso de una tarjeta dedicada de interfaz de red para distribuir la carga.
  5. Como ha hecho con los servidores de socio, asegúrese de que las instancias de servidor principal y reflejado son idénticas en cuanto a CPU, memoria, capacidad de almacenamiento y de red. Al garantizar que ambos servidores tienen la misma estructura de directorios, el mismo esquema de partición de disco y la misma configuración de SQL Server se elimina la necesidad de cambiarlos durante la conmutación por error en el socio reflejado o con posterioridad a esta tarea.
  6. Asegúrese de que todas las aplicaciones tienen conexión y pueden ejecutar todas las acciones necesarias, así como de que todos los inicios de sesión activos de SQL Server (y sus permisos) en la instancia del servidor principal también están presentes en la del servidor reflejado. Puede utilizar la tarea de transferencia de inicios de sesión para que SQL Server 2005 Integration Services se encargue de este procedimiento.
  7. En cuanto al agente de SQL Server, copie trabajos, alertas, paquetes de SSIS, bases de datos de asistencia, definiciones de servidor vinculadas, dispositivos de copia de seguridad, planes de mantenimiento, perfiles de correo de bases de datos, etc., del servidor principal al servidor reflejado.
  8. Establezca un procedimiento para que siempre que realice cualquier modificación en el servidor principal (como cambios en el hardware, software, configuración de SQL Server o en cualquier objeto de base de datos), automáticamente repetirá o replicará y transferirá estos cambios en la instancia del servidor reflejado.
  9. Realice varias conmutaciones por error de prueba antes de realizar la implementación.

Configuración

Configuremos la creación de reflejos de bases de datos mediante el modo de funcionamiento de seguridad alta con conmutación por error automática. Como se ha mencionado, esto significa que es necesaria una instancia de servidor testigo. Para este ejemplo, voy a utilizar los nombres de base de datos y servidor que aparecen en la figura 2, que también especifica cada función del servidor.

Recuerde que debido a que la configuración puede influir notablemente en el rendimiento cuando el registro de transacciones pendientes se copia del servidor principal al reflejado, es posible que quiera realizar la configuración inicial de la creación de reflejos de bases de datos durante las horas de menor actividad.

La configuración del reflejo consta de tres pasos: la creación de extremos en los servidores implicados, la realización de una copia de seguridad y restauración de la base de datos principal, y la habilitación de las sesiones de creación de reflejos en todos los servidores implicados.

Antes de establecer una sesión de creación de reflejos de bases de datos, debe establecer el mecanismo de comunicación entre todos los servidores implicados en este proceso. Para hacerlo, cree los extremos en todos los servidores mediante la ejecución de esta instrucción tanto en ServerA como en ServerB:

Create Endpoint Mirroring_Endpoint
State= Started as TCP (Listener_Port=5001)
For Database_Mirroring (Role=Partner);

Para ServerC (que actuará como testigo), cambie (Role= Partner) a (Role = Witness) y ejecute la instrucción. De esta forma se controla el puerto TCP que utiliza cada instancia para escuchar.

Para el siguiente paso, realice una copia de seguridad completa de la base de datos seguida de una copia de seguridad del registro de la base de datos DBM_Demo del servidor principal para, a continuación, restaurarla en la instancia del servidor reflejado mediante la opción NORECOVERY. El uso de NORECOVERY garantiza que la base de datos reflejada se encontrará en un estado de restauración, por lo que se pueden aplicar los registros de transacciones.

Esta es la instrucción T-SQL para realizar una copia de seguridad completa de la base de datos DBM_Demo de ServerA (la instancia del servidor principal):

Backup Database DBM_Demo to DISK='E:\MSSQL\Bak\DBM_Demo_FULL.bak';

Si hay algún cambio en la base de datos tras realizar la copia de seguridad completa de la misma, es posible que tenga que realizar una copia de seguridad de registro de la base de datos; de lo contrario, esto puede no ser necesario.

Si lo es, puede utilizar la siguiente instrucción T-SQL para realizar una copia de seguridad de registro de la base de datos DBM_Demo de ServerA:

Backup Log DBM_Demo to Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak';

Una vez que haya realizado todas las copias de seguridad, traslade los archivos de copia de seguridad a ServerB o a una ubicación compartida que le permita restaurar estas copias en ServerB. A continuación, también debería restaurar cualquier copia de seguridad de registros de transacciones que haya realizado desde la última copia de seguridad completa de base de datos de ServerA.

Puede utilizar la siguiente instrucción T-SQL para restaurar las copias de seguridad completas y de registro en ServerB mediante la opción NORECOVERY:

--Restore full database backup on the mirror --server instance
Restore Database DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_FULL.bak' with NORECOVERY;

Por último, utilice la siguiente instrucción T-SQL para restaurar la copia de seguridad del registro en el servidor reflejado mediante la opción NORECOVERY:

Restore Log DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak' with NORECOVERY;

Cuando termine de restaurar todas las copias de seguridad, estará preparado para el paso final, que consiste en habilitar la sesión de creación de reflejos de bases de datos en todos los servidores implicados.

La configuración de una sesión de creación de reflejos de bases de datos requiere una dirección de red de servidor para cada una de las instancias de servidor. Esta dirección debe identificar la instancia al proporcionar una dirección de sistema y el número de puerto en el que escucha la instancia. La sintaxis de una dirección de red de servidor tiene un formato parecido al siguiente:

TCP://<System-address>:<port>

<System-address>: es un nombre de dominio completo o una dirección IP; puede obtener esta información si ejecuta IPCONFIG en el equipo local en una ventana de símbolo del sistema.

El <puerto> lo estableció al crear los extremos.

Puede iniciar la sesión de creación de reflejos de bases de datos en ServerB de la siguiente forma:

Alter Database DBM_Demo
Set Partner= 'TCP://ServerA.com:5001';

A continuación, ejecute la siguiente instrucción T-SQL para iniciar la sesión en ServerA:

Alter Database DBM_Demo
Set Partner='TCP://ServerB.com:5001';

Seguidamente, habilite la sesión de creación de reflejos en ServerC (servidor testigo), de esta forma:

Alter Database DBM_Demo
Set Witness='TCP://ServerC.com:5001';

La creación de reflejos de bases de datos está preparada para ejecutarse en su entorno. Cualquier objeto de base de datos que se haya agregado o modificado en la base de datos DBM_Demo se transferirá a la copia de ServerB. Sin embargo, si la base de datos de ServerA deja de estar disponible, puede producirse una conmutación por error, lo que hará que se cambie la función de la base de datos reflejada por la función de la principal.

Ahora que tiene configurada y en ejecución la creación de reflejos de bases de datos, siempre dispondrá de una espera activa en caso de que la base de datos de producción deje de funcionar.

Saleem Hakani trabaja como ingeniero sénior para Microsoft y cuenta con más de 14 años de experiencia en sistemas de base de datos. Fundó y dirige la comunidad de SQL de Microsoft y es responsable de proporcionar la automatización y los estándares de SQL Server a través de la organización Windows Live. Saleem ha obtenido las certificaciones MCTS, MCDBA y MCSA. Puede ponerse en contacto con él en Saleem@sqlcommunity.net.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.