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
- Gere o backup com
gbak -b -ve nome datado (empresa-AAAAMM-DD.fbk). - Registre o horário e o tamanho do arquivo; variação brusca de tamanho é sinal de problema.
- Copie o
.fbkpara outra máquina ou storage — backup no mesmo disco do banco não protege contra falha de disco. - Restaure o backup em arquivo separado, diariamente se a janela permitir, ou pelo menos semanalmente.
- Rode
gfix -validate -fulle as contagens de conferência. - Guarde o restore de teste por 24 h; ele serve de rollback rápido se o banco atual corromper.
- 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 -fullsem 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
gbakretorna código diferente de zero -
gbakefirebird.msgda 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: