Restaurar una base de datos en AlwaysOn

En entornos de alta disponibilidad con Always On Availability Groups (AG), realizar operaciones de backup y restore requiere cierta planificación para evitar interrupciones y asegurar la correcta sincronización de las réplicas.
En este artículo os compartimos una guía paso a paso para restaurar una base de datos en AlwaysOn desde producción hacia un entorno de preproducción, manteniendo la integridad del AG y minimizando riesgos.

Antes de cualquier restauración, debemos crear un backup completo de la base de datos en producción. Este backup será nuestra fuente de datos para el entorno de destino:

BACKUP DATABASE [TU_BBDD]
TO DISK='\\TU_SERVER_DE_PREPRODUCCION\BCK\TU_BBDD_produccion.bak'
WITH INIT, STATS=10, COPY_ONLY, COMPRESSION;

Además, es necesario obtener los nombres lógicos de los archivos de la base de datos, ya que los necesitaremos para el restore posterior:

SELECT name AS logical_name, physical_name, type_desc
FROM sys.database_files;

Recomendamos guardar esta información en un Excel o documento de referencia para evitar errores al mover archivos en el servidor destino.

En el entorno de preproducción realizamos primero un backup de seguridad de la base actual, por si necesitamos revertir:

BACKUP DATABASE [TU_BBDD]
TO DISK='C:\TEMP\BCK\TU_BBDD_PRE_RESTORE.bak'
WITH INIT, STATS=10, COPY_ONLY, COMPRESSION;

Si la base ya está dentro del AG, debemos removerla temporalmente:

ALTER AVAILABILITY GROUP [TU_AG] REMOVE DATABASE [TU_BBDD];

Luego, ponemos la base de datos OFFLINE para cortar conexiones activas:

ALTER DATABASE [TU_BBDD] SET OFFLINE WITH ROLLBACK IMMEDIATE;

Restauramos la base de datos en AlwaysOn

Con el entorno listo, restauramos el backup desde producción. Es fundamental indicar correctamente las rutas y nombres lógicos:

RESTORE DATABASE [TU_BBDD]
FROM DISK = 'C:\TEMP\BCK\TU_BBDD_produccion.bak'
WITH
    MOVE 'TU_BBDD' TO 'E:\DATOS\TU_BBDD.mdf',
    MOVE 'TU_BBDD_log' TO 'F:\LOG\TU_BBDD_log.ldf',
    STATS = 10, REPLACE, RECOVERY;

Una vez finalizado el restore, ponemos la base de datos ONLINE:

ALTER DATABASE [TU_BBDD] SET ONLINE;

Y nos aseguramos de que tenga el modelo de recuperación FULL:

ALTER DATABASE [TU_BBDD] SET RECOVERY FULL WITH NO_WAIT;

Tras la restauración, debemos realizar un backup full y de log (desde SQL Agent o manualmente).
Finalmente, volvemos a agregar la base de datos al Availability Group.
Esto requiere habilitar el modo SQLCMD en SSMS y ejecutar el siguiente script:

Restaurar una base de datos en AlwaysOn
:Connect TU_SERVER_PRIMARIO\TU_INSTANCIA
USE [master];
GO

ALTER AVAILABILITY GROUP [TU_AG]
MODIFY REPLICA ON N'TU_SERVER_SECUNDARIO\TU_INSTANCIA' WITH (SEEDING_MODE = AUTOMATIC);
GO
ALTER AVAILABILITY GROUP [TU_AG]
ADD DATABASE [TU_BBDD];
GO

:Connect TU_SERVER_SECUNDARIO\TU_INSTANCIA

ALTER AVAILABILITY GROUP [TU_AG] GRANT CREATE ANY DATABASE;
GO

Finalmente, verificamos la sincronización:

SELECT DB_NAME(database_id), synchronization_state_desc
FROM sys.dm_hadr_database_replica_states
WHERE group_id = (SELECT group_id FROM sys.availability_groups WHERE name = 'TU_AG');

Con este procedimiento conseguimos restaurar una base de datos en AlwaysOn desde producción a un entorno de preproducción sin comprometer la disponibilidad ni la integridad de las réplicas.

La clave está en planificar bien los pasos, manejar correctamente los backups y nombres lógicos, y asegurarnos de reintegrar la base al AG correctamente.

Este es un proceso delicado que no todo el mundo puede realizar. Por es necesario contar con expertos en bases de datos SQL Server como nosotros. Si necesitas realizar alguna operativa como esta o que revisemos tu entorno. Contacta con nosotros sin compromiso.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *