Beschädigte SQLite-Datenbank reparieren — ohne sie hochzuladen

„Database disk image is malformed“ bedeutet fast nie, dass deine Daten weg sind. Es bedeutet, dass eine Seite oder ein Zeiger kaputtging und SQLite die ganze Datei verweigert. Die Wiederherstellung scannt die Seiten und baut aus dem, was überlebt hat, eine saubere Datenbank neu auf.

Deine Datenbank verlässt dein Gerät nie — die Wiederherstellung läuft in deinem Browser. 0 Bytes hochgeladen.

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

Datenbank lässt sich nicht öffnen? Stelle sie jetzt wieder her

  1. Leg die .db- / .sqlite-Datei ab
  2. Die Wiederherstellung läuft lokal
  3. Lade eine frische, öffnungsfähige Datenbank herunter

Um eine malformed SQLite-Datenbank wiederherzustellen, „reparierst“ du nicht die kaputte Datei an Ort und Stelle — du liest alles heraus, was noch dekodierbar ist, und schreibst es in eine brandneue Datenbank, genau so, wie es SQLites eigener Befehl .recover macht. Das läuft direkt hier in deinem Browser: Leg die Datei oben ab, die Diagnose zeigt, was beschädigt ist, und die Wiederherstellungs-Engine baut das Schema neu auf und fügt jede Zeile wieder ein, die sie lesen kann. Es wird nichts installiert, und die Datenbank wird nie hochgeladen.

Die Fehler, die das abdeckt

Error: database disk image is malformed (11)

Der klassische SQLITE_CORRUPT. Etwas in der Seitenstruktur der Datei ist inkonsistent — eine beschädigte B-Tree-Seite, ein falscher Cell-Pointer, ein Page-Count, der mit der Dateigröße nicht übereinstimmt. Die Engine stoppt beim ersten Problem, auf das sie trifft, aber die Seiten, die sie nie erreicht hat, sind meist in Ordnung, und ein Raw-Scan kann die Zeilen direkt aus ihnen herausziehen.

file is not a database

Das sagt SQLite, wenn die 16-Byte-Header-Magic („SQLite format 3\0“) falsch ist. Zwei sehr verschiedene Ursachen: Die Header-Bytes wurden beschädigt (die Seiten dahinter sind oft intakt und wiederherstellbar), oder die Datei ist tatsächlich etwas anderes — oder eine verschlüsselte (SQLCipher/SEE) Datenbank, die als hochentropisches Rauschen gelesen wird und sich ohne den Schlüssel nicht wiederherstellen lässt. Die Diagnose unterscheidet die beiden.

database or disk is full / malformed database schema

Nachgelagerte Symptome desselben zugrunde liegenden Seitenschadens. Wenn das erneute Öffnen der Datei denselben Fehler erzeugt, sind In-Place-Fixes am Ende, und ein Neuaufbau aus den überlebenden Seiten ist der nächste Schritt.

Wie eine SQLite-Datei kaputtgeht: Seiten und Zeiger

Eine SQLite-Datenbank ist ein flaches Array aus Seitenfester Größe (meist je 4 KB). Seite 1 enthält den Header und das Schema; jede Tabelle und jeder Index ist ein B-Tree, dessen innere Seiten hinunter auf Leaf-Seiten zeigen, die deine eigentlichen Zeilen enthalten. Software liest den Header, findet das Schema und folgt dann diesen Zeigern zu den Daten.

Die Zeiger sind die Schwachstelle. Ein einziger unterbrochener Schreibvorgang, ein defekter Sektor, ein auf halbem Weg gestoppter Sync oder ein Byte-Flip in einer inneren Seite, und die Zeigerkette bricht — SQLite trifft auf eine Inkonsistenz und erklärt das ganze Image für malformed, obwohl deine Zeilen unberührt in ihren Leaf-Seiten liegen. Es ist dieselbe Geschichte wie beim fehlenden Index eines Videos oder dem kaputten Central Directory eines ZIP: Die Karte ist kaputt, nicht die Daten.

Deshalb funktioniert die Wiederherstellung: Leaf-Seiten tragen selbstbeschreibende Records, sodass die Engine die Datei Seite für Seite ablaufen, die gefundenen Zeilen dekodieren und die B-Trees von Grund auf um sie herum neu aufbauen kann. Zeilen, die die Zeiger nicht erreichen können, werden durch einen Raw-Sweep gefunden; Zeilen, die zu keiner bekannten Tabelle passen, gehen in einelost_and_found-Tabelle, statt weggeworfen zu werden.

