Quem nunca passou pela triste situação de receber a ligação de um cliente - em plena sexta-feira à noite - dizendo que o sistema está fora do ar, e tudo isso porque o nosso querido amigo Firebird foi corrompido devido a uma queda de energia ou por alguém ter chutado o estabilizador em um daqueles breves momentos de stress? :)
Se este é o seu caso e você precisa corrigir rapidamente um banco de dados corrompido, siga este passo-passo e seus problemas estarão resolvidos (ou não):
Obs: Neste exemplo vamos assumir que você está em um prompt de comando do Windows (c:\>) e que seu banco de dados se chama database.fdb. Também estou ignorando a passagem de usuário e senha ao final de cada comando (portanto, adicione essa linha ao final de cada comando: -user sysdba -password masterkey).
1. Verifique se seu banco de dados está realmente corrompido:
gfix -v -full database.fdb
Este comando irá retornar algumas informações com o número de registros corrompidos e páginas afetadas, se houver. Se o comando não retornar nada seu banco está ok e sem erros \0/
2. Se o comando informou que existem erros no banco, tente este comando:
gfix -mend -full -ignore database.fdb
Depois de executar este comando, realize o passo 1 novamente, pode ser que alguns erros tenham sido corrigidos, mas não todos. Você pode executar o passo 1 e 2 várias vezes. Mas se o número de erros não diminuir e o banco continuar bugado vamos para um backup/restore matador :)
3. Vamos realizar um backup:
gbak -g -l -z -v database.fdb database.bkp
Aqui realizamos o backup com as seguintes flags:
-g: realiza o garbage collect (coleta de lixo)
-l: ignora transações no limbo
-v: relata cada ação tomada
-z: imprime número de versão
4. Agora vamos restaurar:
gbak -create -v database.bkp database2.fdb
Este comando ira restaurar o banco de dados em database2.fdb (esse será o banco de dados sem corrigido).
Após isso execute o passo 1 no database2.fdb e você verá que não existem mais erros. Banco restaurado com sucesso! \0/
Se mesmo assim nao funcionar, tente este comando para restaurar o backup:
gbak -create -v -inative -ONE_AT_A_TIME database.bkp database2.fdb
Dificilmente precisa utilizar este comando, mas se precisar estar ai :)
Outra coisa, se der erro no charset, adicione isso ao final do comando de restore: -FIX_FSS_M win1252
Este já precisei utilizar algumas vezes.
Espero que estes comandos possam lhe ajudar :)
---
Ivan S. Vargas