web-dev-qa-db-fra.com

Comment puis-je restaurer une base de données Shotwell corrompue?

Alors que j'importais des photos d'une carte SD dans Shotwell, mon ordinateur portable est tombé en panne (arrêt dû à une surchauffe). Maintenant, je ne peux plus lancer Shotwell:

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

Si je déplace le fichier .db~/.shotwell/data/photo.db pour qu'il ne soit plus présent (mais sauvegardé), shotwell se lancera mais reconstruira sa bibliothèque, qui sera vide. Je peux réimporter les dossiers créés par Shotwell, mais je perds presque toutes les méta-données (surtout les "dossiers" ou les événements et leur image principale).

Existe-t-il un moyen de réparer/reconstruire/restaurer photo.db? Comment puis-je voir ce qu'il y a à l'intérieur? à quel point il est endommagé?

Ou existe-t-il un autre moyen de récupérer mes événements et mes importations?

5
Yann Dìnendal

La base de données de Shotwell peut être corrompue en raison de la panique du noyau et de la perte de puissance.

Avec Shotwell 0.10 ou supérieur, la base de données est automatiquement sauvegardée chaque fois que le programme se ferme. dans le pire des cas, vous perdriez tout travail depuis le début du programme.

Malheureusement, les anciennes versions de Shotwell ne disposent pas de cette fonctionnalité et il est peu probable que vous puissiez récupérer à partir d'une base de données corrompue.

8
MrEricSir

Vous pouvez trouver la base de données de sauvegarde dans votre dossier .shotwell dans "home". Il y aura un photo.db.bak.

Renommez-le simplement en photo.db et supprimez le vieux "photo.db" corrompu, et tout devrait bien se passer à nouveau.

3
Wolf Vollprecht

Vous pouvez vérifier l'intégrité de votre base de données avec la commande suivante:

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

S'il signale une erreur, vous pourrez peut-être récupérer le contenu en vidant les données et en les restaurant dans une nouvelle base de données:

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

Sauvegardez la base de données d'origine, puis déplacez la nouvelle en place et voyez comment les choses se passent.

2
James Henstridge