Pessoal, boa tarde,
Estou tentando restaurar o arquivo gerado pelo hsqldb “arquivo.backup”, mais não estou conseguindo.
No prompt estou utilizando o seguinte comando:
E está retornando a seguinte exception:
Exception in thread "main" org.hsqldb.lib.tar.TarMalformatException: Bad value in header for field checksum: java.lang.NumberFormatException: For input string: "9qQ?1á¼}".
Header field could use 'binary number extension', which we don't support.
Use Pax Interchange Format instead for huge files.
at org.hsqldb.lib.tar.TarReader$TarEntryHeader.readInteger(Unknown Source)
at org.hsqldb.lib.tar.TarReader$TarEntryHeader.<init>(Unknown Source)
at org.hsqldb.lib.tar.TarReader.read(Unknown Source)
at org.hsqldb.lib.tar.DbBackup.main(Unknown Source)
E uma dúvida, essa classe DbBackup só restaura arquivos de backup com extensão .tar?
Valeu!
“NumberFormatException”
Não sei como funciona essa restauração, mas pelo erro q ta dando ele não ta conseguindo converter um dado para o tipo correto.
Pelo q entendi ele tem uma string “9qQ?1á¼” e ta tentando fazer uma conversão pra um valor numerico
[quote=fdiaz2011]“NumberFormatException”
Não sei como funciona essa restauração, mas pelo erro q ta dando ele não ta conseguindo converter um dado para o tipo correto.
Pelo q entendi ele tem uma string “9qQ?1á¼” e ta tentando fazer uma conversão pra um valor numerico
[/quote]
Sim… por isso acho que essa restauração seja só para arquivos .tar (Mas também acho estranho porque o arquivo .backup é gerado pelo próprio HSQL.).
Como você gerou este arquivo de backup???
A classe org.hsqldb.lib.tar.DbBackup parece só trabalhar com arquivos tar…
O HSQLDB tem um arquivo.backup que fica armazenado junto dos arquivos do banco de dados que nada tem a ver com backup e sim é um backup interno devido a forma que ele trabalha (já mexi no fonte do HSQLDB). Acredito que não seja isso que você esteja usando…
Uma maneira facil de fazer backup/restore no HSQLDB é gerar scripts…
jmmenezes,
É então me enganei, pensei que esse arquivo.backup gerado junto com os outros arquivos do banco de dados fosse um backup do ultimo estado consistente do banco de dados que dava para ser restaurado…
No meu caso o arquivo.data parece estar corrompido de alguma forma, mas só para duas tabelas…
Quando faço um select em uma delas, recebo a seguinte excessão:
File input/output errorerror java.io.UTFDataFormatException reading row - file C:/BancoDeDados/arquivo.data / Error Code: -29 / State: S1000
É… o arquivo data pode se corromper facilmente, não sei se lembro exatamente o processo do hsqldb mas acho que o arquivo .backup é um .zip puro da ultima situação “integra” do arquivo .data… Quando da problema no .data ele descompacta o backup e roda o log de transações encima…
Se vc não usou alguma ferramenta para fazer backup… então ferrou…
O problema também que esse arquivo .backup é gerado mesmo quando o data corrompe… Por isso o ideal é gerar um script para fazer os backups, pois desta forma se algo corromper o backup não será gerado e você poderá restaurar a situação anterior…
Sei que tem um parâmetro modified no arquivo .properties que muda a sequencia de inicialização. Veja:
http://www.hsqldb.org/doc/guide/apc.html
Desta forma você pode tentar fazer algumas mudanças e tentativas de salvar pelo menos a posição deste .backup.
Agora se o data já foi colocado la dentro corrompido. Ferrou!
[quote=jmmenezes]É… o arquivo data pode se corromper facilmente, não sei se lembro exatamente o processo do hsqldb mas acho que o arquivo .backup é um .zip puro da ultima situação “integra” do arquivo .data… Quando da problema no .data ele descompacta o backup e roda o log de transações encima…
Se vc não usou alguma ferramenta para fazer backup… então ferrou…
O problema também que esse arquivo .backup é gerado mesmo quando o data corrompe… Por isso o ideal é gerar um script para fazer os backups, pois desta forma se algo corromper o backup não será gerado e você poderá restaurar a situação anterior…
Sei que tem um parâmetro modified no arquivo .properties que muda a sequencia de inicialização. Veja:
http://www.hsqldb.org/doc/guide/apc.html
Desta forma você pode tentar fazer algumas mudanças e tentativas de salvar pelo menos a posição deste .backup.
Agora se o data já foi colocado la dentro corrompido. Ferrou![/quote]
O problema é que não estou conseguindo abrir ou até mesmo descompactar o arquivo.backup como um .zip.
Tentei a alternativa de na base rodar o comando script ‘C:\script.txt’ para gerar todo o script da base e depois executar novamente esse script gerado na base… Só que ao rodar esse comando está sendo gerada a excessão do SQL ‘out of memory’.
#EDIT
Entendi… na verdade essa sequencia de quando a flag modified está como ‘yes’ de restaurar o banco de dados e tudo mais é feita pelo próprio HSQL, então nesse caso provavelmente está acontecendo o que você disse, o arquivo.data dentro do arquivo.backup foi gravado corrompido e por isso essa restauração não está ocorrendo.
Nesse caso não restam muitas alternativas…
A única coisa que tenho gravada são os próprios arquivos do HSQL:
arquivo.script
arquivo.data
arquivo.log
arquivo.backup
Sendo que o .data e .backup por estarem corrompidos não servem mais…!
Nesse caso se não tiver um backup por script, não há solução!
No máximo um drop das tabelas corrompidas para gerar esse script e perda parcial dos dados (que dependendo do que são podem ser regerados manualmente, por exemplo, se for de uma tabela de apoio).
Se corrompeu tabela transacional e não tem backup, já eras!