Watch at EaseHistorias. Respuestas. Perspectiva.

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.

¿SQLite dice “database disk image is malformed”? Conserva el original antes de recuperar
Ilustración técnica original: evidence and working-copy boundary. Watch at Ease

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.

¿SQLite dice “database disk image is malformed”? Conserva el original antes de recuperar
Ilustración técnica original: recovered-file validation and return-to-service boundary. Watch at Ease