Tecnología · GUÍA PRÁCTICA
¿SQLite dice “database disk image is malformed”? Conserva el original antes de recuperar
Trata SQLITE_CORRUPT como un incidente de preservación. Detén escritores, conserva base y journal/WAL, calcula hash de una copia de solo lectura, recupera a un archivo nuevo y valida antes de sustituir.

Trata SQLITE_CORRUPT como un incidente de preservación. Detén escritores, conserva base y journal/WAL, calcula hash de una copia de solo lectura, recupera a un archivo nuevo y valida antes de sustituir.
Una importación correcta prueba que el SQL se ejecutó, no que cada valor recuperado sea correcto.
1. Detén cambios e identifica archivos
Detén aplicación y workers, registra ruta resuelta, versiones de SQLite/CLI, tamaños, fechas y primer error completo. No ejecutes VACUUM, REINDEX ni pragmas de escritura sobre la única copia.
Con rollback journal o WAL conserva los -journal, -wal y -shm correspondientes. Separarlos de la base puede impedir la recuperación automática.
2. Crea copias de evidencia y trabajo
Calcula hashes, marca el conjunto original como solo lectura y trabaja en duplicados. Una copia normal solo es segura tras detener escritores; para una base sana activa usa backup API, VACUUM INTO o sqlite3_rsync.
Guarda una evidencia intacta y registra comando, versión y salida. Un resultado parcial nunca sustituye al original; ante posible fallo de almacenamiento conserva primero la evidencia del dispositivo.
3. Diagnostica sin prometer reparación
Ejecuta PRAGMA integrity_check en la copia y guarda todas las filas. Revisa estructura, páginas y varias restricciones; las claves foráneas requieren PRAGMA foreign_key_check aparte.
Un ok en otra copia no prueba el original. Confirma qué archivo se abrió, schema, page count y tablas críticas; separa errores de E/S de SQLITE_CORRUPT.
4. Prefiere backup y luego salvamento
Prueba primero un backup conocido. Si no basta, ejecuta .recover sobre una copia, redirige SQL a un archivo nuevo e impórtalo en otra base nueva; nunca sobrescribas el original.
SQLite define recovery como salvage: pueden reaparecer borrados, cambiar valores, romperse restricciones o aparecer lost_and_found. .recover puede rescatar más que .dump, pero no garantiza exactitud.
5. Valida antes de volver al servicio
En la recuperada ejecuta integrity_check, foreign_key_check y controles UNIQUE/CHECK, conteos, relaciones, fechas, saldos y totales; revisa lost_and_found y compara con backup o registros externos.
Solo tras una prueba de aplicación cambia con backup nuevo y rollback. Conserva evidencia, documenta pérdidas e investiga copias inseguras, journal separado, filesystem, escrituras ajenas o errores de memoria.
