Aktuellen Verlauf aus SQLite-WAL-Dateien wiederherstellen
2026-05-19 · 2 min
Chrome und Firefox öffnen ihre Hauptdatenbanken beide im WAL-Modus
(PRAGMA journal_mode=WAL). Transaktionen werden zunächst an <db>-wal
angehängt; SQLite überträgt sie später per Checkpoint in die Haupt-.db-
oder .sqlite-Datei. Kopieren Sie nur die Hauptdatei, können Sie unbemerkt
die jüngsten Besuche, Downloads und Cookies verlieren - häufig genau die
Aktivität, um die es in einer Untersuchung geht.
Warum dies die wertvollste Begleitdatei ist
Das WAL enthält bestätigte Transaktionen. Sie sind nicht partiell, nicht
vorläufig, sondern lediglich noch nicht zusammengeführt. Browser
checkpointen bei Größenschwellen (Standard 1 MB), bei sauberem Herunterfahren
und bei explizitem PRAGMA wal_checkpoint. Eine laufende Chrome-Sitzung
kann stundenlange Besuche im WAL halten.
Ein sauberes Herunterfahren leert das WAL in die Hauptdatei. Ein Absturz, eine Erfassung während der Nutzung oder ein Stromausfall lassen das WAL gefüllt zurück.
Was Sie bei der Erfassung tun sollten
- Erfassen Sie immer die
-wal- und-shm-Begleitdateien zusammen mit der Haupt-DB. - Halten Sie sie zusammen und mit passenden Basisnamen. SQLite hängt nur das WAL an, dessen Name mit der Datenbank übereinstimmt.
- Lassen Sie kein Werkzeug die Datenbank vor dem Kopieren im
Read-Write-Modus öffnen. Ein versehentliches
sqlite3 historyim Read-Write-Modus löst einen Checkpoint aus und mischt das WAL neu.
Scheinbar nicht bestätigte Daten lesen
Ein WAL-Frame-Stream ist eine Folge aus 24-Byte-Frame-Headern und vollständigen Seiten. Jeder Frame benennt die Seitennummer, die er überschreibt, und das Salt seines Commits. Öffnen Sie die zusammengehörige DB plus WAL mit einer aktuellen SQLite-Bibliothek und der Merge erfolgt automatisch. Wenn Sie gelöschte Zeilen wiederherstellen müssen (Zeilen, die in älteren WAL-Frames existierten, später aber überschrieben wurden), haben Sie zwei Optionen:
- WAL-Frame-Carving. Gehen Sie das WAL außerhalb von SQLite durch,
dumpen Sie jeden Frame jeder Seite und rekonstruieren Sie die
Seitenhistorie. Werkzeuge wie Sandersons
waliteanund die SQLite-Plugins des Sleuth Kit tun dies. - Wiederherstellung auf Seitenebene aus der Freelist. Selbst bereits gecheckpointete WAL-Frames können gelöschte Zeilendaten in nicht allozierten Zellen hinterlassen. Ein Raw-Page-Walker über die gemergte DB stellt die Freelist-Inhalte wieder her, die häufig die gelöschten Verlaufszeilen wortgetreu enthalten.
Praktische Fallstricke
- Firefox'
places.sqlite-walund ChromesHistory-walfolgen denselben Regeln. Derselbe Fehler wiederholt sich bei beiden. - Wenn der Benutzer kürzlich „Verlauf löschen" ausgeführt hat, sind die Zeilen gelöscht, doch die zugrunde liegenden Seiten können sie weiterhin enthalten, bis SQLite die Zellen wiederverwendet. Die WAL-Frame-Analyse rettet manchmal, was endgültig verloren schien.
- Gemountete forensische Images bewahren die Begleitdateien. Live-Triage- Skripte tun das oft nicht.