1. O que é IBSurgeon FirstAID?

IBSurgeon FirstAID é uma ferramenta que pode diagnosticar e reparar automaticamente bancos de dados Firebird ou InterBase corrompidos.

Ele pode reparar corrupções que nem gbak nem gfix conseguem lidar. Utiliza sua própria camada para acesso ao banco de dados em baixo nível sem usar o mecanismo InterBase ou Firebird, permitindo realizar operações "cirúrgicas" reais e reparar bancos de dados quando todos os outros mecanismos padrão não conseguem.

1.1. Versões Suportadas

FirstAID 8.0 suporta as seguintes versões do Firebird e InterBase:

  • Firebird 5.0, 4.0, 3.0, 2.5, 2.1, 2.0, 1.5, 1.0

  • InterBase 4.x, 6.x, 7.0, 7.1, 7.5, 2007, 2009, XE/XE3, XE7, 2017, 2020

Se você tiver problemas com InterBase 5.x ou outras versões, entre em contato com [email protected].

1.2. Visão geral do FirstAID

IBSurgeon FirstAID 8.0 pode realizar 3 tipos de operações de recuperação:

  1. Recuperação direta: Destinada a corrigir o banco de dados original corrompido no local. Após a recuperação direta, você precisa finalizá-la com gfix e gbak (ferramentas padrão da distribuição Firebird).

  2. Extração de dados: Projetada para visualizar e exportar dados do banco de dados corrompido para um banco de dados com a mesma estrutura (vazio ou uma cópia antiga em bom estado), ou extrair dados parcialmente.

  3. Correção de erros do nbackup: Destinada a corrigir bancos de dados Firebird travados no estado de backup (quando nbackup -n ou -fixup não funcionam corretamente).

Se você tem um banco de dados corrompido e precisa verificá-lo para dados recuperáveis, abra o banco de dados, selecione o banco de dados necessário e use a guia Preview (esta função está disponível na versão gratuita, sem registro).

Se você puder ver os dados que está procurando e decidir recuperar o banco de dados, é recomendável realizar primeiro a recuperação direta (sempre use uma cópia do arquivo de banco de dados corrompido!) e apenas se houver problemas, use Extract para exportar dados para um novo banco de dados.

2. Como visualizar dados em banco de dados Firebird/InterBase corrompido com FirstAID

Se você precisa visualizar dados no banco de dados corrompido, pode fazê-lo com a versão gratuita do FirstAID. Execute o FirstAID, clique em "Open corrupted Database" (se você tiver um banco de dados multi-volume, escolha File\Open multi-file database no menu).

figure1
Figure 1. Abrir banco de dados corrompido

Depois disso, o FirstAID pedirá que você confirme a versão ODS.

figure2
Figure 2. Confirme a versão ODS (On-Disk Structure) ou escolha se não estiver pré-selecionada

Se a página de cabeçalho estiver corrompida, o FirstAID mostrará uma linha vazia, e você deve selecionar a versão correta do seu banco de dados na lista suspensa.

Então ele pede que você confirme o tamanho da página:

figure3
Figure 3. Confirme o tamanho da página ou escolha se não estiver pré-selecionado

Se o cabeçalho do banco de dados estiver corrompido, você precisará selecionar o tamanho correto da página na caixa suspensa. Mais frequentemente, o tamanho da página é:

  • 4096 para Firebird 2.x

  • 1024 para InterBase e Firebird 1.x

  • 8192 para Firebird 3, 4 e 5

Se você selecionar o tamanho de página errado, verá uma alta porcentagem na linha "Bad pages" da guia "Pages Summary". Se sua primeira escolha parecer incorreta, tente abrir o banco de dados com diferentes tamanhos de página para encontrar o valor correto.

Depois de abrir o banco de dados, você verá uma lista de tabelas à esquerda e uma visão resumida das páginas do banco de dados à direita:

figure4
Figure 4. Tela inicial do FirstAID

A informação mais importante é a porcentagem de "Bad pages" - isso dá uma ideia de quantas páginas de dados não podem ser lidas e, portanto, quais perdas de dados você pode esperar.

  • 0% de páginas ruins geralmente significa que os problemas estão no nível dos registros ou na área do sistema,

  • 1-2% significa que o banco de dados foi truncado ou o disco está corrompido (esta % corresponde ligeiramente às perdas no banco de dados),

  • 50% ou 75% geralmente indica que você selecionou o tamanho de página errado,

  • Em alguns casos, quase todo o banco de dados pode estar danificado e, portanto, não pode ser recuperado.

Informações úteis sobre a lista de tabelas:

  • Clique duas vezes no nome de uma tabela para ver os dados da primeira página de dados dessa tabela. Você pode navegar pelas páginas de dados usando o navegador (setas <<, <, >, >>) na guia "Preview".

Use a visualização para ver os registros mais recentes e estimar a quantidade de dados bons para a tabela.

figure5
Figure 5. Visualização de dados em bancos de dados corrompidos
  • Na coluna «Pages» mostra o número de páginas de dados encontradas para a tabela selecionada, o que corresponde ao tamanho da tabela.

