Como fazer backup do SQL Server, inclusive Express: completo, diferencial e de log com T-SQL, agendamento sem SQL Agent e teste de restauração.
Para que serve
Boa parte dos ERPs brasileiros roda sobre Microsoft SQL Server, muitas vezes na edição Express, que não tem o SQL Server Agent para agendar tarefas. Este artigo mostra como fazer backup do SQL Server (completo, diferencial e de log) com T-SQL, agendá-los mesmo na Express, verificar se o arquivo é restaurável e mandar a cópia para fora do servidor. Vale para SQL Server 2019, 2022 e 2025 em Windows Server 2022/2025. Para ajustes de memória, tempdb e discos, veja também o artigo «Boas práticas de SQL Server em servidor dedicado: disco, memória, tempdb e backup».
Pré-requisitos
- Acesso de administrador ao Windows e login com permissão
sysadmin(oudb_backupoperator) no SQL Server. - SQL Server Management Studio (SSMS) ou o utilitário
sqlcmd. - Uma pasta de backup em volume diferente do volume dos dados, por exemplo
D:\Backup\SQL. A conta de serviço do SQL Server (ex.:NT Service\MSSQLSERVERouNT Service\MSSQL$SQLEXPRESS) precisa de permissão de gravação nela.
Entenda o modelo de recuperação
| Modelo | O que permite | Cuidado |
|---|---|---|
| SIMPLE | Restaurar até o último backup completo ou diferencial | Perde tudo o que foi feito depois do último backup |
| FULL | Restaurar até um minuto específico, com backups de log | Sem backup de log frequente, o arquivo .ldf cresce até encher o disco |
Confira o modelo de cada banco:
SELECT name, recovery_model_desc FROM sys.databases;
Como fazer backup do SQL Server passo a passo
-
Backup completo manual. No SSMS, abra uma nova consulta:
BACKUP DATABASE [ERP] TO DISK = N'D:\Backup\SQL\ERP_FULL_20261008.bak' WITH CHECKSUM, INIT, STATS = 10;CHECKSUMvalida as páginas durante a leitura e grava somas de verificação no arquivo. Nas edições Standard e Enterprise, acrescenteCOMPRESSIONpara reduzir bastante o tamanho; a edição Express não oferece compressão de backup. No SQL Server 2025 há também o algoritmo ZSTD:WITH COMPRESSION (ALGORITHM = ZSTD, LEVEL = LOW). -
Diferencial e log. O diferencial guarda o que mudou desde o último completo; o de log guarda as transações desde o último backup de log (só no modelo FULL):
BACKUP DATABASE [ERP] TO DISK = N'D:\Backup\SQL\ERP_DIFF_20261008_1200.bak' WITH DIFFERENTIAL, CHECKSUM, INIT; BACKUP LOG [ERP] TO DISK = N'D:\Backup\SQL\ERP_LOG_20261008_1215.trn' WITH CHECKSUM, INIT;Uma rotina comum para ERP: completo diário à noite, diferencial ao meio-dia e log a cada 15 minutos. Assim o RPO fica em 15 minutos.
-
Automatize com os scripts de Ola Hallengren. A solução gratuita de manutenção de Ola Hallengren é amplamente usada e cuida de nomes de arquivo, verificação e limpeza. Baixe o
MaintenanceSolution.sqlno site do autor e execute-o no bancomaster. Depois teste:EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = N'D:\Backup\SQL', @BackupType = 'FULL', @Verify = 'Y', @CheckSum = 'Y', @CleanupTime = 168; -- apaga backups com mais de 168 horas (7 dias)Para log e diferencial, troque
@BackupTypepor'LOG'ou'DIFF'. Na edição Standard, inclua@Compress = 'Y'. -
Agende. Nas edições com SQL Server Agent, o script de Ola já pode criar os jobs. Na Express, use o Agendador de Tarefas do Windows. Crie
C:\Scripts\backup-full.cmd:sqlcmd -E -S .\SQLEXPRESS -d master -b -Q "EXECUTE dbo.DatabaseBackup @Databases='USER_DATABASES', @Directory=N'D:\Backup\SQL', @BackupType='FULL', @Verify='Y', @CheckSum='Y', @CleanupTime=168" -o C:\Scripts\backup-full.logNo Agendador de Tarefas, crie uma tarefa que execute esse arquivo diariamente, marcando Executar estando o usuário conectado ou não e usando uma conta com login no SQL Server. Repita para os backups de log, com gatilho repetindo a cada 15 minutos. A opção
-bfaz o sqlcmd retornar erro quando o backup falha, o que aparece no histórico da tarefa. -
Tire a cópia do servidor. Os arquivos em
D:\estão no mesmo hardware. Envie-os para fora com o rclone (veja o artigo desta categoria) ou copie para outro servidor comrobocopy D:\Backup\SQL \\servidor-backup\sql /MIR /R:2 /W:5. O SQL Server 2022 e o 2025 também podem gravar backup direto em armazenamento compatível com S3 (BACKUP ... TO URL = 's3://...'), após criar uma credencial.
Como saber se funcionou
-
Verifique se o arquivo é legível:
RESTORE VERIFYONLY FROM DISK = N'D:\Backup\SQL\ERP_FULL_20261008.bak' WITH CHECKSUM; -
O teste que realmente vale é restaurar com outro nome. Descubra os nomes lógicos dos arquivos e restaure:
RESTORE FILELISTONLY FROM DISK = N'D:\Backup\SQL\ERP_FULL_20261008.bak'; RESTORE DATABASE [ERP_TESTE] FROM DISK = N'D:\Backup\SQL\ERP_FULL_20261008.bak' WITH MOVE 'ERP' TO N'D:\Teste\ERP_TESTE.mdf', MOVE 'ERP_log' TO N'D:\Teste\ERP_TESTE_log.ldf', RECOVERY, STATS = 10; DBCC CHECKDB ([ERP_TESTE]) WITH NO_INFOMSGS;Troque
'ERP'e'ERP_log'pelos nomes lógicos que oFILELISTONLYmostrou. Depois de conferir, apague o banco de teste. -
Consulte o histórico de backups registrado pelo próprio SQL Server:
SELECT database_name, type, backup_finish_date, backup_size/1024/1024 AS tamanho_mb FROM msdb.dbo.backupset ORDER BY backup_finish_date DESC;
Problemas comuns
"Operating system error 5 (Access is denied)"
A conta de serviço do SQL Server não tem permissão na pasta de destino. Dê permissão de Modificar para NT Service\MSSQLSERVER (ou NT Service\MSSQL$NOMEDAINSTANCIA). Para gravar em compartilhamento de rede, use o caminho UNC e uma conta de serviço de domínio ou local com acesso ao compartilhamento.
O arquivo de log (.ldf) não para de crescer
O banco está em FULL sem backups de log. Agende o backup de log ou, se não precisa de recuperação até o minuto, mude para SIMPLE com ALTER DATABASE [ERP] SET RECOVERY SIMPLE.
sqlcmd falha com erro de certificado
Versões recentes do sqlcmd e do driver ODBC 18 exigem criptografia por padrão. Em conexões locais com certificado autoassinado, acrescente -C (confiar no certificado do servidor).
Limite de tamanho da Express
Na Express 2019/2022 cada banco pode ter no máximo 10 GB; no SQL Server 2025 Express o limite passou para 50 GB. Ao chegar perto, planeje a mudança de edição antes que o ERP pare de gravar.
Perguntas frequentes
Como agendar backup no SQL Server Express?
A Express não tem o SQL Server Agent. Crie um arquivo .cmd que chama o sqlcmd com o backup e agende-o no Agendador de Tarefas do Windows.
Qual a diferença entre backup completo, diferencial e de log?
O completo copia o banco inteiro; o diferencial guarda o que mudou desde o último completo; o de log guarda as transações desde o último backup de log e só existe no modelo FULL.
Por que o arquivo .ldf não para de crescer?
O banco está no modelo de recuperação FULL sem backups de log. Agende o backup de log ou mude o banco para SIMPLE se não precisa de recuperação até o minuto.
Como saber se o arquivo .bak está bom?
Rode RESTORE VERIFYONLY ... WITH CHECKSUM e, de tempos em tempos, restaure o backup com outro nome e execute DBCC CHECKDB.
A edição Express comprime o backup?
Não. A compressão de backup existe nas edições Standard e Enterprise; na Express o arquivo sai sem compressão.
Leitura complementar
- Microsoft: backup e restauração de bancos do SQL Server
- Microsoft: agendar backups no SQL Server Express
- Ola Hallengren: SQL Server Backup
Precisa de ajuda?
Se o backup falhar ou a restauração de teste não subir, abra um ticket na área do cliente com a mensagem de erro e a versão do SQL Server (SELECT @@VERSION).
