Ich hatte einige Probleme mit meinem RAM (Bluescreen mehrmals, Windows XP) und jetzt sind meine Firefox-Datenbanken beschädigt. Firefox funktioniert, aber meine Geschichte ist vorbei und es ist berichtet mehrere Inkonsistenzen und Fehler bei der Ausführung pragma integrity_check
auf places.sqlite
:
Das Datenbank-Image ist fehlerhaft
Nun die Frage, wie repariere ich SQLite-Datenbanken?
Antworten:
Hinweis
Da Firefox geschlossen sein muss, um diesen Vorgang auszuführen, müssen Sie diese Seite in einem anderen Webbrowser öffnen oder ausdrucken, bevor Sie fortfahren.
Nach stundenlanger Arbeit bei dem Versuch, die Places-Datenbank wiederherzustellen, und dem Lesen des Firefox-Quellcodes, habe ich es geschafft, erfolgreich zu sein. So habe ich es gemacht:
C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles\<code>.default
Ordner.places.sqlite
Datei. Wenn die Datei aufgrund einer Beschädigung ersetzt wurde, verwenden Sie sieplaces.sqlite.corrupt
zur Wiederherstellung. Erstellen Sie eine Sicherungskopie der Datei mit dem Namenplaces.sqlite.bak
oderplaces.sqlite.corrupt.bak
.sqlite3 places.sqlite
odersqlite3 places.sqlite.corrupt
), und geben Sie Folgendes ein:Da die Datenbank beschädigt ist, ist der resultierende Datenbankspeicherauszug nicht vollständig, und nicht alle wiederherstellbaren Daten wurden abgerufen. Um festzustellen, wo der Fehler aufgetreten ist, suchen Sie
ERROR
in einem SQL-Kommentar in der Speicherauszugsdatei nach dem Wort (Großbuchstaben)dump.sql
(dazu habe ich Notepad ++ verwendet), und lesen Sie den SQL-INSERT
Befehl darüber, um die betreffende Tabelle zu bestimmen. In meinem Fall ist der Tisch beschädigtmoz_places
. (Eine Beschreibung der Tabellen in der Places-Datenbank mit einem veralteten 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 nicht für die anderen Tabellen anwendbar. Überspringen Sie daher diese Unterschritte, wenn eine andere Tabelle alsmoz_places
die betroffen ist.)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 nach der öffnenden Klammer in derINSERT
Anweisung. Der Bereich, in dem die Datenbank beschädigt ist, besteht wahrscheinlich aus einem kleinen Zeilenblock in dieser Tabelle. Die Idee dabei 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. Wir tun dies, indem wirSELECT
Anweisungen mit der ID als Bedingung verwenden. Dieser Prozess erfordert einige Versuche und Irrtümer. Wenn zum Beispiel die letzte ID vor dem Fehler 49999 war und der Fehler folgt, beginnt der beschädigte Block mit der ID 50000. Verwenden Sie Anweisungen wie:id >=
und wiederholen Sie den obigenSELECT
Befehl, bis Sie den kleinsten Wert gefunden haben, bei dem SQLite keinen Fehler ausgibt. Dies ist die ID, die sich auf die Zeile bezieht, ab der zusätzliche Daten wiederhergestellt werden können. Angenommen, diese ID ist 50200. Geben Sie Folgendes ein, um diese Daten zu sichern:INSERT
Anweisungen in derdump2.sql
Datei mit beginnenINSERT INTO table VALUES
. Verwenden Sie daher die Funktion zum Suchen und Ersetzen in Ihrem Texteditor, um alle Instanzen dieser Zeichenfolge durch zu ersetzenINSERT INTO moz_places VALUES
.dump2.sql
Datei und fügen Sie ihn in diedump.sql
Datei ein, in der derERROR
Kommentar angezeigt wird.ROLLBACK; -- due to errors
am Ende der Datei durchCOMMIT;
.dump.sql
Datei ein. Ersetzen Sie<version>
den Wert wie folgt durch den korrekten Wert, der für Firefox erforderlich ist, um die Datenbankschemaversion basierend auf der Firefox-Version zu ermitteln (diese finden Sie in der Firefox-Quelldateitoolkit/components/places/Database.cpp
):places.sqlite
und starten Sie die SQLite-Shell, indem Sie eine leereplaces.sqlite
Datenbank erstellensqlite3 places.sqlite
. Geben Sie ein.read dump.sql
, um den SQL-Speicherauszug in die Datenbank zu laden.Weitere relevante Informationen finden Sie auf den folgenden Seiten:
Ein vereinfachtes Verfahren wird in diesem MDN-Artikel beschrieben , ich habe es jedoch nicht getestet. Trotzdem habe ich aktualisierte
PRAGMA
Befehle aus diesem Artikel übernommen.1 SQL garantiert normalerweise nicht, dass die Datenbankausgabe in beliebiger Reihenfolge erfolgt, es sei denn, Sie verwenden die
ORDER BY
Klausel. Es ist jedochORDER BY
wahrscheinlich, dass keine Ausgabe in einer beschädigten Datenbank erstellt wird (da SQLite die gesamte Tabelle lesen muss, bevor eine Ausgabe erstellt werden kann). Nach meinem Kenntnisstand schreibt Firefoxmoz_places
Tabelleneinträge immer mit fortlaufenden IDs, sodass wir davon ausgehen können, dass die gesamte Ausgabe nach ID sortiert ist.quelle
Nun, je nachdem, wie beschädigt es ist, ist eine Reparatur möglicherweise nicht möglich. Ihre beste Wette ist wahrscheinlich, die Datenbank mit auszuwerfen
sqlite
und dann zu sehen, was Sie retten können.Wenn dies fehlschlägt, müssen Sie wahrscheinlich von der Sicherung wiederherstellen.
Verwenden Sie den folgenden Befehl, um eine Datenbank zu sichern und neu zu erstellen
.dump
:quelle
d:\sqlite3.exe d:\idimager.cat.db .dump | d:\sqlite3.exe d:\newdb.cat.db
. Alle Favoriten sind jetzt weg, aber ich baue sie gerade auf, während ich die Seiten besuche. Danke noch einmal!places.sqlite.corrupt
Akte bekommen. Ich habe eine andere Antwort mit einer Lösung gepostet , die für mich funktioniert hat.Wie immer bei einer solchen Reparatur empfehle ich, zuerst mindestens eine Sicherungskopie Ihrer places.sqlite-Datei zu erstellen, die sich in Ihrem Profilverzeichnis befindet. Mit einem Backup können Sie verschiedene Dinge ausprobieren, um solche Probleme zu reparieren, wobei Sie wissen, dass Sie, wenn die versuchte Reparatur die Situation verschlimmert, immer eine weitere Kopie des Backups erstellen können, um es erneut zu versuchen.
Je nachdem, was beschädigt ist und wie stark es beschädigt ist, können möglicherweise die Probleme mit der Erweiterung Places Maintenance behoben werden . Ich habe bei einigen Gelegenheiten eine beschädigte places.sqlite-Datei gefunden. Places Maintenance konnte das Problem jedes Mal beheben, indem verschiedene Überprüfungen / Korrekturen ausgeführt wurden, die im Dialogfeld "Optionen" als Vorgänge bereitgestellt wurden. Die verschiedenen Überprüfungen und / oder Berichte sollten nur wenige Momente bis Minuten dauern.
Wenn dies nicht funktioniert, ist es möglicherweise erforderlich, das Problem auf ähnliche Weise wie oben in DragonLord beschrieben manuell zu beheben.
quelle
Dieser in MDN beschriebene Prozess hat mir geholfen, ein Problem zu beheben, bei dem neue Seiten, die ich besucht habe, nicht im Browserverlauf aufgezeichnet wurden. Ich hatte keine
places.sqlite.corrupt
(oderplaces.sqlite-corrupt
) Datei, aber die Überprüfung der Integrität meinerplaces.sqlite
Datei ergab, dass das Datenbank-Disk-Image ein fehlerhafter Fehler ist.Beenden Sie Firefox und erstellen Sie eine Sicherungskopie Ihres Firefox-Profils, bevor Sie hier fortfahren.
Starten Sie Firefox. Die Geschichte sollte wieder funktionieren.
Ich bin auf einem Mac mit Firefox 60.0.1. Möglicherweise müssen Sie die Befehle für Ihre Plattform anpassen.
quelle