Wenn du eine -wal-Datei hast, bring sie mit

Datenbanken im WAL-Modus stellen jüngste Änderungen in einer Geschwisterdatei <name>-wal bereit, bis per Checkpoint in die Hauptdatenbank geschrieben wird. Nach einem Absturz können deine neuesten committeten Daten nur dort leben. Leg zuerst die Haupt-.db ab, füge dann die -wal-Datei im optionalen Sidecar-Slot hinzu: Ihre committeten Frames werden vor dem Scan überlagert, sodass die wiederhergestellte Datenbank die letzte committete Transaktion widerspiegelt und nicht den letzten Checkpoint. Es ist optional — die Wiederherstellung läuft auch mit der Hauptdatei allein einwandfrei —, aber wenn du das Sidecar hast, liegen dort oft die frischesten Zeilen.

Warum „kein Upload“ bei Datenbanken zählt

Denk daran, was eine Datenbank tatsächlich enthält: Nutzerkonten, Nachrichten, Standortverlauf, den gesamten Zustand einer App. Es ist genau die eine Datei, die du am wenigsten „nur zum Reparieren“ auf dem Server eines anderen liegen haben willst. Upload-basierte Wiederherstellungstools kopieren sie von deinem Rechner und verarbeiten sie auf einer Infrastruktur, die du nicht einsehen kannst. Die Wiederherstellung im Browser entfernt diesen Schritt vollständig — die Datei wird von deiner Festplatte gelesen, in deinem Tab neu aufgebaut, und es existiert nirgendwo sonst eine Kopie. Für DFIR-Arbeit an Beweismitteln bleibt so auch die Chain of Custody intakt: Das Artefakt verlässt die Workstation nie. Du kannst esim Netzwerk-Tab überprüfen, während die Wiederherstellung läuft.

Was das wiederherstellen kann und was nicht

Kann wiederhergestellt werden

  • „Database disk image is malformed“ durch eine beschädigte Seite oder einen B-Tree-Zeiger
  • Beschädigte Header-Felder (falsche Page Size oder Page Count) mit intakten Seiten dahinter
  • Abgeschnittene Dateien: Jede Zeile auf einer überlebenden Seite wird herausgezogen
  • Zeilen auf Seiten, die die Zeigerkette nicht mehr erreichen kann, per Raw-Page-Scan
  • Nicht per Checkpoint übernommene Änderungen aus einem bereitgestellten -wal-Sidecar

Kann nicht wiederhergestellt werden

  • Zeilen, die physisch überschrieben oder am Ende abgeschnitten wurden — diese Daten existieren nicht mehr
  • Verschlüsselte Datenbanken (SQLCipher/SEE) ohne den Schlüssel — die Seiten sind Ciphertext
  • Exakte Column Affinities: Werte kommen als ihre On-Disk-Storage-Class zurück
  • Eine Garantie auf Korrektheit — wiederhergestellte Daten sind immer mit Vorsicht zu genießen; prüfe sie
  • 0-Byte-Dateien: Das ist zuerst ein Datenrettungsproblem für das Speichergerät

Der Wiederherstellungsbericht listet auf, was aus jeder Tabelle herauskam, kennzeichnet Zeilen, die per Raw-Scan gezogen oder als nicht dekodierbar verworfen wurden, und eine fehlgeschlagene Wiederherstellung wird nie berechnet.

FAQ

Was bedeutet „database disk image is malformed“?

Das ist SQLites SQLITE_CORRUPT-Fehler (Result Code 11): Die Engine ist einem Zeiger innerhalb der Datei gefolgt und hat etwas gefunden, das keine gültige B-Tree-Seite ist — eine genullte Seite, einen falschen Cell-Offset, eine Seite, die über das Dateiende hinaus zeigt. Es bedeutet nicht, dass jede Zeile verloren ist. In der Praxis reißt eine einzige beschädigte Seite oder ein falsches Header-Feld die ganze Datei mit, während der Rest deiner Tabellen intakt daliegt. Die Wiederherstellung läuft die Seiten direkt ab, baut das Schema neu auf und fügt jede Zeile, die sie noch dekodieren kann, in eine brandneue Datenbank ein — dieselbe Strategie wie SQLites eigener Befehl .recover.

