(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo automatizar copias de seguridad de bases de datos en SQL Server: paso a paso

João Barros 21 de August de 2026 5 min de lectura

Este tutorial muestra cómo automatizar copias de seguridad de bases de datos en SQL Server, incluyendo copias completas y diferenciales, y cómo programar tareas con el SQL Server Agent. Automatizar copias de seguridad es útil para proteger datos, cumplir SLAs de recuperación y reducir el error humano.

Requisitos previos

  • Instancia de SQL Server con el SQL Server Agent activo.
  • Permisos de sysadmin o permiso para crear jobs y ejecutar BACKUP.
  • Carpeta en el disco o recurso compartido donde guardar los archivos .bak.
  • SQL Server Management Studio (SSMS) recomendado.

Paso 1: Crear una carpeta para backups y definir permisos

Es importante tener una carpeta dedicada para los archivos .bak y asegurarse de que la cuenta del servicio del SQL Server tiene permiso de escritura. En Windows, cree por ejemplo C:\SQLBackups y asigne Full Control a la cuenta de servicio del SQL Server.

Paso 2: Script T-SQL para backup completo

Crear y probar un script T-SQL para realizar un backup completo de la base de datos. Esto permite validar que la ruta y los permisos están correctos antes de programar.

BACKUP DATABASE [MinhaBaseDados]
TO DISK = N'C:\SQLBackups\MinhaBaseDados_FULL.bak'
WITH FORMAT, INIT, NAME = N'MinhaBaseDados-FULL',
     COMPRESSION, STATS = 10;

Explicación: WITH FORMAT e INIT sobrescriben el archivo; COMPRESSION reduce espacio (si está soportado); STATS muestra el progreso.

Paso 3: Script T-SQL para backup diferencial

Un backup diferencial es más pequeño y más rápido. Ejecútelo después de un backup completo y antes de programarlo con mayor cadencia.

BACKUP DATABASE [MinhaBaseDados]
TO DISK = N'C:\SQLBackups\MinhaBaseDados_DIFF.bak'
WITH DIFFERENTIAL, INIT, NAME = N'MinhaBaseDados-DIFF', STATS = 10;

Error común: intentar hacer un diferencial sin un backup completo válido previo — eso provoca fallo en la restauración.

Paso 4: Crear un Job del SQL Server Agent para backup completo

Utilice el SQL Server Agent para programar el backup automático. En SSMS, expanda SQL Server Agent > Jobs > New Job. Defina un nombre y añada un Step con el script del Paso 2. Después cree un Schedule (por ejemplo, semanalmente fuera del horario punta).

-- Exemplo de criação de job via T-SQL (simplificado)
USE msdb;
GO
EXEC dbo.sp_add_job @job_name = N'Backup_MinhaBaseDados_Full';
GO
EXEC sp_add_jobstep @job_name = N'Backup_MinhaBaseDados_Full',
    @step_name = N'FullBackup',
    @subsystem = N'TSQL',
    @command = N'BACKUP DATABASE [MinhaBaseDados] TO DISK = N''C:\\SQLBackups\\MinhaBaseDados_FULL.bak'' WITH FORMAT, INIT, COMPRESSION, STATS = 10;';
GO
EXEC sp_add_jobschedule @job_name = N'Backup_MinhaBaseDados_Full',
    @name = N'WeeklyFull',
    @freq_type = 8, -- weekly
    @freq_interval = 1, -- every week
    @active_start_time = 230000; -- 23:00
GO
EXEC sp_add_jobserver @job_name = N'Backup_MinhaBaseDados_Full';
GO

Explicación: este ejemplo crea un job, añade un paso con el comando T-SQL y programa semanalmente a las 23:00. Ajuste freq_type/freq_interval/active_start_time según sea necesario.

Paso 5: Crear un Job para backups diferenciales regulares

Crear otro job para ejecutar backups diferenciales con mayor frecuencia (por ejemplo, diariamente o cada hora). Utilice el script del Paso 3 como Step.

-- Exemplo T-SQL para job diferencial (resumido)
USE msdb;
GO
EXEC dbo.sp_add_job @job_name = N'Backup_MinhaBaseDados_Diff';
GO
EXEC sp_add_jobstep @job_name = N'Backup_MinhaBaseDados_Diff',
    @step_name = N'DiffBackup',
    @subsystem = N'TSQL',
    @command = N'BACKUP DATABASE [MinhaBaseDados] TO DISK = N''C:\\SQLBackups\\MinhaBaseDados_DIFF.bak'' WITH DIFFERENTIAL, INIT, STATS = 10;';
GO
EXEC sp_add_jobschedule @job_name = N'Backup_MinhaBaseDados_Diff',
    @name = N'DailyDiff',
    @freq_type = 4, -- daily
    @active_start_time = 020000; -- 02:00
GO
EXEC sp_add_jobserver @job_name = N'Backup_MinhaBaseDados_Diff';
GO

Paso 6: Notificaciones y limpieza de archivos antiguos

Añada notificaciones al job para enviar correo en caso de fallo/éxito e implemente una política de retención para no llenar el disco (script para eliminar .bak antiguos).

-- Exemplo simples para apagar ficheiros com mais de 7 dias (PowerShell via job step)
$path = 'C:\SQLBackups'
Get-ChildItem -Path $path -Filter *.bak | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item -Verbose

En el SQL Server Agent, cree un job step del tipo PowerShell con este script. Error común: no probar el script de limpieza manualmente antes de automatizarlo.

Verificar el resultado

Valide que los archivos .bak se generan en la carpeta en las horas previstas y que los jobs aparecen como éxitos en el SQL Server Agent. Para confirmar la integridad, restaure un backup a una base de datos temporal:

RESTORE DATABASE [MinhaBaseDados_Teste]
FROM DISK = N'C:\SQLBackups\MinhaBaseDados_FULL.bak'
WITH MOVE 'MinhaBaseDados_Data' TO 'C:\SQLData\MinhaBaseDados_Teste.mdf',
     MOVE 'MinhaBaseDados_Log' TO 'C:\SQLData\MinhaBaseDados_Teste_log.ldf',
     REPLACE, STATS = 10;

Si la restauración tiene éxito, las copias son válidas. Pruebe también restaurar combinando FULL + DIFFERENTIAL, si aplica.

Conclusión

Automatizar copias de seguridad en SQL Server con scripts T-SQL y el SQL Server Agent reduce el riesgo de pérdida de datos y simplifica la recuperación. Próximos pasos: añadir backups de logs (transaction log) para RPOs más bajos, hacer copias a una ubicación remota o a Azure Blob Storage. Consejo: pruebe siempre la restauración — una copia que no restaura es inútil.