Freitag, 14. Februar 2014

Einen Katalog reparieren, welchen Lightroom nicht mehr öffnen kann!

LR_defekter_KatalogIn diesem Betrag möchte ich einmal zeigen, wie es mir gelungen ist, einen Katalog, welcher nicht mehr von Lightroom repariert werden konnte, doch noch zu retten. Eine Warnung vor weg: Dieses Vorgehen hat bei mir funktioniert, das heißt aber nicht, das es auch für euch funktioniert! Deshalb, legt immer ein Backup eures defekten Katalogs an.

Was war passiert? Aus irgendeinem Grund war ein Teil meines Kataloges nicht mehr zu Lesen, sodass Lightroom den Katalog auch nicht mehr reparieren konnte. Mein erster Versuch war, die .lrcat Datei über den Windows Explorer zu kopieren und die Kopie zu öffnen. Der Katalog ließ sich aber leider nicht kopieren. Deshalb musste ich mein Kopie über die Komandozeile erstellen:
type defekter_Katalog > neuer_Katalog

LR_defekter_Katalog_oeffnenDanach hatte ich wieder einen Katalog, welchen ich in Lightroom öffnen konnte und welchen Lightroom reparieren wollte – aber ohne Erfolg! Was jetzt?

Da der Lightroom Katalog nichts weiter als eine SQLite Datenbank ist, sollte es eigentlich möglich sein, diesen zu reparieren. Meine Suche nach kostenlosen Tools, welche dies tun, war aber leider erfolglos. Mit einigen Werkzeugen konnte ich aber immerhin die Datenbank öffnen und feststellen, das die Datenbank grundsätzlich noch in Takt war.

Recovery der SQLite Datenbank

Nachdem ich kein Werkzeuge gefunden hatte, blieb mir nur noch der Weg über einen Datenbank dump. Als erstes erzeugte ich mit:

echo .dump | ./sqlite3 neuer_Katalog > neuer_Katalog.sql

oder

./sqlite3 neuer_Katalog .dump > neuer_Katalog.sql

einen dump der Datenbank. (Ein Dump einer Datenbank ist eine Textdatei, welche alle Informationen zum Erzeugen der Datenbank und alle Daten enthält.)

Bei dem Versuch, aus diesem mit:

./sqlite3 –init neuer_Katalog.sql Katalog.lrcat


wieder eine Datenbank zu erzeugen, gab es mehrere Fehler. Also mußte ich den dump editieren, was aber bei 2.1 GB Textdatei nicht trivial ist. Mit Pilot Editor Lite habe ich aber ein Windows Programm gefunden, welches das hinbekam.

Die Fehlermeldungen enthielten Zeilennummern, sodass es sich der Fehler schnell finden und beheben ließen. (Dazu muss man sich aber mit SQL auskennen.) Eine Fehlermeldung besagte, das der Name einer Tabelle in meinem Dump schon von einer internen SQLite Tabelle verwendet wurde. Also habe ich die alle Zeilen zur entsprechenden Tabelle aus meinem Dump gelöscht. Schließlich gab  es eine Zeile im SQL Dump, welche das Schlüsselwort “ERROR” enthielt, auch dieses Problem habe ich gelöst.

Danach ließ sich doch noch mit

./sqlite3 –init neuer_Katalog.sql Katalog.lrcat

ein neuer Katalog anlegen. In Lightroom dem Katalog öffnen und alles ist Gut! So die Theorie. Aber leider wollte Lightroom den Katalog nicht öffnen – “Ungültiger Katalog”! Was jetzt?

Die Fehlermeldung kam so schnell, das Lightroom eigentlich keinen Fehler im Katalog gefunden haben konnte. Es musste also irgend etwas anderes sein, was Lightroom an meinem Katalog störte. Eine Prüfsumme zum Beispiel. Um das raus zubekommen erstellte ich einen neuen, leeren Katalog und erstellte davon einen Dump. Jetzt “nur noch” einen 2.1 GB Dump gegen einen 3000 Byte Dump vergleichen… Aber ohne Erfolg, keine Prüfsumme oder ähnliches.

Also habe ich beide SQLite Datenbanken untersucht. Und da war der Unterschied! Mein neu erstellter Datenbankkatalog hatte ein anderes Datenbankformat als Lightroom es verwendet. Wer sich jetzt mit SQLite genauer auskennt, kann das Problem sicherlich schnell fixen. Ich arbeite aber eigentlich mehr mit MySQL und kenne mich bei SQLlite nicht so gut aus. Also jetzt der letzte Schritt, mit welchem ich endlich wieder einen intakten Katalog kam:

