Noticias

Guía de migración de bases de datos SQL Server con Downtime Mínimo

Migrar una base de datos SQL Server grande y en producción desde un servidor local a la nube es una de las tareas más delicadas para cualquier profesional de IT. El miedo a un tiempo de inactividad prolongado, la pérdida de datos o los fallos de seguridad son riesgos reales. Sin embargo, con un plan sólido y las herramientas adecuadas, es posible realizar esta operación de forma segura, eficiente y con una interrupción del servicio de apenas unos minutos.

En esta guía definitiva, te llevaremos de la mano a través de un método probado y seguro que utiliza backups, logs de transacciones y un canal SFTP para garantizar una migración exitosa. No solo te diremos qué hacer, sino por qué lo haces, dándote el conocimiento para resolver problemas y adaptar el proceso a tus necesidades. Olvídate de las ventanas de mantenimiento de horas; te enseñaremos a hacerlo como un profesional.

1. Fase de Preparación del Servidor de Destino (Nube)

Antes de tocar la base de datos de origen, debemos preparar el nuevo hogar en la nube. Una preparación meticulosa aquí es la clave para una ejecución sin problemas más adelante. Nuestro primer objetivo es configurar un punto de entrada seguro y robusto para los archivos de backup mediante un servidor SFTP.

1.1. Instalando el Servidor OpenSSH

La forma más sencilla y nativa de montar un servidor SFTP en Windows Server es a través de la característica OpenSSH. Para instalarla, abre PowerShell como Administrador y ejecuta el siguiente comando. Es mucho más rápido que usar la interfaz gráfica.

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

1.2. Iniciando y Configurando el Servicio SSH

Una vez instalado, debemos asegurarnos de que el servicio se ejecute y se inicie automáticamente con el servidor. Abre la aplicación Servicios, busca en la lista OpenSSH SSH Server, haz clic derecho sobre él y selecciona Propiedades. En Tipo de inicio, elíge Automático, haz clic en Iniciar para arrancarlo ahora mismo y luego en Aceptar. Esto garantiza que si el servidor se reinicia, el servicio SFTP volverá a estar disponible sin intervención manual.

1.3. Configurando el Firewall

La seguridad es primordial. Debemos permitir la entrada por el puerto 22, pero idealmente solo desde la IP de origen. Abre el Firewall de Windows Defender con seguridad avanzada y ve a Reglas de entrada. Busca la regla llamada OpenSSH SSH Server (sshd) y asegúrate de que esté habilitada (icono verde). Para una seguridad extra, haz doble clic en la regla, ve a la pestaña Ámbito y en la sección «Direcciones IP remotas», selecciona «Estas direcciones IP» y añade la IP pública específica del servidor de origen. Esto reduce drásticamente la superficie de ataque, ya que bloquea cualquier intento de conexión desde otras partes del mundo.

1.4. Creando un Usuario y Carpeta Dedicados para SFTP

Por seguridad, nunca uses una cuenta de administrador para estas tareas. Primero, crea la carpeta en el servidor de destino donde se recibirán los backups. Recomendación: No uses el disco del sistema operativo (C:). Crea la carpeta en un disco de datos separado, por ejemplo: D:\Backups_Recibidos. Esto evita llenar el disco del SO y afectar el rendimiento del servidor.

A continuación, crea un usuario local sin privilegios. Abre Administración de equipos > Usuarios y grupos locales > Usuarios. Haz clic derecho y selecciona Usuario nuevo…. Dale un nombre (ej: sftpuser), una contraseña segura, desmarca «El usuario debe cambiar la contraseña…» y marca «La contraseña nunca expira».

1.5. Asegurando y «Enjaulando» al Usuario SFTP

Este es un paso de seguridad crítico. Vamos a forzar a que este usuario solo pueda usar SFTP y que no pueda navegar fuera de su carpeta designada. Para ello, navega a C:\ProgramData\ssh y abre el archivo sshd_config con un editor de texto (ejecutado como Administrador). Pega el siguiente bloque de configuración al final del archivo:

# --- Configuración SFTP para sftpuser ---
Match User sftpuser
    ForceCommand internal-sftp
    PasswordAuthentication yes
    ChrootDirectory D:\Backups_Recibidos
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

Explicación de las directivas:

  • ForceCommand internal-sftp: Obliga a que la sesión sea solo de transferencia de archivos, impidiendo la ejecución de comandos remotos.
  • ChrootDirectory: «Enjaula» al usuario en el directorio especificado, mejorando la seguridad.
  • Las demás directivas (PermitTunnel, Allow...) desactivan funcionalidades de reenvío de puertos que no son necesarias y podrían ser un riesgo de seguridad.