Kann man eine beschädigte SQLite-Datenbank wirklich im Browser wiederherstellen?

Ja. Leg die .db- (oder .sqlite-/.sqlite3-) Datei oben ab. Der Seiten-Scanner ist reines TypeScript und läuft vollständig in deinem Tab: Er liest jede Seite lokal, rekonstruiert das Schema, läuft den B-Tree jeder Tabelle ab und fällt für alles, was der B-Tree nicht erreichen kann, auf einen zeigerfreien Raw-Page-Scan zurück. Zeilen, die keiner bekannten Tabelle zugeordnet werden können, landen in einer lost_and_found-Tabelle, statt verworfen zu werden. Das Ergebnis ist eine frische, öffnungsfähige Datenbankdatei zum Herunterladen. Kein Wettbewerber bietet SQLite-Wiederherstellung auf Browser-Seite — die meisten zwingen dich, die Datei auf einen Server hochzuladen.

Was ist die -wal-Datei, und brauche ich sie?

SQLite im WAL-Modus (Write-Ahead Logging) hält jüngste Änderungen in einer Geschwisterdatei namens -wal, bis sie per Checkpoint zurück in die Haupt-.db geschrieben werden. Wenn deine App abgestürzt ist, leben die neuesten Daten womöglich nur in dieser -wal-Datei. Falls du sie hast, füge sie im optionalen Sidecar-Slot hinzu, nachdem du die Datenbank abgelegt hast: Ihre committeten Frames werden vor dem Scan überlagert, sodass die Wiederherstellung die letzte committete Transaktion widerspiegelt. Keine -wal? Die Wiederherstellung läuft trotzdem auf der Hauptdatei — du siehst nur keine Änderungen, für die nie ein Checkpoint erfolgt ist.

Ist es sicher, meine Datenbank durch ein Online-Reparaturtool laufen zu lassen?

Eine Datenbank ist oft das Schlimmste, was man einem Server übergeben kann, den man nicht kontrolliert: Sie kann jeden Nutzerdatensatz, jede Nachricht und jedes Credential enthalten, das deine App je gespeichert hat. Upload-basierte Tools kopieren diese Datei auf ihre Infrastruktur, unter Aufbewahrungsbedingungen, die du nicht geschrieben hast. Hier wird nichts hochgeladen — die Datei wird von deiner Festplatte gelesen und in deinem Browser neu aufgebaut, und du kannst im Netzwerk-Tab bestätigen, dass 0 Bytes übertragen werden.

Welche Apps speichern Daten in SQLite, damit ich weiß, ob das zutrifft?

Fast alles. iOS- und Android-Apps, Browser (Verlauf, Cookies, Erweiterungs-Speicher), Signal und andere Messenger, Notiz-Apps, Mail-Clients, Lightroom-Kataloge und unzählige Desktop-Tools halten ihre Daten in SQLite-Datenbanken — oft mit einer .db-, .sqlite-, .sqlite3- oder app-spezifischen Endung. Wenn ein Tool meldet, seine Datenbank sei corrupt, malformed oder „not a database“, ist diese Seite dafür da. DFIR-Analysten stoßen auf dieselben Dateien, wenn sie Artefakte von einem Disk-Image ziehen.

Warum kann nicht jede Zeile zurückkommen?

Ehrlichkeit zuerst: Aus einer beschädigten Datenbank wiederhergestellte Daten sind immer mit Vorsicht zu genießen — SQLites eigene Doku sagt das, und du solltest sie gegen eine bekannt-gute Quelle prüfen, bevor du dich darauf verlässt. Alles, was physisch überschrieben oder am Dateiende abgeschnitten wurde, ist weg; kein Tool kann es erfinden. Werte kommen als ihre On-Disk-Storage-Class zurück, daher kann sich der Typ einer Spalte verschieben. Und weil der Scan Freelist- und nicht vakuumierte Seiten liest, können zuvor gelöschte Zeilen wieder auftauchen. Der Wiederherstellungsbericht sagt dir genau, was passiert ist — Tabelle für Tabelle.

Verwandt: Tabelle lässt sich nicht öffnen — Excel-Dateien reparieren · Dokument lässt sich nicht öffnen — PDF-Dateien reparieren · Archiv lässt sich nicht entpacken — ZIP-Dateien reparieren ·die Zero-Upload-Behauptung überprüfen