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

Como automatizar backups de bases de dados em SQL Server: passo a passo

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

Este tutorial mostra como automatizar backups de bases de dados em SQL Server, incluindo backups completos e diferenciais, e como agendar tarefas com o SQL Server Agent. Automatizar backups é útil para proteger dados, cumprir SLAs de recuperação e reduzir o erro humano.

Pré-requisitos

  • Instância de SQL Server com o SQL Server Agent activo.
  • Permissões de sysadmin ou permissão para criar jobs e executar BACKUP.
  • Pasta no disco ou partilha onde guardar os ficheiros .bak.
  • SQL Server Management Studio (SSMS) recomendado.

Passo 1: Criar uma pasta para backups e definir permissões

É importante ter uma pasta dedicada para os ficheiros .bak e garantir que a conta do serviço do SQL Server tem permissão de escrita. No Windows, crie por exemplo C:\SQLBackups e atribua Full Control à conta de serviço do SQL Server.

Passo 2: Script T-SQL para backup completo

Crie e teste um script T-SQL para efectuar um backup completo da base de dados. Isto permite validar que o caminho e as permissões estão correctos antes de agendar.

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

Explicação: WITH FORMAT e INIT reescrevem o ficheiro; COMPRESSION reduz espaço (se suportado); STATS mostra o progresso.

Passo 3: Script T-SQL para backup diferencial

Um backup diferencial é mais pequeno e mais rápido. Execute-o após um backup completo e antes de agendar com maior cadência.

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

Erro comum: tentar fazer um diferencial sem um backup completo válido antes — isso provoca falha na restauração.

Passo 4: Criar um Job do SQL Server Agent para backup completo

Utilize o SQL Server Agent para agendar o backup automático. No SSMS, expanda SQL Server Agent > Jobs > New Job. Defina um nome e adicione um Step com o script do Passo 2. Depois crie um Schedule (por exemplo, semanalmente fora do horário de pico).

-- 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

Explicação: este exemplo cria um job, adiciona um passo com o comando T-SQL e agenda semanal às 23:00. Ajuste freq_type/freq_interval/active_start_time conforme necessário.

Passo 5: Criar um Job para backups diferenciais regulares

Crie outro job para executar backups diferenciais com maior frequência (por exemplo, diariamente ou de hora a hora). Utilize o script do Passo 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

Passo 6: Notificações e limpeza de ficheiros antigos

Adicione notificações ao job para enviar e-mail em caso de falha/sucesso e implemente uma política de retenção para não encher o disco (script para apagar .bak antigos).

-- 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

No SQL Server Agent, crie um job step do tipo PowerShell com este script. Erro comum: não testar o script de limpeza manualmente antes de o automatizar.

Verificar o resultado

Valide que os ficheiros .bak são gerados na pasta nas horas previstas e que os jobs aparecem como sucessos no SQL Server Agent. Para confirmar a integridade, restaure um backup para uma base de dados temporária:

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;

Se a restauração for bem-sucedida, os backups estão válidos. Teste também restaurar combinando FULL + DIFFERENTIAL, se aplicável.

Conclusão

Automatizar backups em SQL Server com scripts T-SQL e o SQL Server Agent reduz o risco de perda de dados e simplifica a recuperação. Próximos passos: adicionar backups de logs (transaction log) para RPOs mais baixos, fazer cópias para um local remoto ou para o Azure Blob Storage. Dica: teste sempre a restauração — um backup que não restaura é inútil.