Como posso restaurar um db Shotwell corrompido?

5

Enquanto eu importava fotos de um cartão SD em Shotwell, meu laptop travou (desligamento devido ao superaquecimento). Agora, não consigo mais lançar o Shotwell:

$ shotwell
**
ERROR:x86_64-linux-gnu/db/VersionTable.c:104:version_table_construct: assertion failed: (res == SQLITE_OK)

Se eu mover o .db file ~/.shotwell/data/photo.db em outro lugar para que ele não esteja mais presente (mas com backup), o shotwell será iniciado, mas reconstruirá sua biblioteca, que estará vazia. Eu posso reimportar as pastas que o shotwell cria, mas perco quase todos os meta-dados (o mais importante são as "pastas", ou eventos, e sua imagem principal)

Existe uma maneira de reparar / reconstruir / restaurar photo.db ? Como posso ver o que tem dentro? quão ruim está danificado?

Ou há outra maneira de recuperar meus eventos e importações?

    
por Yann Dìnendal 23.08.2011 / 01:13

3 respostas

8

O banco de dados do Shotwell pode ser corrompido devido a pânico do kernel e perda de energia.

Com Shotwell 0,10 ou superior, o backup do banco de dados é feito sempre que o programa é encerrado; na pior das hipóteses, você acabaria perdendo qualquer trabalho desde que iniciou o programa.

Infelizmente, as versões mais antigas do Shotwell não têm esse recurso e é improvável que você possa se recuperar de um banco de dados corrompido.

    
por MrEricSir 24.08.2011 / 20:38
3

Você pode encontrar o banco de dados de backup em sua pasta .shotwell em "home". Haverá um photo.db.bak.

Basta renomeá-lo para photo.db e excluir o antigo "photo.db" corrompido e você deve estar bem novamente.

    
por Wolf Vollprecht 29.03.2012 / 11:47
2

Você pode verificar a integridade do seu banco de dados com o seguinte comando:

$ sqlite3 photo.db
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> pragma integrity_check;
ok

Se relatar um erro, você poderá recuperar o conteúdo despejando os dados e restaurando-os em um novo banco de dados:

$ echo .dump | sqlite3 photo.db > photo_dump.sql
$ sqlite3 new_photo.db < photo_dump.sql

Faça o backup do banco de dados original e, em seguida, mova o novo para o local e veja como as coisas estão indo.

    
por James Henstridge 23.08.2011 / 02:50