Restaurar backup com problema no índice

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 ; !!