Em alguns casos, pode ocorrer de o banco de dados possuir índices inativos (por alguma falha na operação do mesmo), o que permitirá a inserção de registros com identificadores duplicados.
O backup gerado nestas circunstâncias será inconsistente, produzindo erros ao tentar restaurá-lo, já que o processo de restauração tentará ativar todos os índices definidos no banco de dados.
No exemplo acima, ao tentar restaurar o backup, o gbak acusou inconsistência ao tentar restaurar o índice da tabela TEstProdutoSaldoMensal.
Neste caso, o que pode ser feito é restaurar o backup desativando-se os índices temporariamente, utilizando o comando gbak com o parâmetro -i
:
gbak -v -i -c ElloBackup.gbk tradicao.ello
A restauração irá ser feita normalmente, porém os índices de todas as tabelas estarão inativos, o que pode causar extrema lentidão no sistema.
Após restaurar o backup, o próximo passo é resolver o problema do registro no banco de dados.
Uma análise na tabela listada no erro do gbak mostra que a mesma realmente possui registros duplicados.
É necessário fazer a exclusão de um dos registros.
E ao final restaurar todos os índices utilizando o script abaixo.
SET TERM !! ; 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) ORDER BY rdb$foreign_key NULLS FIRST INTO :stmt DO EXECUTE STATEMENT :stmt; END!! SET TERM ; !!