figure6
Figure 6. Número de páginas de dados para selecionar tabela e capacidade de ir para qualquer página de dados
  • FirstAID destaca os nomes de tabelas vazias com vermelho claro, enquanto tabelas com dados têm fonte preta.

  • Em caso de uma corrupção pesada de tabelas do sistema, o FirstAID destacará em vermelho brilhante todas as tabelas com problemas.

figure7
Figure 7. Banco de dados com corrupção pesada: formatos perdidos e tabelas de sistema corrompidas. Use o recurso "External metadata"!
  • Na coluna «Formats» mostra um número de formatos de registro esperados e número de formatos existentes.

    No caso de Formatos ausentes, ou se você não vê nomes normais de tabelas ou dados nelas, leia a seção "External metadata" no final deste guia!

3. Como obter uma versão completa do FirstAID

Depois de visualizar seus dados e confirmar que vale a pena recuperar o banco de dados, compre a licença FirstAID apropriada. Você receberá um e-mail automático de confirmação de implantação de [email protected].

Normalmente leva cerca de 10-15 minutos para receber o e-mail com a licença. Verifique a pasta de spam se não o recebeu!

FirstAID é licenciado por "banco de dados", com as seguintes opções de compra (https://ib-aid.com/en/ibsurgeon-firstaid/):

  • De 1 a 3 bancos de dados,

  • Até 50 bancos de dados,

  • Mais recuperações estão disponíveis no âmbito da Assinatura Empresarial.

Atualizações e pacotes extras

Se você tem qualquer versão antiga do FirstAID, ou já usou todas as ativações para recuperação, pode comprar a atualização para 5, 50 ou 100 recuperações de banco de dados com desconto aqui: https://ib-aid.com/en/upgrades-ibsurgeon/

Geralmente o pedido é processado durante alguns minutos, e então você receberá um e-mail automático da loja online (PayProGlobal) com as informações necessárias (essencialmente, são nome de usuário e senha) para realizar a recuperação (veja detalhes abaixo na seção "Registro").

Se você não recebeu a senha em 1-2 horas, verifique sua pasta antispam (e configurações), e então escreva um e-mail para [email protected] com o número do seu pedido, para acelerar a entrega.

Se você instalou o FirstAID de www.ib-aid.com e depois comprou a licença, não há necessidade de reinstalar o FirstAID da seção Download do Deploy Center - basta inserir e-mail e senha quando solicitado. Reinstale o FirstAID apenas se você tiver uma versão mais antiga instalada.

Tente recuperar o banco de dados com Direct Fix antes de tentar extrair todos os dados: DirectFix pode ser mais rápido que o processo Extract (mas não se esqueça de fazer uma cópia antes do DirectFix!).

4. Recuperação DirectFix com FirstAID

Para recuperar diretamente um banco de dados Firebird:

  1. Pare o servidor Firebird e faça uma cópia do arquivo de banco de dados original! Isso é importante para possíveis etapas futuras (extração, etc.).

  2. Inicie o FirstAID.

  3. Abra o banco de dados corrompido e aguarde o carregamento.

  4. Após a abertura do banco de dados, o FirstAID habilitará ações de menu para diagnosticar, reparar e exportar.

  5. Escolha "Direct→Direct Diagnose" no menu.

  6. Veja o log do FirstAID para mensagens de informação e erros.

    Exemplo de mensagem de informação:

    12:40:55 DEBUG: Checking INVNT_SALDO (147)...
    12:40:56 INFO: Relation INVNT_SALDO (147) is OK

    Exemplo de mensagem de erro:

    18.02.2014 18:45:31 ERROR: Found 1 record errors on datapage#2069
    18.02.2014 18:45:31 ERROR: Error on data page #2069
    18.02.2014 18:45:32 INFO: Pointer page #243 checking: found 177 errors.
    18.02.2014 18:45:32 ERROR: Error in checking relation #160 Found 1 errors.
    18.02.2014 18:45:32 ERROR: Relation MOVIMENTA1 (160) is CORRUPT
  7. Após o "Direct Diagnose", escolha "Direct→Direct Fix".

    figure8
    Figure 8. Direct Diagnose (apenas verificação) e DirectFix (recuperação no local)
  8. Para iniciar a recuperação, insira aqui seu e-mail (que foi usado para a compra da licença) e senha (do e-mail do IBSurgeon).

    figure9
    Figure 9. Insira aqui o e-mail e a senha que você recebeu no e-mail do IBSurgeon

    Então clique em "Generate UNLK now".

    Observe que o FirstAID salvará o arquivo UNLK para este banco de dados na pasta C:\ProgramData\FBFirstAID3\Unlocks, então da próxima vez que você abrir este arquivo de banco de dados no mesmo computador, o FirstAID não pedirá o registro.

  9. O processo de reparo levará aproximadamente o mesmo tempo que o diagnóstico.

  10. Após o reparo, clique em "Direct\Final Steps" e siga as instruções:

figure10
Figure 10. Etapas finais após DirectFix

Etapas finais após o reparo DirectFix do FirstAID:

Após o procedimento de reparo IBSurgeon FirstAID DirectFix, você precisa executar os meios padrão para completar a recuperação. Por favor, salve os resultados de cada etapa para possível uso futuro.

Mesmo se as etapas do gfix falharem, tente executar o gbak (etapas 3 e 4) mesmo assim!

  1. Execute o gfix.exe (ele está localizado no diretório "Bin" da instalação do Firebird/InterBase) usando a seguinte linha de comando:

    gfix.exe -v -full-user SYSDBA -password sua_senha_sysdba Disco:\Caminho\seu_banco_de_dados.fdb
  2. Depois disso, execute o gfix.exe com outra combinação de switches:

    gfix.exe -mend -ig -user SYSDBA -password sua_senha_sysdba Disco:\Caminho\seu_banco_de_dados.fdb
  3. Gfix corrige pequenas corrupções e prepara o banco de dados para backup. Então você precisa fazer backup do banco de dados usando gbak.exe (no mesmo diretório com gfix.exe). Execute o backup com o seguinte comando:

    gbak.exe -b -g -ig -user SYSDBA -password sua_senha_sysdba Disco:\Caminho\seu_banco_de_dados.fdb Disco:\Caminho\backup.fbk
  4. Restaure o banco de dados a partir do backup. Execute o comando:

    gbak -c -user SYSDBA -password sua_senha_sysdba Disco:\Caminho\backup.fbk Disco:\Caminho\seu_banco_de_dados.fdb
  5. Apenas se você tiver um banco de dados InterBase! – O FirstAID pode colocar o banco de dados InterBase no modo somente leitura durante a recuperação, para configurá-lo de volta para leitura-escrita, execute o seguinte comando:

    gfix.exe -mode read_write -user SYSDBA -password sua_senha_sysdba Disco:\Caminho\seu_banco_de_dados.fdb

É isso - agora seu banco de dados está reparado.

5. Recuperação através de Extração

Se você já tentou corrigir o banco de dados com DirectFix e não foi possível criar um backup do banco de dados com as etapas finais, prossiga com a Extração.

Assumimos que você tem uma cópia de arquivo intacta do banco de dados corrompido original que você criou antes da etapa DirectFix. Se for assim, faça uma cópia dele novamente e realize todas as operações futuras com a cópia. É importante executar o FirstAID na cópia original intacta (antes do DirectFix) do banco de dados corrompido!

5.1. Visão geral do processo de extração de dados

O FirstAID lê o banco de dados em baixo nível (usando sua própria camada de acesso a dados, não o mecanismo Firebird) e exporta todos os registros bons para um novo banco de dados.

figure11
Figure 11. FirstAID extrai dados do banco de dados corrompido e insere em outro banco de dados

Existem várias coisas a considerar:

  1. Qual será o banco de dados de destino para os dados exportados?

    1. Conectar e exportar dados para um banco de dados vazio com a mesma estrutura (metadados) que o banco de dados corrompido (opção preferida).

    2. Criar um novo banco de dados vazio sem metadados (FirstAID pode criá-lo, mas os metadados podem estar incompletos) e exportar para ele

  2. Mais dados VS Mais consistência.

    No banco de dados corrompido, algumas chaves primárias podem estar ausentes e algumas restrições de banco de dados (como NOT NULL, CHECK, FOREIGN KEY, etc.) podem ser violadas, então há uma escolha: desativar restrições violadas e permitir que dados potencialmente inconsistentes sejam inseridos no banco de dados, ou aplicar todas as regras e pular dados inconsistentes.
    1. Mais dados. Esta é a opção preferida, porque após a exportação você poderá revisar os resultados e aplicar restrições de banco de dados manualmente. É comum que algumas restrições não relevantes existam no banco de dados danificado, então é melhor salvar o máximo de dados possível.

    2. Mais integridade. Se você não vê muitos erros, pode tentar esta opção. Todas as restrições e chaves estrangeiras serão aplicadas, e aqueles registros que não correspondem às restrições do banco de dados serão excluídos no banco de dados de destino.

    3. Modo manual. Você tem opções para ajustar o processo de exportação manualmente. Assumimos que você sabe o que está fazendo se escolher o modo manual e definir parâmetros por conta própria.

5.2. Exportar para o banco de dados vazio com os mesmos metadados

  1. Abra o banco de dados corrompido no FirstAID. Importante: se você está recuperando banco de dados Firebird das versões 5, 4, 3, que requerem o uso do servidor Firebird incorporado para extração, execute o FirstAID com privilégios de administrador!

  2. Escolha "Connect to DB":

    figure12
    Figure 12. Escolha "Connect to DB"
  3. Selecione o banco de dados de destino para exportação

    figure13
    Figure 13. Selecione o banco de dados existente para ser o destino da extração

Conexão

Na lista suspensa do campo "Connection", você pode especificar um servidor externo ou usar o servidor local incorporado do FirstAID (listado como Internal Firebird 3, 4, 5).

Para a versão Firebird 3, 4, 5, é necessário selecionar o servidor local incorporado (Internal Firebird N) com a versão apropriada. E, você precisa executar o FirstAID com privilégios administrativos para usar servidores incorporados (para versões Firebird 5, 4, 3) para extração.

Nome do servidor/IP e porta

Se você selecionou "External server", precisa especificar detalhes de conexão para o banco de dados de destino. Por padrão, é definido como localhost e 3050 (porta padrão do Firebird/InterBase).

Caminho para o cliente

O caminho para a biblioteca do cliente (fbclient.dll ou gds32.dll) é definido automaticamente; depende da versão do arquivo de banco de dados fonte (as bibliotecas de cliente necessárias são fornecidas com o FirstAID).

Se você preferir exportar dados com outra versão de servidor diferente do banco de dados corrompido original, precisará escolher a biblioteca de cliente correta desse servidor.

FirstAID ajustará os parâmetros "SQL Dialect" e "Default charset" automaticamente, se a página de cabeçalho do banco de dados corrompido não estiver danificada, caso contrário, você precisará definir esses parâmetros por conta própria.

Por padrão, o FirstAID definirá o banco de dados de destino no modo Forced Writes OFF, para acelerar o processo de exportação. Você pode mudar para Forced Writes ON após a conclusão da recuperação, antes de ir para produção, com o comando

gfix -write sync caminhobancodedados.fdb -user SYSDBA -pass sua_senha

Certifique-se de que o servidor Firebird (ou InterBase) esteja em execução neste momento!

Clique em "Connect".

Por favor, note - se você estiver usando Firebird incorporado (opções Integrated Firebird 3, 4, 5), você precisa executar o FirstAID com privilégios administrativos.

UDFs

Após estabelecer conexão com o banco de dados de destino, o FirstAID verifica UDF (funções definidas pelo usuário em dll externo). Se houver UDFs, a seguinte mensagem aparecerá:

figure14
Figure 14. Aviso de UDFs

Isso significa que há UDF no banco de dados de destino, e você deve fornecer arquivo(s) dll de UDFs para garantir a extração correta. FirstAID mostra o(s) nome(s) das bibliotecas UDF; neste caso é "ib_udf2.dll".

DLLs UDF ausentes podem impedir o processamento adequado da exportação!

Você precisa ir para a pasta UDF de sua instalação Firebird/InterBase e verificar se o arquivo dll necessário está nesta pasta. Se não, copie-o do servidor onde originalmente seu banco de dados corrompido estava localizado. Para versões Firebird 4 e 5, você precisará configurar o acesso a UDF no firebird.conf.

5.2.1. E se eu não tiver uma cópia vazia em bom estado do banco de dados?

Se você não tem uma cópia vazia em bom estado, pode criá-la:

  1. Encontre qualquer cópia em bom estado do banco de dados corrompido (provavelmente será uma cópia antiga em bom estado).

  2. Faça um backup com a opção apenas metadados:

    gbak -b -g -m -user SYSDBA -pass sua_senha Disco:\Caminho_para_bd_bom.fdb Disco:\backup.fbk
  3. Restaure com a opção apenas metadados:

    gbak -c -m Disco:\backup.fbk Disco:\caminho_para_bd_metadados_vazio.fdb -user SYSDBA -pass sua_senha

Use este novo banco de dados vazio como alvo para exportação.

5.2.2. Processo de exportação

Depois disso, o seguinte diálogo aparecerá:

figure15
Figure 15. Permissão para criar tabela de serviço

FirstAID precisa criar uma tabela de serviço para armazenar informações de exportação necessárias. Esta tabela conterá informações sobre restrições de banco de dados, triggers, índices, etc.

Clique em "Yes".

Depois disso, o FirstAID abrirá uma nova guia "Destination database":

figure16
Figure 16. Guia "Destination database"

Nesta guia você pode ver a lista de tabelas do banco de dados de destino, bem como triggers, chaves estrangeiras, verificações e restrições NOT NULL, chaves únicas, domínios, UDFs e geradores (sequências).

Em seguida, clique em "Extract All Tables":

figure17
Figure 17. Iniciar extração

5.2.3. Registro

O seguinte diálogo aparecerá (se você tiver conexão com a Internet no computador onde executa o FirstAID, caso contrário, leia a seção "Registro Offline" abaixo):

figure9
Figure 18. Insira aqui o e-mail e a senha que você recebeu no e-mail do IBSurgeon

Insira aqui seu e-mail (que foi usado para a compra da licença) e senha (do e-mail de [email protected]).

Então clique em "Generate UNLK now".

Observe que o FirstAID salvará o arquivo UNLK para este banco de dados na pasta C:\ProgramData\FBFirstAID3\Unlocks, então da próxima vez que você abrir este arquivo de banco de dados no mesmo computador, o FirstAID não pedirá o registro.

Se você já registrou este banco de dados corrompido no mesmo computador, o diálogo de registro não aparecerá!

Então este diálogo aparecerá:

figure18
Figure 19. Confirmação de um banco de dados de destino

É a confirmação de que você concorda em exportar dados do banco de dados corrompido para o selecionado, e também informa que os dados serão adicionados às tabelas existentes (se já houver registros, eles não serão excluídos automaticamente!). Clique em "Yes".

Se você clicar em "No", o FirstAID tentará criar a estrutura usando os metadados do banco de dados corrompido como modelo. "Cancel" cancelará a operação.

Depois disso, haverá mais um diálogo com a confirmação final e um lembrete sobre a estrutura:

figure19
Figure 20. Lembrete sobre estrutura

Clique em "Yes".

Então você verá um diálogo muito importante com opções de exportação:

figure20
Figure 21. Opções de exportação

Recomendamos a opção "More restored data", ela desativará todas as restrições do banco de dados (exceto chaves primárias) e o FirstAID tentará exportar todos os dados disponíveis.

Após a exportação, todas as restrições serão ativadas novamente (para os dados que permitem). Na guia "Destination database", você pode revisar o resultado e corrigir ou descartar todos os dados que você decidiu serem estranhos ou indesejados - veja a seção "Após a exportação" abaixo.

O modo "More data integrity" restaurará todas as restrições após a exportação e ignorará dados que não correspondam às restrições do banco de dados.

Clique em "Ok"

Depois disso, monitore o processo de extração.

5.2.4. Quanto tempo levará a extração?

O tempo de extração depende do tamanho do banco de dados e do desempenho do computador; pode ser de vários minutos para bancos de dados pequenos e várias horas para bancos de dados muito grandes. Em bom hardware (com unidade SSD), a velocidade de exportação é aproximadamente 1Gb a cada 5 minutos.

Observe que o FirstAID por padrão extrai apenas registros das tabelas dos usuários, e não extrai índices de chaves primárias e estrangeiras, triggers e procedimentos armazenados.

Os valores dos geradores serão exportados se você escolher exportar todas as tabelas (será perguntado sobre isso):

figure27
Figure 22. Confirme a atualização de geradores no banco de dados de destino com valores do banco de dados corrompido

ou se você puder extraí-los manualmente mais tarde:

figure28
Figure 23. Atualização manual dos valores dos geradores

5.3. Exportar para o novo banco de dados vazio sem metadados

Se você não tiver um banco de dados vazio com os mesmos metadados, é possível criar um novo banco de dados, criar metadados nele usando as informações do banco de dados corrompido e exportar dados para lá.

Este método é bom para a situação em que você apenas precisa extrair o máximo possível de dados do banco de dados corrompido e depois processá-los de alguma outra forma.

5.3.1. Exportar estrutura

Abra o banco de dados no FirstAID e então clique em "Create New DB":

figure21
Figure 24. Criar banco de dados

Primeiro você verá esta mensagem:

figure22
Figure 25. Preste atenção ao dialeto e codepage do novo banco de dados (a ser criado)

Ele avisa para prestar atenção às propriedades de dialeto e codepage do próximo diálogo - isso é importante se você tiver uma página de cabeçalho corrompida, caso contrário, será ajustado automaticamente.

Clique em "Ok".

Então você verá o diálogo "Create new database and login":

figure23
Figure 26. Criar novo banco de dados como destino para extração

Ele criará o novo banco de dados vazio para onde os dados do banco de dados corrompido serão bombeados.

Especifique o caminho para o novo banco de dados para exportação e, se necessário, sua collation (escolha NONE se você não souber) e tamanho de página (8192 geralmente é uma boa opção).

O caminho para a biblioteca do cliente (fbclient.dll ou gds32.dll) é especificado automaticamente (é fornecido com o FirstAID).

Clique em "Create".

Se o FirstAID não conseguir criar o banco de dados, revise as configurações (dialeto, senha, charset, tamanho da página) e tente novamente. Por favor, note - se você estiver usando Firebird incorporado (opções Integrated Firebird 3, 4, 5), você precisa executar o FirstAID com privilégios administrativos.

Quando o banco de dados for criado, você verá o seguinte diálogo:

figure24
Figure 27. Diálogo: Você precisa executar um script adicional?

Clique em "No".

Depois disso, clique no botão "Export Structure" na barra de ferramentas principal:

figure25
Figure 28. Clique em "Export structure" para criar tabelas no novo banco de dados

Então aguarde o término da exportação dos metadados do banco de dados:

figure26
Figure 29. Mensagem sobre a quantidade de tabelas criadas

Clique em "Ok"

Se você ver que o número de tabelas criadas é 0, vá para a seção "Quote names" deste guia, tente alterá-la e repita o processo "Export structure".

5.3.2. Extrair dados

Após criar o novo banco de dados e exportar a estrutura, prossiga com a extração usando os mesmos passos descritos acima para "Extrair para o banco de dados vazio com os mesmos metadados".

5.4. Etapas finais com exportação de banco de dados vazio

Como foi mencionado acima, a extração para o banco de dados vazio não criará muitos metadados importantes. Onde obtê-los?

Você pode encontrar valores de geradores e definições SQL para chaves primárias e estrangeiras e índices nas guias "Generators" e "Indices and Constraints":

figure29
Figure 30. Guia "Indices and Constraints" do banco de dados corrompido

É possível criar esses objetos no banco de dados de exportação - você precisa executar esses scripts em seu banco de dados (com isql.exe da pasta Bin do Firebird, por exemplo).

Continuando a tradução do documento:

No entanto, há uma maneira mais fácil de completar a recuperação - apenas bombear dados exportados para o novo banco de dados vazio com todos os metadados necessários usando a ferramenta gratuita IBDataPump.

Você pode baixá-la (https://github.com/hvlad/Interbase-DataPump/releases/tag/tag_3501), executar e definir o banco de dados exportado como fonte e o novo banco de dados vazio como destino.

No entanto, se você chegou a este ponto e decidiu usar o IBDataPump, provavelmente seria melhor escolher a exportação para o banco de dados vazio com metadados prontos.

6. Após a extração

Após a extração, revise seus resultados.

Primeiro de tudo, abra a guia Log e procure por erros. O tipo de erros de extração dará uma dica do que está errado – a razão mais popular para erros é uma diferença nas estruturas de tabelas dos bancos de dados corrompidos e vazios.

figure31
Figure 31. Log de Extração

No final do log, há uma seção "Summary info" com resultados de exportação para cada tabela, onde você pode ver quantos registros foram extraídos e quantos foram ignorados. Se você vê que a maioria dos registros foi adicionada ao banco de dados de destino, e apenas alguns foram ignorados, é um bom sinal.

Se o log for grande, você pode obter o arquivo com ele - o caminho para ele é especificado na parte inferior da guia.

Em seguida, abra a guia "Destination database" e revise todas as guias lá para erros:

figure30
Figure 32. Revise resultados da extração na guia "Destination database"

Os dados nessas guias são armazenados na tabela especial, criada pelo FirstAID durante a exportação.

Você pode conectar-se ao banco de dados exportado várias vezes para corrigir várias inconsistências no banco de dados exportado.

6.1. Guia «Existing tables»

Mostra dados exportados. Para bancos de dados grandes, não é prático percorrer todas as tabelas.

6.2. Guia «Triggers»

Mostra estados dos triggers. Triggers são desativados durante a exportação e reativados depois. Erros geralmente indicam bibliotecas UDF ausentes.

Se você vê erros e triggers inativos, muito provavelmente significa que o trigger usa alguma biblioteca UDF, que não foi encontrada, e o trigger falhou ao ativar. Para corrigir este problema, coloque o UDF necessário no servidor e recompile os triggers.

6.3. Guia «Domains»

Você pode notar problemas na guia «Domains» se houver CHECKs ou restrições NOT NULL no nível de domínios, e essas restrições levam a alguns problemas.

Existem várias opções do que você pode fazer:

figure32
Figure 33. Domínios no banco de dados de destino

Existem as seguintes operações disponíveis:

  1. Deactivate all Domain constraints. Isso desativará todas as restrições. É útil se a restrição foi criada por engano – por exemplo, NOT NULL para a coluna com NULLs em versões pré-3 do Firebird.

  2. Activate all Domain constraints. Se você corrigiu problemas, por exemplo, excluiu todos os registros inconsistentes, pode tentar ativar todas as restrições.

  3. Count inconsistent items for domains. Este comando calculará o número de registros com problemas causados por restrições de domínio e mostrará o número na coluna Inconsistent Items.

  4. Delete All inconsistent Items for domains. Se você acha que o número de itens inconsistentes é pequeno, é possível excluir registros que violam a restrição de domínio.

  5. Rescan Domains. Se você conectou-se ao banco de dados exportado em outro aplicativo e modificou domínios, pode clicar neste botão para reescanear domínios e atualizar o status dos Domínios.

6.4. Guia «Foreign Keys»

figure33
Figure 34. Chaves Estrangeiras no banco de dados de destino

Esta guia é a mais interessante, porque aborda o problema frequente com banco de dados extraído – inconsistência em Chaves Estrangeiras. Tal inconsistência é causada por registros perdidos em algumas tabelas, então outras tabelas com chaves estrangeiras que referenciam as tabelas com registros perdidos dão erros: geralmente «Cannot commit foreign key XXX».

A razão do erro "Cannot commit index…​» é óbvia: a corrupção afeta a integridade referencial do banco de dados, e registros desaparecem de forma mágica (do ponto de vista do servidor).

Por exemplo, você tem uma tabela "Customers" e uma tabela associada "Orders" referenciada por Chave Estrangeira. Sem corrupção, não é possível violar a Chave Estrangeira e excluir registro de Customers sem excluir previamente todos os pedidos que se referem a um cliente específico. A corrupção afeta arquivos de banco de dados em baixo nível e mata registros diretamente. Que surpresa agradável para o servidor ver links não resolvidos para registros mestres de registros de chave estrangeira.

Quando o FirstAID faz a Extração, ele exporta apenas registros disponíveis e pula registros corrompidos, então no banco de dados exportado pode ocorrer este problema com Chaves Estrangeiras.

Existem várias opções de como lidar com este problema.

  1. Excluir registros inconsistentes

  2. Desativar a restrição de Chave Estrangeira e, opcionalmente, criar índices substitutos para Chaves Estrangeiras desativadas

A primeira opção é simplesmente excluir registros com registros inconsistentes do banco de dados exportado. Você pode fazer isso no FirstAID – para todas as tabelas, basta escolher «Delete inconsistent items», ou clicar com o botão direito na tabela e selecionar «Delete inconsistent items for FOREIGNKEY_NAME»

figure34
Figure 35. Opções para chaves estrangeiras problemáticas

A segunda opção é desativar a restrição de Chave Estrangeira apropriada, para que seja possível realizar backup/restore normal depois. Para isso, você precisa selecionar «Deactivate FOREIGNKEY_NAME» no menu do botão direito.

No entanto, a chave estrangeira desativada pode desempenhar um papel importante nos planos de consultas, então é necessário criar índices substitutos para FK desativada – para isso escolha «Emulate FKNAME by index on table TABLENAME».

Na prática, mais frequentemente há uma situação em que é mais fácil excluir registros que violam as restrições de Chave Estrangeira: para isso clique em «Delete inconsistent items» para excluir registros em todas as tabelas, ou escolha tabelas uma por uma, e no menu do botão direito escolha «Delete inconsistent items…».

Após excluir registros inconsistentes, clique em «Count inconsistent items» para ver a situação atual com erros de chave estrangeira. Existem opções «Deactivate all» e «Activate all», que ativam ou desativam todas as chaves estrangeiras no banco de dados.

Observe que o índice pode ter o terceiro estado – não ativo, que é diferente de ativo e inativo. Índices não ativos ocorrem quando o processo de restauração para anormalmente. FirstAID detectará tais índices e mostrará na lista, para que seja possível ativá-los.

6.5. Guias Checks, Nulls, Unique Indices, User Indices

Semelhante à guia Domains.

6.6. Guia UDFs

Esta guia contém lista de UDFs usados no banco de dados exportado. Certifique-se de ter UDFs na pasta UDF do Firebird. Para Firebird 4 e 5, pode haver necessidade de habilitar suporte para UDFs.

6.7. Guia Sequences

Lista geradores e seus valores.

7. Corrigindo problemas de Merge do Nbackup

Desde a versão 2.0, o Firebird tem o mecanismo de backups incrementais (nbackup), mas se tornou bom o suficiente para uso em produção apenas na versão 2.5.2. Desde então, sua popularidade aumentou, e começamos a receber mais solicitações de recuperação para ele, e desde a versão 6.0 a funcionalidade para corrigir nbackup foi incluída no FirstAID.

Existem 2 principais problemas possíveis com backups incrementais corrompidos (geralmente acontece devido a desligamento anormal durante a operação de merge):

  • O arquivo delta não se funde ao banco de dados principal com o comando nbackup –n. Se o arquivo delta não se fundir, não é possível usar o banco de dados e, em caso de corrupção, não é possível usar o FirstAID para reparar o banco de dados.

  • O arquivo delta foi fundido ao arquivo de banco de dados principal, mas ainda contém o link para o delta, e o banco de dados não funciona com vários erros.

Para corrigir esses problemas, o FirstAID tem 2 recursos: «Merge delta file» e «Fix up database header».

7.1. Merge delta file

Se você tem um banco de dados Firebird corrompido com arquivo delta que não pode ser fundido com o comando padrão (nbackup –n database…), use este recurso para realizar a fusão forçada do banco de dados.

Importante! Crie a cópia de backup do arquivo de banco de dados principal e do arquivo delta antes da fusão forçada!

Para usar este recurso, primeiro abra o banco de dados corrompido como de costume: File → "Open corrupted database". Em seguida, escolha no menu principal "Nbackup merge"→"Merge delta" file e selecione o arquivo delta para este banco de dados.

figure35
Figure 36. Fundir arquivo delta problemático

Por favor, tenha cuidado – se você selecionar arquivo delta de um banco de dados diferente, a fusão forçada arruinará o arquivo de banco de dados principal!

É por isso que pedimos para sempre criar uma cópia de backup do arquivo de banco de dados principal antes da fusão forçada! O processo de fusão será visualizado com a barra de progresso e registros no log:

[466] 19:57:45.411 Export Info> === 0 ===
[467] 19:57:45.411 Export Info>deltaPos = 1 iP = 1 actNum0 targ0
[468] 19:57:45.421 Export Info>deltaPos = 2 iP = 2 actNum3305 targ3305
[469] 19:57:45.426 Export Info>deltaPos = 3 iP = 3 actNum155 targ155
[470] 19:57:45.435 Export Info>deltaPos = 4 iP = 4 actNum14 targ14
[471] 19:57:45.444 Export Info>deltaPos = 5 iP = 5 actNum151 targ151
[472] 19:57:45.453 Export Info>deltaPos = 6 iP = 6 actNum275 targ275
[473] 19:57:45.462 Export Info>deltaPos = 7 iP = 7 actNum16 targ16

No final do processo (o tempo depende do tamanho do delta), a seguinte mensagem será mostrada:

figure36
Figure 37. Fim do processo de Merge

Isso significa que as páginas de dados foram copiadas do delta para o arquivo de banco de dados principal. Depois disso, você precisa corrigir o arquivo de banco de dados, a fim de remover o bloqueio de backup do banco de dados.

A melhor maneira de fazer isso é executar o comando nbackup padrão:

nbackup -fixup nome_do_banco_de_dados -user SYSDBA -pass suasenha

No entanto, este comando pode não ser bem-sucedido e dar vários erros.

Neste caso, escolha Nbackup merge→ Fix up database header

Depois disso, tente realizar gbak -b backup da seção "Etapas finais após DirectFix" — se estiver Ok, o banco de dados está bem, você pode fazer restore para ter 100% de certeza. Se gbak -b falhar, prossiga com a recuperação DirectFix e depois faça backup/restore, ou com Extração.

7.2. Fix up database header

Se você não consegue corrigir o banco de dados corrompido com o comando nbackup padrão (nbackup -f nomedoabancodedados…), use esta função para remover a marca de bloqueio de backup da página de cabeçalho.

Por favor, tenha cuidado! Sempre tenha uma cópia do banco de dados antes do fixup com FirstAID!

Para aplicar, abra o banco de dados corrompido com o bloqueio de backup no FirstAID e escolha "Nbackup merge"→ "Fix up header".

Como resultado, a seguinte mensagem aparecerá:

figure37
Figure 38. Resultado do Fixup

Depois disso, tente realizar gbak -b backup da seção "Etapas finais após DirectFix" — se estiver Ok, o banco de dados está bem, você pode fazer restore para ter 100% de certeza. Se gbak -b falhar, prossiga com a recuperação DirectFix e depois faça backup/restore, ou com Extração.

8. Informações importantes para o processo de recuperação

8.1. Configuração "Quote names"

Na guia "Database" do FirstAID, você pode ver a caixa de seleção "Quote Names". Esta caixa determina se o FirstAID deve colocar entre aspas os nomes de tabelas e metadados durante a exportação, ou seja, se o banco de dados está no Dialeto 1 ou no Dialeto 3.

Geralmente é definido ON/OFF automaticamente, usando informações da página de cabeçalho do banco de dados corrompido (não do banco de dados de destino!).

Se a página de cabeçalho estiver corrompida ou se você estiver tentando exportar dados para o banco de dados com outro dialeto, talvez seja necessário marcar ou desmarcar "Quote names".

Uma das boas indicações de que você precisa alterar a configuração "Quote Names" é 0 tabelas como resultado do comando "Export Structure"

figure38
Figure 39. Caixa de seleção "Quote names"

8.2. Registro offline

Se você executar o FirstAID em um computador sem acesso à Internet, precisará realizar o "Registro offline" do banco de dados

figure39
Figure 40. Processo de registro offline

Isso significa que não é possível conectar-se ao IBSurgeon Deploy Center (http://deploy.ib-aid.com) a partir deste computador, então você precisa enviar o arquivo UIK através do site ou e-mail.

1) Insira Email e Senha e clique em "Offline registration", então salve o arquivo UIK

2) Abra https://deploy.ib-aid.com em outro computador

3) Faça login lá com nome de usuário e senha recebidos do IBSurgeon

