web-dev-qa-db-ja.com

破損したShotwell dbを復元するにはどうすればよいですか?

ShotwellでSDカードから写真をインポートしているときに、ラップトップがクラッシュしました(過熱によるシャットダウン)。これで、Shotwellを起動できなくなりました。

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

.dbファイル~/.shotwell/data/photo.dbを別の場所に移動して、バックアップされていない場合、shotwellは起動しますが、ライブラリが再構築され、空になります。ショットウェルが作成したフォルダーを再インポートできますが、ほぼすべてのメタデータ(最も重要なのは「フォルダー」、またはイベント、およびそれらのメイン画像)を失います。

photo.dbを修復/再構築/復元する方法はありますか?中身を見るにはどうすればいいですか?どれだけ悪いの?

または、イベントとインポートを取り戻す別の方法はありますか?

5
Yann Dìnendal

Shotwellのデータベースは、カーネルパニックと電源喪失により破損する可能性があります。

Shotwell 0.10以降では、プログラムが終了するたびにデータベースが自動的にバックアップされます。最悪の場合、プログラムを開始してから作業を失うことになります。

残念ながら、Shotwellの古いバージョンにはこの機能がなく、破損したデータベースから回復できる可能性は低いです。

8
MrEricSir

バックアップデータベースは、「home」の.shotwellフォルダーにあります。 photo.db.bakがあります。

名前をphoto.dbに変更し、破損した古い「photo.db」を削除するだけで、問題はなくなります。

3
Wolf Vollprecht

次のコマンドを使用して、データベースの整合性を確認できます。

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

エラーが報告された場合、データをダンプして新しいデータベースに復元することにより、内容を回復できる場合があります。

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

元のデータベースをバックアップしてから、新しいデータベースを所定の場所に移動し、状況を確認します。

2