A continuación, ajusta los permisos de la carpeta D:\Backups_Recibidos. Haz clic derecho > Propiedades > Seguridad > Opciones avanzadas. El Propietario debe ser SYSTEM o el grupo Administradores, y el sftpuser solo debe tener permisos de Lectura y ejecución, no de escritura. Finalmente, reinicia el servicio OpenSSH SSH Server para que los cambios surtan efecto.

2. Fase de Preparación del Servidor de Origen (On-Premise)

Con el destino listo, ahora preparamos el servidor desde el que vamos a enviar los datos.

2.1. Instalando el Cliente SFTP (FileZilla)

Para transferir los archivos, necesitamos un programa cliente. En el servidor de origen, abre un navegador y descarga el cliente de FileZilla desde su página oficial. La instalación es sencilla; puedes aceptar las opciones por defecto. Recomendación: Una vez abierto, usa el «Gestor de Sitios» (Archivo > Gestor de Sitios) para guardar la configuración de conexión. Esto te ahorrará tiempo y evitará errores al no tener que teclear los datos cada vez.

2.2. Analizando y Configurando la Base de Datos

Este paso es el corazón de nuestra estrategia de bajo downtime. Necesitamos que la base de datos esté en modo de recuperación FULL para poder capturar los cambios en tiempo real. Conéctate al servidor de origen con SSMS y ejecuta esta consulta para verificar el estado actual:

SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'NombreDeTuBBDD';

Si el resultado es SIMPLE, debes cambiarlo a FULL con el siguiente comando. Si ya está en FULL, puedes omitir este paso. Impacto a considerar: Cambiar a FULL significa que el log de transacciones (.ldf) comenzará a crecer. Debes asegurarte de tener una estrategia de backups de logs periódicos para gestionarlo o suficiente espacio en disco.

ALTER DATABASE [NombreDeTuBBDD] SET RECOVERY FULL WITH NO_WAIT;

¡Atención! Si acabas de cambiar el modelo a FULL, es obligatorio realizar un backup completo inmediatamente. Este backup inicializa la cadena de logs que nos permitirá hacer la «magia» más adelante.

3. Fase del Proceso de Backup y Migración

Dividiremos la migración en dos sub-fases: el trabajo pesado que hacemos sin molestar a nadie, y la ejecución final que dura solo unos minutos.

3.1. Trabajo Previo (Sin Corte de Servicio)

3.1.1. Realizar el Backup Completo en Local

En el servidor de origen, ejecuta el backup completo de la base de datos. Recomendación: Antes del backup, considera ejecutar una comprobación de integridad para asegurarte de que no estás copiando una base de datos corrupta. DBCC CHECKDB ('NombreDeTuBBDD') WITH NO_INFOMSGS; Un resultado sin errores te da la tranquilidad de que la base de datos está sana.

BACKUP DATABASE [NombreDeTuBBDD]
TO DISK = N'D:\Backups\BBDD_COMPLETA.bak' -- Asegúrate de que esta ruta existe
WITH COMPRESSION, STATS = 10, CHECKSUM;
GO

La opción WITH CHECKSUM añade una capa extra de verificación para garantizar que el backup no se corrompa durante la escritura.

3.1.2. Transferir el Backup Completo vía SFTP

Abre FileZilla en el servidor de origen. Usa la IP pública del servidor de destino y las credenciales del sftpuser para conectarte por el puerto 22. Una vez conectado, verás tus archivos locales a la izquierda y los remotos a la derecha. Simplemente arrastra el archivo BBDD_COMPLETA.bak desde tu carpeta local de backups a la carpeta remota. Si la conexión es inestable, clientes como FileZilla o WinSCP pueden reanudar transferencias interrumpidas.

3.1.3. Restaurar el Backup en la Nube en Modo NORECOVERY

En el servidor de destino, vamos a restaurar este backup, pero dejándolo en un estado de «standby». Conéctate con SSMS al servidor de la nube y ejecuta la restauración. Presta especial atención a la cláusula WITH NORECOVERY. Si la olvidas, la base de datos quedará online y no podrás aplicar el log final, obligándote a empezar de nuevo.

RESTORE DATABASE [NombreDeTuBBDD]
FROM DISK = N'D:\Backups_Recibidos\BBDD_COMPLETA.bak'
WITH
    MOVE N'NombreLogicoDelMDF' TO N'D:\MSSQL\Data\NombreDeTuBBDD.mdf',
    MOVE N'NombreLogicoDelLDF' TO N'E:\MSSQL\Log\NombreDeTuBBDD.ldf',
    NORECOVERY,
    REPLACE,
    STATS = 5;
