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 (ou db_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\MSSQLSERVER ou NT Service\MSSQL$SQLEXPRESS) precisa de permissão de gravação nela.

Entenda o modelo de recuperação

ModeloO que permiteCuidado
SIMPLERestaurar até o último backup completo ou diferencialPerde tudo o que foi feito depois do último backup
FULLRestaurar até um minuto específico, com backups de logSem 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

  1. 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;

    CHECKSUM valida as páginas durante a leitura e grava somas de verificação no arquivo. Nas edições Standard e Enterprise, acrescente COMPRESSION para 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).

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

  3. 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.sql no site do autor e execute-o no banco master. 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 @BackupType por 'LOG' ou 'DIFF'. Na edição Standard, inclua @Compress = 'Y'.

  4. 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.log

    No 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 -b faz o sqlcmd retornar erro quando o backup falha, o que aparece no histórico da tarefa.

  5. 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 com robocopy 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

  1. Verifique se o arquivo é legível:

    RESTORE VERIFYONLY FROM DISK = N'D:\Backup\SQL\ERP_FULL_20261008.bak' WITH CHECKSUM;
  2. 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 o FILELISTONLY mostrou. Depois de conferir, apague o banco de teste.

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

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

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também