Mit dem Befehl

./sqlite3 –init neuer_Katalog.sql leerer_Katalog.lrcat

habe ich in meinen leeren, original Lightroom Katalog die alte Datenbank importiert. Die Fehlermeldungen in der Form

Error: near line 85415381: index index_AgRemotePhoto_collectionRemoteId already exists

kann man getrost ignorieren. Die Datenbank beschwert sich darüber, das Strukturen, welche angelegt werden sollen, schon vorhanden sind.

Danach ließ sich der Katalog in Lightroom öffnen. Jetzt nur noch ein paar Abschlussarbeiten: Backup des jetzt wieder funktionierenden Kataloges und dann Lightroom den Katalog überprüfen und optimieren lassen. Schließlich habe ich diesen Katalog in das Backup meines letzten Kataloges importiert um einen intakten Katalog zu erhalten.

Das Ergebnis

Einen Datenverlust konnte ich aktuell nicht feststellen, Speziell die Änderungen, welche ich vor kurzem alle vorgenommen hatte, waren erhalten geblieben. Damit war das Ziel erreicht!

Sollte ich dennoch in ein paar Wochen einen Datenverlust feststellen, ist dieser sicherlich nur an alten Entwicklungen, welche sich noch in einem anderen der Backups des Kataloges finden und wieder herstellen lassen.

Kommentare:

  1. Vielen Dank für die ausführliche Beschreibung. Ich habe ebenfalls ein kurioses Lr-Katalogproblem (Kat. auf ext. HDD funzt an einem Rechner problemlos und verursacht an einem anderen, nagelneuen, Grafikprobleme). Kannst Du für SQL-Unkundige noch mal die Befehlszeile zum Erzeugen eines Dumps erklären? Ich nehme an, es braucht den Pfad zur Katalogdatei und außerdem die Software SQLite, oder?

    AntwortenLöschen
    Antworten
    1. Hallo!
      Gerne beschreibe ich nochmals die einzelnen sql Befehle. Sqlite kann von der Seite http://www.sqlite.org/download.html herunter geladen werden. Dabei das Command Line Interface ("A command-line shell for accessing...") aus den "Precompiled Binaries" auswählen.

      echo .dump | ./sqlite3.exe neuer_Katalog > neuer_Katalog.sql

      Hier wird sqlite3.exe mit dem Katalog "neuer_Katalog" gestartet. Durch "echo .dump" wird sqlite mitgeteilt, einen dump auszuführen. Dieser würde normalerweise auf der Windows Console ausgebeben. Der "> neuer_Katalog.sql" Teil des Befehls sorgt dafür, das der Dump in die Textdatei "neuer_Katalog.sql" geschrieben wird.


      ./sqlite3.exe –init neuer_Katalog.sql Katalog.lrcat

      Der Befehl "-init" legt eine neue Datenbank an, wenn diese nicht schon vorhanden ist. Die Datenbank hat den Namen "Katalog.lrcat". Nach dem Anlegen der Datenbank wird das "neuer_Katalog.sql" Skript von sqlite ausgeführt.

      Ich hoffe, das Hilft dir Weiter. Aber bei "Grafikproblemen" würde ich eher woanders suchen... Was bedeutet denn Grafikprobleme? Und welche Daten liegen denn genau auf deiner externen Platte?

      Löschen
  2. That was fantastic! Thank you!
    I've been shell shocked when my catalog was not backed up.
    Some errors I made on the way:
    1) I tried to write the above commands into the command tool where I had SQLite3 open.
    2) I tried using a SQL version with a fancy user interface, because above mistake meant I was not getting any results at first. However those tend to duplicate tables when re-importing the sql file into a new .lrcat file, so Lightroom did not accept the final product.
    3) In my desperation, I had been messing with SQLite3 not knowing what I was doing and was unaware I left it defunct. A long time later I reinstalled SQLite and all of a sudden it worked.

    IT WORKED!!!

    I have everything back, my photos, the order they were in, the collections and the edits.

    Thank you for the great advice!

    Wolfgang
    Ich weiss nur nicht, warum wir uns auf Englisch unterhalten haben...

    AntwortenLöschen

Hallo, ich freue mich auf deinen Kommentar! Dieser wird so bald wie möglich für alle freigeschaltet.