テクノロジー · 実用ガイド
SQLite の「database disk image is malformed」は、復旧前に原本を保全する
SQLITE_CORRUPT を preservation incident として扱います。writer を止め、journal/WAL と database を保存し、read-only copy を hash して、新しい file だけへ recover し検証します。

SQLITE_CORRUPT を preservation incident として扱います。writer を止め、journal/WAL と database を保存し、read-only copy を hash して、新しい file だけへ recover し検証します。
import 成功は SQL が実行できた証拠であり、全 recovered value の正しさの証明ではありません。
1. 変更を止め正確な files を特定
application と writers を止め、resolved path、SQLite library/CLI version、size、timestamp、最初の完全な error を記録します。唯一の copy に VACUUM、REINDEX、write pragma を実行しません。
rollback journal/WAL 使用時は matching -journal、-wal、-shm を database と保存します。hot journal/WAL の分離は automatic recovery を妨げます。
2. evidence copy と working copy を作る
original set を hash し read-only にして、recovery は別 working copy で行います。通常 copy は writers 停止後だけ安全で、live healthy DB には backup API、VACUUM INTO、sqlite3_rsync を使います。
untouched evidence を残し、command、tool version、output filename を記録します。partial success で original を置換せず、storage failure 疑いは device evidence を先に保全します。
3. copy を診断し修復を約束しない
working copy に PRAGMA integrity_check を実行し全 rows を保存します。structure、missing/duplicate pages、複数 constraints を調べますが foreign keys は foreign_key_check が必要です。
別 copy の ok は original の正常を証明しません。開いた file、schema、page count、critical table を確認し、I/O error と SQLITE_CORRUPT を分けます。
4. backup restore を優先し salvage
known-good backup を先に検証します。不十分なら working copy に .recover を実行し SQL を新 file に保存して、別の新 database に import します。original は上書きしません。
Recovery は salvage で、deleted rows の復活、value 変更、constraint failure、lost_and_found が起こり得ます。.recover は .dump より回収できても正しさを保証しません。
5. service 復帰前に検証
recovered DB で integrity_check、foreign_key_check、UNIQUE/CHECK、row count、relationships、balances、critical totals、lost_and_found を確認します。
application test 後に新 backup と rollback plan 付きで切り替えます。original evidence を残し、data loss を記録し、unsafe copy、journal separation、filesystem、rogue write を調査します。
