Backup SQL Server (ou becape do SQL Server) é feito com o comando BACKUP DATABASE, que gera um arquivo .BAK consistente com o banco rodando. A estratégia correta combina um Full semanal com Diferenciais diários. Copiar o .mdf com o serviço ativo não é backup — é um arquivo corrompido esperando acontecer.
Mas Maurício, o banco de dados tá sendo “feito backup” todo dia — aquele arquivo .mdf que a gente copia na pasta de backup. Tá certo, né?
Infelizmente, não. Essa é uma das ilusões mais comuns — e mais perigosas — que eu vejo nas empresas que atendem sistema ERP em SQL Server. O arquivo está na pasta, o tamanho bate, ninguém nunca reclamou… até o dia que o servidor queima ou o ransomware chega e você descobre, da pior forma possível, que aquela cópia não abre.
Vou te explicar o porquê e como se faz o backup SQL Server (ou becape do SQL Server) do jeito certo: arquivo .BAK, estratégia full mais diferencial e o caminho do dado até a nuvem, longe do servidor.
Se você ainda está construindo o conceito de backup de banco de dados em geral — Firebird, MySQL, PostgreSQL — recomendo ler primeiro o backup de banco de dados para ter o mapa completo. Aqui a gente vai fundo no SQL Server.
Por que copiar o .mdf com o banco no ar não é backup?
O SQL Server mantém três tipos de arquivo no disco: o .mdf (dados primários), o .ndf (dados secundários, opcional) e o .ldf (log de transações). Quando o serviço está rodando, esses arquivos estão em uso ativo — o SQL Server tem páginas de dados na memória, transações em aberto e o log ainda não foi completamente sincronizado com o arquivo em disco.
Quando você copia o .mdf com o banco no ar, você captura esse estado no meio do caminho. O resultado é um arquivo que, na melhor das hipóteses, abre com erro de integridade. Na pior, nem abre — e você descobre isso no dia do restore, não antes.
Copiar o .mdf com o serviço rodando não é backup. É um arquivo corrompido esperando a hora certa pra te decepcionar.
O mesmo vale para aquela ideia de “exportar tabela pra Excel” ou tirar print do relatório. Esses recursos servem pra análise pontual, não pra recuperação do banco. Se o sistema cair, você não vai conseguir recriar dois anos de nota fiscal a partir de uma planilha.
O que é o arquivo .BAK e como ele é gerado?
O .BAK é o arquivo de backup nativo do SQL Server. Ele é gerado pelo comando BACKUP DATABASE, que o SQL Server executa internamente de forma consistente e atômica — captura todos os dados e o estado correto das transações, mesmo com o banco 100% online. Nenhum downtime.
Esse arquivo é o único formato que o RESTORE DATABASE aceita nativamente. Sem o .BAK gerado pelo comando correto, você não tem backup SQL Server — tem uma ilusão de backup.
O comando básico para gerar o .BAK de um banco específico:
-- Backup FULL do banco "SistemaERP"
BACKUP DATABASE [SistemaERP]
TO DISK = 'C:\WSPEED\Backup\SistemaERP_Full.BAK'
WITH FORMAT, MEDIANAME = 'SistemaERP', NAME = 'SistemaERP Full Backup', COMPRESSION;
O parâmetro WITH FORMAT cria um novo conjunto de mídia (recomendado para overwrite intencional). O COMPRESSION reduz o tamanho do arquivo sem custo perceptível de CPU em servidores modernos.
Qual a diferença entre backup full e backup diferencial no SQL Server?
Essa é a estratégia que separa uma proteção real de uma proteção que falha no detalhe. Entender a diferença é fundamental para quem gerencia ERP em SQL Server.
| Tipo | O que copia | Tamanho | Velocidade de restore | Quando usar |
|---|---|---|---|---|
| Full (BACKUP DATABASE) | O banco inteiro — dados, estrutura, estado atual das transações. | Grande (100% do banco) | Mais rápido — um único arquivo para restaurar. | Uma vez por semana (ou todo dia em bancos pequenos). É a base obrigatória. |
| Diferencial (WITH DIFFERENTIAL) | Apenas o que mudou desde o último backup full. | Menor (cresce até o próximo full) | Rápido — precisa só do full mais recente + este diferencial. | Todo dia entre os fulls. Protege as mudanças diárias sem copiar tudo de novo. |
A grande vantagem do diferencial sobre o incremental (comum em outros SGBDs): para restaurar, você precisa de apenas dois arquivos — o full mais recente e o diferencial mais recente. Não tem corrente de arquivos para montar. Isso acelera o restore e reduz a margem de erro na hora do aperto.
A estratégia padrão que recomendo: full toda sexta à noite (ou madrugada de domingo) e diferencial de segunda a quinta no final do expediente. Se o servidor cair na quinta à tarde, você tem o full de domingo mais o diferencial de quarta — perde, no máximo, o movimento do dia.
Como configurar o job de backup no SQL Server?
Na prática, o jeito mais seguro é criar um script .sql com os comandos e agendar via SQL Server Agent. Assim o backup roda automático, sem depender de ninguém lembrar.
Script para backup full de todos os bancos do servidor (salve como BackupFull.sql):
DECLARE @path NVARCHAR(512) = 'C:\WSPEED\Backup\'
DECLARE @name NVARCHAR(256)
DECLARE @fileName NVARCHAR(512)
DECLARE @fileDate NVARCHAR(40)
SELECT @fileDate = CONVERT(NVARCHAR(20), GETDATE(), 112) -- formato AAAAMMDD
DECLARE db_cursor CURSOR READ_ONLY FOR
SELECT name FROM master.sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb')
AND state = 0 -- banco online
AND is_in_standby = 0 -- não em modo standby
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_Full_' + @fileDate + '.BAK'
BACKUP DATABASE @name
TO DISK = @fileName
WITH FORMAT, MEDIANAME = @name, NAME = @name, COMPRESSION
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Para o diferencial, o script é quase idêntico — só muda o sufixo e o WITH DIFFERENTIAL:
-- Backup DIFERENCIAL (rode com o mesmo cursor, trocando o bloco interno)
BACKUP DATABASE [SistemaERP]
TO DISK = 'C:\WSPEED\Backup\SistemaERP_Dif.BAK'
WITH DIFFERENTIAL, MEDIANAME = 'SistemaERP', NAME = 'SistemaERP Diferencial', COMPRESSION;
Para chamar o script via linha de comando (útil em scripts .bat agendados pelo Windows Task Scheduler, como alternativa ao SQL Server Agent):
@echo off
set SERVIDOR=NOME-DO-SERVIDOR\INSTANCIA
set USUARIO=usuario_backup
set SENHA=SuaSenha
SQLCMD -S %SERVIDOR% -U %USUARIO% -P %SENHA% -b -i C:\Scripts\BackupFull.sql
:: Para autenticação Windows integrada (sem login/senha explícito):
:: SQLCMD -S %SERVIDOR% -E -b -i C:\Scripts\BackupFull.sql
Como restaurar um banco a partir do .BAK?
Mas Maurício, e na hora de restaurar — como funciona na prática?
Primeiro, uma consulta útil para confirmar o conteúdo do .BAK antes de restaurar:
-- Verifique o que tem dentro do arquivo .BAK
RESTORE HEADERONLY
FROM DISK = 'C:\WSPEED\Backup\SistemaERP_Full.BAK';
-- Confirme os caminhos dos arquivos .mdf e .ldf originais
RESTORE FILELISTONLY
FROM DISK = 'C:\WSPEED\Backup\SistemaERP_Full.BAK';
Com os nomes de arquivo confirmados, o restore completo (full + diferencial) segue esta ordem:
-- Passo 1: Restaure o FULL com NORECOVERY (deixa o banco em standby pra aplicar o diferencial)
RESTORE DATABASE [SistemaERP_Restaurado]
FROM DISK = 'C:\WSPEED\Backup\SistemaERP_Full.BAK'
WITH MOVE 'SistemaERP' TO 'C:\SQLServer\Data\SistemaERP_restore.mdf',
MOVE 'SistemaERP_log' TO 'C:\SQLServer\Log\SistemaERP_restore.ldf',
NORECOVERY, REPLACE;
-- Passo 2: Aplique o DIFERENCIAL e finalize com RECOVERY
RESTORE DATABASE [SistemaERP_Restaurado]
FROM DISK = 'C:\WSPEED\Backup\SistemaERP_Dif.BAK'
WITH RECOVERY;
O NORECOVERY no primeiro passo é fundamental: ele deixa o banco em estado intermediário, pronto para receber o diferencial. Sem ele, o banco é finalizado antes do diferencial ser aplicado e você perde o movimento do período.
Se for restaurar só com o full (sem diferencial), use WITH RECOVERY direto no primeiro comando — o banco já sobe pronto.
O job parou e ninguém viu: o risco invisível do backup silencioso
Esse é o ponto que mais me preocupa. O script roda hoje, amanhã, na semana que vem… e um dia para. O SQL Server Agent falha, a pasta de destino fica sem espaço, a instância muda de nome depois de um update do Windows. O arquivo .BAK deixa de ser gerado — e ninguém percebe.
Semanas depois, o servidor vai ao ar. Aí você vai restaurar e descobre que o último backup válido tem 23 dias.
Duas medidas simples que evitam esse pesadelo:
- Alertas de falha no SQL Server Agent: configure notificação por e-mail no evento
OnFailurede cada job de backup. Parece óbvio, mas a maioria dos servidores que visito não tem isso configurado. - Verificação externa do arquivo: uma ferramenta de backup em nuvem que monitora a pasta e alerta se nenhum arquivo novo aparecer no horário esperado. Confirmação dupla — o job avisou que rodou, a nuvem confirmou que chegou um arquivo.
Essa é uma das razões pelas quais o discurso de “tenho job de backup no SQL Server Agent” não me tranquiliza sem confirmar os dois pontos acima. Já cheguei em servidor onde o job tinha parado faz semanas — e o técnico responsável não sabia, porque o script “sempre rodou”. Quando descobriram, era tarde demais pra não perder dados.
O .BAK na pasta local não é backup off-site — e isso importa muito
Você configurou o job, os alertas funcionam, o .BAK é gerado toda noite. Ótimo. Mas se esse arquivo está só na mesma máquina — ou num HD externo plugado no servidor — você ainda tem um ponto único de falha.
Ransomware (sequestro de dados) cifra o servidor e a pasta de backup local juntos. Incêndio, enchente ou roubo levam o hardware e os arquivos na mesma viagem. Na enchente do Rio Grande do Sul de 2024, eu recolocei 9 clientes de pé em dias — porque os dados deles estavam na nuvem, longe da inundação. Quem só tinha cópia local perdeu tudo.
O .BAK precisa sair do servidor e ir para fora. O fluxo completo seguro é:
- SQL Server Agent gera o
.BAKna pasta local. - Solução de backup em nuvem monitora a pasta e envia cada novo arquivo para a nuvem criptografada.
- Nuvem retém versões por 7, 15 ou 30 dias — você escolhe.
- Restore testado mensalmente em ambiente separado.
Aqui na WSpeed, o Backblaze B2 é o nosso armazenamento primário — especializado em backup, mais econômico que outros provedores. O AWS S3 fica disponível como opção adicional. Os arquivos chegam criptografados com AES-256, sem ação manual da sua parte.
E tem mais: o backup em nuvem para empresas da WSpeed vem com garantia em contrato. Não é promessa de marketing — é cláusula de multa se não recuperarmos os seus dados. Simples assim: se errarmos, vai machucar a gente também. Isso nos obriga a fazer direito — e nos obriga a testar.
Se você é o TI que cuida de vários clientes com SQL Server e quer montar isso como serviço gerenciado, vale conhecer as nossas soluções para empresas de TI.
E se ainda está construindo a base de entendimento sobre o que é backup antes de partir pro técnico, esse post é o ponto de partida certo.
Agora me conta nos comentários: qual foi o backup de SQL Server mais doloroso que você já viu falhar? Job silencioso? .mdf copiado no ar? Restore que não subiu? Pode contar — aqui a gente aprende junto.
Abraço e até o próximo artigo ou vídeo.
Perguntas frequentes
O que é o arquivo .BAK do SQL Server?
O .BAK é o arquivo de backup nativo do SQL Server, gerado pelo comando BACKUP DATABASE. Ele contém uma cópia consistente do banco de dados, incluindo dados e estrutura, e é o único formato reconhecido pelo RESTORE DATABASE. Sem o .BAK gerado pelo comando correto, você não tem backup de SQL Server.
Qual a diferença entre backup full e backup diferencial no SQL Server?
O backup full copia o banco inteiro — é a base de tudo. O diferencial copia apenas o que mudou desde o último full. Na prática: full toda semana (ou todo dia, se o banco for pequeno) e diferencial todo dia entre os fulls. Na hora do restore, você precisa do full mais recente mais o diferencial mais recente — dois arquivos, não uma corrente longa como no incremental.
Posso copiar o arquivo .mdf do SQL Server para fazer backup?
Não. O .mdf é o arquivo de dados do SQL Server, e quando o serviço está rodando ele está em uso com transações abertas e páginas em memória. Copiar o .mdf com o banco no ar gera um arquivo inconsistente que quase sempre não abre no restore. O caminho certo é sempre o comando BACKUP DATABASE, que garante consistência mesmo com o banco 100% online.
Com que frequência devo fazer backup do SQL Server?
Depende de quanto dado você aguenta perder. Para a maioria das empresas com ERP rodando SQL Server, o padrão seguro é: full toda sexta à noite (ou madrugada) e diferencial de segunda a quinta. Se o volume de transações for alto — como nota fiscal eletrônica o dia inteiro — adicione backup de log de transações a cada hora para proteger cada operação.
Como mandar o .BAK para a nuvem?
O SQL Server Agent agenda o job que gera o .BAK numa pasta local. Depois, uma ferramenta de backup em nuvem monitora essa pasta e envia cada arquivo novo para a nuvem criptografada (Backblaze B2 como primário, AWS S3 como opção). Isso garante a cópia off-site: se o servidor for atacado por ransomware ou pegar fogo, o .BAK na nuvem continua intacto.
O SQL Server Agent parou de rodar — como saber?
Você precisa de monitoramento ativo: alertas por e-mail ou Teams quando o job falha, verificação do histórico em msdb.dbo.backupset, e idealmente um agente externo que confirme se o arquivo .BAK foi gerado no horário esperado. Backup silencioso que para é a causa número um de 'fazia backup há anos e não tinha nada' — já vi de perto.