4) Escolha "IBSurgeon FirstAID 8.x", e então escolha "Activation"

5) Faça upload do UIK lá e baixe o UNLK

6) Faça upload do UNLK para Registro Offline

Você pode enviar UIK por e-mail para [email protected] (isso levará algum tempo devido ao processamento manual de tais solicitações)

8.3. Exportar a tabela única

FirstAID permite exportar tabelas específicas. Selecione uma tabela, clique com o botão direito e escolha "Export current relation".

figure40
Figure 41. Exportando a tabela única

As etapas para exportação são semelhantes à exportação de todas as tabelas para o banco de dados recém-criado

8.4. External Metadata

Se a corrupção afeta as informações do sistema ao ponto em que o FirstAID não consegue ver o conteúdo do banco de dados devido à falta de metadados, você pode pegar metadados de:

  1. Um banco de dados bom com a mesma estrutura (cópia antiga em bom estado)

  2. Repositório de metadados HQbird FBDataGuard

Para usar metadados externos:

1) Abra o banco de dados corrompido

2) Escolha "Extract/Export"/"Use External metadata"

figure41
Figure 42. Escolha "Extract/Export" → "Use External metadata"

3) Selecione "Existing database" e escolha sua cópia de banco de dados em bom estado

O seguinte aviso aparecerá:

figure42
Figure 43. Aviso: o banco de dados de onde você pega metadados deve ter os mesmos metadados que o corrompido

Clique em "Ok".

figure43
Figure 44. Escolha como obter metadados externos

Se você precisar obter metadados do banco de dados ativo (cópia antiga em bom estado), clique em "Existing database":

figure44
Figure 45. Escolha a cópia antiga em bom estado do banco de dados corrompido como fonte de metadados

O servidor Firebird deve estar em execução quando o FirstAID extrai metadados do banco de dados bom!

Depois disso, o FirstAID extrairá metadados do banco de dados bom e recarregará o banco de dados corrompido para aplicar novos metadados. Esperamos que você possa ver dados para recuperar.

Se for assim, prossiga com a exportação dos dados (veja a seção "Recuperação através de extração" acima.)

9. Suporte

Para perguntas, contate [email protected]