← Voltar ao blog

Backup e restore do Firebird com gbak: guia prático

Backup e restore do Firebird com gbak sem derrubar o banco: backup lógico, incremental, restore com replace e as verificações que evitam surpresa.


Copiar o arquivo .fdb com o banco em uso não é backup — é uma cópia que pode sair inconsistente e só falhar no dia do restore. O gbak resolve isso gerando um retrato lógico e consistente do banco, online, e reconstruindo o arquivo com índices novos. O trabalho real, porém, é validar que esse backup volta.


O que o gbak faz que copiar o .fdb não faz?

Copiar o arquivo com o banco aberto captura páginas no meio de uma transação: o arquivo pode ficar com estado inconsistente e você só descobre quando tenta subir. O gbak lê o banco dentro de uma transação de leitura e grava um formato lógico, independente da fragmentação atual.

Recurso Cópia do .fdb gbak nbackup
Banco em uso Inseguro Sim Sim (físico)
Consistência garantida Não Sim Sim
Reconstrução de índices Não Sim, na volta Não
Muda page size no restore Não Sim (-p) Não
Incremental Não Não Sim (níveis 0/1/2)
Restaura em versão mais nova Direto Sim Não
Detecta página corrompida Não Sim (backup falha) Não

O último item é o mais subestimado: se existe corrupção em uma página, o gbak normalmente falha no ponto exato — o backup vira teste de integridade de graça.

Como fazer o backup com gbak?

O comando básico é um só. -b é backup, -v mostra progresso e -user/-password evitam depender da variável ISC_USER do ambiente.

# Backup online, com progresso na tela
gbak -b -v \
      -user SYSDBA -password sua_senha \
      /dados/empresa.fdb \
      /backup/empresa-2026-11-08.fbk

O -g (garbage collect durante o backup) aparece em muito tutorial antigo e é ignorado a partir do Firebird 3.0 — não precisa remover de scripts antigos, mas também não ganha nada mantendo.

Em base grande, o backup em paralelo reduz o tempo de parede. Disponível a partir do Firebird 2.5:

# 4 threads de leitura durante o backup
gbak -b -v -parallel 4 \
      -user SYSDBA -password sua_senha \
      /dados/empresa.fdb /backup/empresa-2026-11-08.fbk

-parallel só ajuda se o servidor tiver núcleos e I/O sobrando; em disco único, a diferença é próxima de zero.

Como restaurar sem destruir o banco em produção?

O restore deve sempre ir para um arquivo novo. -c cria, -r substitui o banco de destino — e -r apontando para o arquivo errado é como se perde produção.

# Certo: restaura em arquivo novo, ainda sem tocar no banco atual
gbak -c -v \
      -user SYSDBA -password sua_senha \
      /backup/empresa-2026-11-08.fbk \
      /dados/empresa_restore_test.fdb

# Depois de validar: para no serviço, renomeia e sobe
# (não use -r em produção se puder evitar)

Se o objetivo é trocar o banco, o procedimento seguro é: parar a aplicação, desativar o banco antigo, renomear empresa.fdb para empresa_old.fdb, mover o arquivo validado para o lugar e subir. Renomear preserva o caminho antigo como rollback imediato.

Page size pode ser alterada no restore — útil ao migrar de bancos criados com 4 KB:

# Restaura com page size de 16 KB (16.384 bytes)
gbak -c -p 16384 -v /backup/empresa.fbk /dados/empresa_novo.fdb

Sem -p, o gbak mantém o page size gravado no backup. Page size maior reduz profundidade de índice e I/O por página; 8 KB ou 16 KB são as escolhas comuns em banco novo.

Como fazer backup incremental?

Para base grande com janela curta, o backup lógico completo diário pode não caber. O nbackup faz backup físico incremental em três níveis — e não substitui o gbak, complementa.

# Nível 0: cópia completa (base para os incrementais)
nbackup -B 0 /dados/empresa.fdb /backup/empresa-n0.nbk

# Nível 1: só o que mudou desde o último backup de qualquer nível
nbackup -B 1 /dados/empresa.fdb /backup/empresa-n1-2026-11-08.nbk

# Nível 2: acumulado desde o último nível 1
nbackup -B 2 /dados/empresa.fdb /backup/empresa-n2-2026-11-08.nbk

O restore do nbackup é sequencial e exige recriar o banco antes:

# 1) cria o arquivo a partir do nível 0  2) aplica os deltas em ordem
nbackup -R /dados/empresa_restore.fdb /backup/empresa-n0.nbk
nbackup -R /dados/empresa_restore.fdb /backup/empresa-n1-2026-11-07.nbk
nbackup -R /dados/empresa_restore.fdb /backup/empresa-n1-2026-11-08.nbk

Incremental físico não é portátil: só restaura na mesma versão maior do Firebird e no mesmo sistema operacional. Para migração de versão ou de servidor, o caminho é gbak.

Como saber se o backup presta?