GO

Al terminar, verás la base de datos en la lista con el estado «(Restaurando…)». ¡Perfecto! Está lista para el último paso.

3.2. Ejecución Final (Durante la Ventana de Corte)

3.2.1. Iniciar el Corte y Realizar el Backup Final del Log

Este es el momento de la verdad. Coordina con el cliente el inicio del corte de servicio. Una vez detenida la aplicación, ejecuta este comando en el servidor de origen. Este backup se conoce como «tail-log backup» (backup de la cola del log) y captura hasta la última transacción confirmada.

BACKUP LOG [NombreDeTuBBDD]
TO DISK = N'D:\Backups\BBDD_ULTIMO_LOG.trn'
WITH STATS = 10;
GO

3.2.2. Transferir y Restaurar el Log

Usa FileZilla de nuevo para transferir el pequeño archivo .trn al servidor de destino. Tardará solo unos segundos. Inmediatamente después, en el SSMS del servidor de destino, restaura este log.

RESTORE LOG [NombreDeTuBBDD]
FROM DISK = N'D:\Backups_Recibidos\BBDD_ULTIMO_LOG.trn'
WITH NORECOVERY, STATS = 5;
GO

3.2.3. Poner la Base de Datos Online

Este es el comando final que activa la base de datos en la nube.

RESTORE DATABASE [NombreDeTuBBDD] WITH RECOVERY;

En este instante, el tiempo de inactividad técnico ha terminado. La base de datos está online, completamente actualizada y lista para recibir conexiones.

4. Fase de Cierre, Validación y Plan de Emergencia

4.1. Apuntar la Aplicación y Validar

El paso final es que el equipo del cliente actualice la cadena de conexión de su software para que apunte a la IP del nuevo servidor en la nube. Una vez hecho esto, es crucial realizar una validación funcional completa junto a ellos. Checklist de validación recomendado:

  • Acceso: ¿Pueden los usuarios iniciar sesión?
  • Datos: ¿Se muestran los datos recientes correctamente?
  • Operaciones CRUD: ¿Pueden crear, leer, actualizar y eliminar registros?
  • Funciones clave: ¿Funcionan los informes más importantes o los procesos de negocio críticos?
  • Rendimiento: ¿La aplicación responde con una velocidad aceptable?

4.2. El Plan de Rollback (Plan B)

Un buen profesional siempre tiene un plan de vuelta atrás. Si algo sale catastróficamente mal durante la validación, el proceso es simple: pedir al cliente que vuelva a apuntar su aplicación al servidor original. Como no hemos modificado la base de datos de origen, el sistema volverá a funcionar exactamente como antes del corte.

5. Tareas Post-Migración y Optimización

El trabajo no termina cuando la base de datos está online. Realizar estas tareas asegurará un rendimiento y una estabilidad óptimos a largo plazo.

5.1. Actualizar Estadísticas y Reconstruir Índices

Las estadísticas de la base de datos pueden no estar actualizadas tras la restauración. Ejecuta lo siguiente para ponerlas al día, lo que es vital para el rendimiento de las consultas.

EXEC sp_updatestats;

5.2. Comprobar Usuarios Huérfanos

Es posible que los inicios de sesión (logins) del servidor no estén correctamente mapeados a los usuarios de la base de datos. Ejecuta este comando para detectar «usuarios huérfanos».

EXEC sp_change_users_login 'Report';

5.3. Establecer un Nuevo Plan de Mantenimiento y Backup

La base de datos está ahora en un nuevo hogar. Es fundamental configurar un nuevo plan de backups (completos, diferenciales y de logs) adecuado para el entorno de nube. No asumas que los planes antiguos siguen siendo válidos.

5.4. Monitorización y Desmantelamiento

Monitoriza de cerca el rendimiento del nuevo servidor durante los primeros días. Una vez que estés seguro de que la migración ha sido un éxito y el sistema es estable, puedes planificar el desmantelamiento seguro del antiguo servidor de base de datos.

Conclusión

¡Felicidades! Siguiendo estos pasos, has ejecutado una migración de SQL Server de nivel profesional. Has minimizado el riesgo y el tiempo de inactividad para el cliente, utilizando un método seguro y fiable que garantiza la integridad de los datos. Esta técnica de backup/log shipping manual a través de SFTP demuestra un dominio técnico que diferencia a un simple administrador de un verdadero arquitecto de soluciones. Ahora tienes en tu poder un playbook robusto para enfrentar una de las tareas más temidas en el mundo IT.

Deja una respuesta

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