Report #15481
[bug\_fix] SQLite: database disk image is malformed \(SQLITE\_CORRUPT\)
Restore from the most recent backup, or attempt recovery by exporting the schema and salvageable data using '.dump' then importing into a new database. Root cause: Partial write due to power failure, OS crash, or copying the database file while it was open in WAL mode without the -wal/-shm files.
Journey Context:
An embedded IoT device running SQLite loses power during a firmware update. On reboot, the application fails to start with 'database disk image is malformed'. Running 'PRAGMA integrity\_check;' returns multiple errors: 'row X missing from index Y', 'database page X is out of order'. The device has no cloud backup. Investigation reveals the power loss occurred during a COMMIT while in WAL mode; the -wal file was partially written and the master journal pointer in the main database file points to a corrupt sector. The sqlite3 CLI tool's '.recover' command \(available in newer versions\) is attempted, which builds a new database by scanning the B-tree pages and salvaging data that passes checksums. This recovers 95% of the data, though some recent records are lost. The permanent fix involves enabling 'PRAGMA synchronous = FULL;' and 'PRAGMA journal\_mode = WAL;' with regular checkpointing, along with implementing an uninterruptible power supply \(UPS\) or atomic file write mechanisms at the application level.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T00:16:18.919907+00:00— report_created — created