(menos) Atenção, esse procedimento é muito perigoso e deve ser feito com muita atenção ao passos indicados nesse roteiro e o principal de tudo, sempre fazer uma cópia de segurança do banco de dados antes de fazer a manutenção


  1. Deve-se inicialmente parar o serviço do firebird e verificar se existe alguma instância do firebird presa na memória, para isso abra o gerenciador de tarefas do windows e cá na aba de serviços, localize o serviço do firebird e mande parar, depois vá na aba de detalhes e verifiquae se existe ainda alguma instância do firebird rodando e finalize, alternativamente isso pode ser feito por linha de comando abrindo uma janela de comando como administrador e rodar os seguintes comando:

sc stop FirebirdServerDefaultInstance

taskkill -im fireb* -f

    • Nos comando acima, o nome do seerviço do firebird pode ser outro como FirebirdServerHQBirdInstance e no firebird 2.5 o nome do processo é fb_inet_server e não firebird.
  1. Após o serviço do firebird ter sido parado, pode-se copiar o banco de dados utilizando ctrl+c + ctrl+v
  2. Rodar o comando gfix para remover os problemas do banco em 2 etapas pela linha de comando:
    • "c:\program files\firebird\firebird_3_0\gfix.exe" c:\sys\base\millenium -user sysdba -pass masterkey -full -validate  - este comando vai vasculhar o banco todo procurando erros
    • "c:\program files\firebird\firebird_3_0\gfix.exe" c:\sys\base\millenium -user sysdba -pass masterkey -mend -ig - este comando vai vasculhar preparar a base corrompida para backup e restore
    • é importante salientar que em algumas versões do firebird, o primeiro comando basta colocar -full e ele não aceita o -validate
  3. Fazer o Backup e Restore do banco, para isso vamos utilizar o comando gbak da seguinte forma
    • "c:\program files\firebird\firebird_3_0\gbak.exe" -z -b -user sysdba -pass masterkey -g -v -st t -y orig.log c:\sys\base\MILLENIUM_CORROMP stdout | "c:\program files\firebird\firebird_3_0\gbak.exe" -z -user sysdba -pass masterkey -c -v -st t -y dest.log stdin c:\sys\base\MILLENIUM_OK

      Dica

      Esse comando é para o firebird 3.0 para o firebird 2.5 devemos adaptá-lo para:

      • "c:\program files\firebird\firebird_2_5\bin\gbak.exe" -z -b -user sysdba -pass masterkey -g -v -st t -y orig.log c:\sys\base\MILLENIUM_CORROMP stdout | "c:\program files\firebird\firebird_2_5\bin\gbak.exe" -z -user sysdba -pass masterkey -c -v -st t -y dest.log stdin c:\sys\base\MILLENIUM_OK

      Dica Extra

      Para facilitar pode-se usar esse BackupRestore.bat passando o banco de origem e destino como parâmetro 

      ex: BackupRestore.bat c:\sys\base\MILLENIUM_ERRO c:\sys\base\MILLENIUM


  1. Após executar esse procedimento serão criados 2 arquivos de log, orig.log e dest.log, devemos abrir os dois arquivos e verificar se não houve nenhum erro que interrompeu o processo do backup, o comando acima executa o backup e o restore numa única execução se utilizando da pilha do windows (ou do Linux, esse comando funciona nele também), caso dê algum erro precisamos avalar para tentar resolver, se for na criação dos indices, podemos no comando acima no final colocar um -i para que ele não ative os indices e depois rodar o seguinte script no dbeaver ou ibexpert:
    • EXECUTE BLOCK AS
      DECLARE VARIABLE stmt VARCHAR(1000);
      BEGIN
      for select 'ALTER INDEX '||rdb$index_name ||' ACTIVE;'
      from rdb$indices
      where (rdb$system_flag is null or rdb$system_flag = 0 AND rdb$index_inactive=1)
      order by rdb$foreign_key nulls first
      into :stmt
      do EXECUTE STATEMENT :stmt;
      END



    • Conforme ir encontrando os problemas com os indices, deve-se resolver e rodar o comando novamente até conseguir dar commit.

  2. Finalize rodando as estatisticas dos indices com o seguinte script
    • EXECUTE BLOCK AS
      DECLARE VARIABLE IDX VARCHAR(60);
      BEGIN
      FOR SELECT RDB$INDEX_NAME
      FROM RDB$INDICES
      INTO :IDX
      DO EXECUTE STATEMENT 'SET STATISTICS INDEX ' || :IDX;
      END;



  • Sem rótulos