Backup não testado é esperança. A validação mínima tem três passos e cabe em um script noturno: restaurar, validar estrutura e conferir volume de dados.

# 1) Integridade física e lógica do banco restaurado
gfix -validate -full -user SYSDBA -password sua_senha /dados/empresa_restore_test.fdb

# 2) Cabeçalho: ODS, page size, sweep interval
gstat -h /dados/empresa_restore_test.fdb

# 3) Prova de que os dados estão lá
isql -user SYSDBA -password sua_senha /dados/empresa_restore_test.fdb <<'SQL'
SELECT COUNT(*) FROM clientes;
SELECT COUNT(*) FROM pedidos;
SELECT MAX(data_pedido) FROM pedidos;
SQL

A pergunta que o script precisa responder não é "o arquivo existe?", e sim "o último pedido do banco de produção está no backup?". Um COUNT(*) que bate com a produção de ontem é a evidência que falta em quase toda rotina de backup.

Montar essas consultas de conferência (contagem, última data, total por período) é a parte que sempre fica para depois. O Sqlify transforma a descrição em português na query pronta, com cada cláusula explicada.

Rotina de backup: passo a passo

  1. Gere o backup com gbak -b -v e nome datado (empresa-AAAAMM-DD.fbk).
  2. Registre o horário e o tamanho do arquivo; variação brusca de tamanho é sinal de problema.
  3. Copie o .fbk para outra máquina ou storage — backup no mesmo disco do banco não protege contra falha de disco.
  4. Restaure o backup em arquivo separado, diariamente se a janela permitir, ou pelo menos semanalmente.
  5. Rode gfix -validate -full e as contagens de conferência.
  6. Guarde o restore de teste por 24 h; ele serve de rollback rápido se o banco atual corromper.
  7. Aplique retenção 3-2-1: três cópias, dois meios, uma fora do site.

Script de agendamento com nome datado e limpeza de 14 dias (Windows Server):

$data  = Get-Date -Format 'yyyy-MM-dd'
$fbk   = "D:\backup\empresa-$data.fbk"
$fb    = "C:\Firebird\Firebird_5_0\gbak.exe"

& $fb -b -v -user SYSDBA -password $env:FB_PASS C:\dados\empresa.fdb $fbk
if ($LASTEXITCODE -ne 0) { throw "gbak falhou em $data" }

# mantém 14 dias
Get-ChildItem D:\backup\empresa-*.fbk |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-14) } |
    Remove-Item -Force

Coloque a senha em variável de ambiente ou arquivo protegido, nunca dentro do script versionado.

Checklist da rotina de backup

  • Backup gerado com nome datado e tamanho conferido
  • Cópia em outra máquina ou storage externo
  • Restore de teste executado (não apenas o backup)
  • gfix -validate -full sem erro
  • Contagem de linhas comparada com a produção
  • Destino do restore em arquivo separado, nunca o banco em uso
  • Retenção definida e limpeza automática testada
  • Alerta disparado quando o gbak retorna código diferente de zero
  • gbak e firebird.msg da mesma versão do servidor no host que executa

O último item evita um erro sutil: gbak de versão diferente da do servidor gera backup com mensagens trocadas e, em alguns casos, falha na restauração.

Perguntas frequentes

Qual a diferença entre gbak e nbackup?

gbak faz backup lógico: lê os dados e grava um formato portátil, reconstruindo índices no restore. nbackup faz backup físico incremental, mais rápido e menor, mas amarrado à mesma versão e sistema operacional. O uso comum é gbak semanal para portabilidade e nbackup diário para reduzir janela.

Preciso parar o Firebird para rodar gbak?

Não. O gbak roda online e tira um retrato consistente. O que não se deve fazer é copiar o .fdb com o banco aberto. Para cópia física segura, o banco precisa estar desativado com gfix -shut -force.

Consigo restaurar backup do Firebird 2.5 no Firebird 5.0?

Sim, restaurar em versão mais nova funciona — é o caminho recomendado de migração. O contrário não: backup gerado em versão mais nova não restaura em versão mais antiga, porque o formato interno (ODS) é mais recente.

O arquivo .fbk abre no Firebird?

Não. .fbk é formato lógico do gbak, não é um banco. Precisa de gbak -c (ou -r) para virar .fdb antes de qualquer conexão com isql.

Backup lento é sinal de banco grande?

Nem sempre. Transação longa em produção atrasa o garbage collection e o gbak precisa ler mais versões de registro. Antes de aumentar hardware, verifique transações ativas e rode gfix -sweep.

Conclusão

Backup com Firebird é gbak para consistência e portabilidade, nbackup para incremental, e validação com restore real — nessa ordem. Um backup que nunca foi restaurado não conta como backup. O Sqlify transforma a descrição em português na query pronta, com cada cláusula explicada, o que ajuda a montar aquelas consultas de conferência que provam que o restore está íntegro.

Leia também: