Hinweis
Da Firefox für diesen Vorgang geschlossen sein muss, müssen Sie diese Seite in einem anderen Webbrowser öffnen oder ausdrucken, bevor Sie fortfahren.
Nachdem ich stundenlang versucht hatte, die Places-Datenbank wiederherzustellen, selbst wenn ich den Firefox-Quellcode las, ist es mir gelungen. So habe ich es gemacht:
- Laden Sie die neueste Version der SQLite-Shell herunter und extrahieren Sie sie in Ihren Profilordner. Unter Windows Vista und Windows 7 befindet es sich im
C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles\<code>.default
Ordner. - Schließen Sie Firefox, falls es läuft.
- Die Places-Datenbank befindet sich in der
places.sqlite
Datei. Wenn die Datei aufgrund einer Beschädigung ersetzt wurde, verwenden Sie dieplaces.sqlite.corrupt
Datei für die Wiederherstellung. Erstellen Sie eine Sicherungskopie der Datei namensplaces.sqlite.bak
oderplaces.sqlite.corrupt.bak
. - Verwenden Sie die SQLite-Shell, um die Datenbankdatei zu öffnen (
sqlite3 places.sqlite
odersqlite3 places.sqlite.corrupt
), und geben Sie dann Folgendes ein:
.output dump.sql -- sends output to file dump.sql .dump -- dumps database to file
Da die Datenbank beschädigt ist, ist der resultierende Datenbankspeicherauszug nicht vollständig und nicht alle wiederherstellbaren Daten wurden abgerufen. Um herauszufinden, wo der Fehler aufgetreten ist, suchen Sie nach dem Wort
ERROR
(alle Großbuchstaben) in einem SQL-Kommentar in der Abbilddateidump.sql
(ich habe Notepad ++ verwendet), und lesen Sie den SQL-INSERT
Befehl darüber, um die betreffende Tabelle zu ermitteln. In meinem Fall ist der beschädigte Tischmoz_places
. (Eine Beschreibung der Tabellen in der Places-Datenbank finden Sie hier ; ein ziemlich veraltetes ER-Diagramm finden Sie hier . Ich erkläre, wie Sie zusätzliche Daten nur aus dieser Tabelle wiederherstellen können; das folgende Verfahren ist wahrscheinlich für das andere nicht anwendbar Tabellen, so überspringen Sie diese Unterschritte, wenn eine andere Tabelle alsmoz_places
ist involviert.)- Jede Zeile in der
moz_places
Tabelle hat eine ID. Die Zeilen werden in der Reihenfolge dieser ID aus der Tabelle ausgegeben. 1 Die ID ist der erste Wert, der auf die öffnende Klammer in derINSERT
Anweisung folgt . Der Bereich, in dem die Datenbank beschädigt ist, ist wahrscheinlich ein kleiner Zeilenblock in dieser Tabelle. Die Idee hier ist, diesen beschädigten Bereich zu überspringen und so viele Daten wie möglich wiederherzustellen. Der Startbereich eines solchen Blocks wird im Dump als Zeile vor demERROR
Kommentar dargestellt. Anhand der ID für diese Zeile können wir feststellen, wo die Datenbank beschädigt ist. Dazu verwenden wirSELECT
Anweisungen mit der ID als Bedingung. Dieser Vorgang erfordert einige Versuche. Wenn beispielsweise die letzte ID vor dem Fehler 49999 war und der Fehler folgt, beginnt der beschädigte Block bei der ID 50000. Verwenden Sie folgende Anweisungen:
- unnötige Ausgabe unterdrücken - Der folgende Befehl gilt für Windows-Systeme - Verwenden Sie für Linux und andere Unix- und Unix-ähnliche Systeme .output / dev / null Ausgabe NUL SELECT id FROM moz_places WHERE id> = 50100;
- Passen Sie den Wert an
id >=
und wiederholen Sie den obigenSELECT
Befehl, bis Sie den kleinsten Wert finden, der nicht dazu führt, dass SQLite einen Fehler ausgibt. Dies ist die ID, die sich auf die Zeile bezieht, von der aus wir zusätzliche Daten wiederherstellen können. Nehmen wir an, diese ID lautet 50200. Geben Sie zum Speichern dieser Daten Folgendes ein:
.ausgabe dump2.sql .Modus einfügen SELECT * FROM moz_places WO ID> = 50200; - normales Ausgabeverhalten wiederherstellen .outStdout .Modusliste
- Beachten Sie, dass die
INSERT
Anweisungen in derdump2.sql
Datei mit beginnenINSERT INTO table VALUES
. Verwenden Sie daher die Such- und Ersetzungsfunktion in Ihrem Texteditor, um alle Instanzen dieser Zeichenfolge durch zu ersetzenINSERT INTO moz_places VALUES
. - Kopieren Sie den gesamten Inhalt der
dump2.sql
Datei und fügen Sie ihn in diedump.sql
Datei ein, in der derERROR
Kommentar angezeigt wird.
- Jede Zeile in der
- Ersetzen Sie das
ROLLBACK; -- due to errors
am Ende der Datei durchCOMMIT;
. - Fügen Sie den folgenden Code am Anfang der
dump.sql
Datei hinzu. Ersetzen Sie<version>
den korrekten Wert, der für Firefox erforderlich ist, um die Version des Datenbankschemas basierend auf der Firefox-Version zu ermitteln, wie folgt (dies ist in der Firefox-Quelldatei zu findentoolkit/components/places/Database.cpp
):- Firefox 50: Schemaversion 33
- Firefox 51: Schemaversion 34
- Firefox 52: Schemaversion 35
- Firefox 53: Schemaversion 36
- Firefox 57: Schemaversion 39
- Firefox 58: Schemaversion 41
- Firefox 60: Schemaversion 43
- Firefox 61: Schemaversion 47
PRAGMA page_size = 4096; PRAGMA user_version = <Version>;
- Beenden Sie die SQLite-Shell, löschen Sie sie
places.sqlite
und starten Sie dann die SQLite-Shell, um eine leereplaces.sqlite
Datenbank zu erstellensqlite3 places.sqlite
. Geben Sie.read dump.sql
den Typ ein, um den SQL-Dump in die Datenbank zu laden. - Starten Sie Firefox und vergewissern Sie sich, dass Ihr Verlauf und Ihre Standortleiste wie vorgesehen funktionieren. Wenn Sie bestätigt haben, dass alles in Ordnung ist, entfernen Sie die Datenbankauszugsdateien und die ausführbare SQLite-Shell-Datei aus dem Profilordner.
Weitere relevante Informationen finden Sie auf den folgenden Seiten:
1 SQL garantiert normalerweise nicht, dass die Datenbankausgabe in beliebiger Reihenfolge ausgegeben wird, es sei denn, Sie verwenden die ORDER BY
Klausel. Es ORDER BY
wird jedoch wahrscheinlich keine Ausgabe in einer beschädigten Datenbank erzeugt (da SQLite die gesamte Tabelle lesen muss, bevor eine Ausgabe erzeugt werden kann). Soweit ich weiß, schreibt Firefox immer moz_places
Tabelleneinträge mit fortlaufenden IDs, sodass wir davon ausgehen können, dass alle Ausgaben nach ID geordnet sind.