Lightroomのカタログ(lrcat)が壊れてたのでsqliteツールで修復してみた話


カタログファイル開けられない…

メインPCのSSDがご臨終し、バックアップしているNASからいろいろファイルをニューPCに書き戻して、さてLightroomのカタログ確認するかーっと開いたら…

[Window Title]
確認

[Main Instruction]
カタログ “LRCatalog-2” LRCatalog-2 は書き込み不可で開けないため、Lightroom はこのカタログを使用できません。

[Content]
権限が正しくないか、別の Lightroom アプリケーションがこのカタログを使用している可能性があります。問題を修正するか、別のカタログを選択してください。

[別のカタログを選択] [再実行] [終了]

メインPCで普段使っているカタログだし、LR終了後に不定期にNASにrobocopyでバックアップしていたものだ。壊れてないはずやのに?!
なんでやねんっ!とwebで検索検索!っとしてもロックファイルを消せだの権限を確認しろなどと書いてある。
何度も確認したが問題ない

lrcatってsqliteファイルだったのね

半日くらい別の作業と並行であれこれ見ていくとふとjornalファイルもあれば消せ、とかみた…あ、ひょっとしてlrcatってdbファイル?sqlite?と思ってDB Browser入れたら…

---------------------------
DB Browser for SQLite
---------------------------
Could not open database file.
Reason: database disk image is malformed
---------------------------
OK   
---------------------------

!なるほどなんかDB壊れてるっぽいわ、ということで修復方法を調査。

修復方法

まずsqliteからコマンドラインツールsqlite-tools-win32-x86-****.zipを入手。
で、展開した実行ファイルをカタログファイルと同じ場所に持ってくる。
カタログファイルのある場所をコマンドプロンプトで開く。
sqliteでカタログを開いてダンプしてdump.txtに書き込む。

cmd.exe
> sqlite3 LRCatalog-2.lrcat .dump > dump.txt

何度かチャレンジしてみても、dump.txtが0Byteだったら諦めよう。
このdump.txtはテキストファイルなのでエディタで開く。なお数GByte級ファイルとかだとテキストエディタによってはフリーズする。私はVSCodeで開きました。VSCode優秀。
最後の行までスクロールしてROLLBACKとなっていたら、この部分をCOMMITに変更して保存する。

dump.txt
/**** ERROR: (11) database disk image is malformed *****/
ROLLBACK; -- due to errors

↓ROLLBACKをCOMMITに変更して保存

dump.txt
/**** ERROR: (11) database disk image is malformed *****/
COMMIT; -- due to errors

新しいファイル(LRCatalog_new.lrcat)をsqlite3で開いて、dump.txtをreadする。

cmd.exe
>sqlite3 LRCatalog_new.lrcat
sqlite> .read dump.txt
sqlite> .exit

LRCatalog_new.lrcatをLightroomで開いて、画像ファイルやらフォルダが読めらラッキー!
何度か同じ事を繰り返しても何も読み込めない場合はあきらめましょう…。

私の場合

ちなみに私のはこんな感じになりました(LRCatalog-2.lrcatが開けないファイル、修復後ファイルがLRCatalog-1.lrcat)

ぼやき

QAサイトとかで頓珍漢な回答してるのかなりノイジーやね(英語サイト、日本語サイト含めて)
adobeよ!メッセージの出し方!書き込み権限関係ないやんかっ!