Solución:
ACTUALIZACIÓN: Ahora hay un método automático que está integrado en SQLite: .recover
A veces, la corrupción está solo o principalmente en los índices, en cuyo caso sería posible obtener algunos o la mayoría de los registros al intentar volcar toda la base de datos con .dump
y use esos comandos para crear una nueva base de datos:
$ sqlite3 mydata.db ".dump" | sqlite3 new.db
Sin embargo, esto no siempre es posible.
La forma más fácil y confiable es restaurar el archivo de la base de datos desde la copia de seguridad.
Con Sqlite 3.29.0 un nuevo .recover
El comando se ha introducido en la CLI:
Agregue el comando “.recover” que intenta recuperar la mayor cantidad de contenido posible de un archivo de base de datos corrupto.
sqlite3 broken.db ".recover" | sqlite3 new.db
Tenía un archivo sqlite que estaba dañado y mostraría un síntoma como este.
select count(*) from corruptTable;
return:38000;
Pero cuando intentaba cargar los registros con
select * from corruptTable;
Solo devolvería 7 registros.
Intenté varias cosas, pero estos pasos fueron los más exitosos.
En una Mac, abra la terminal y ejecute estos comandos en su base de datos corrupta. (Estos son comandos sqlite3, por lo que debería poder usar otros editores sqlite3 o comandos similares en otros sistemas).
1 sqlite3 dbWithCorruptTable.sqlite (Obviously replace "dbWithCorruptTable" to your sqlite3 file that has the corrupt table)
2 .mode insert
3 .output dump_all.sql
4 .dump
5 .exit
6 Manually edit the dump_all.sql file in a text editor and remove the transaction statements. Usually there is a "BEGIN TRANSACTION" statement on the 2nd line of the file and a "ROLLBACK" statement on the last line. Remove these and save the file
Estos pasos se tomaron desde este sitio web: http://www.dosomethinghere.com/2013/02/20/fixing-the-sqlite-error-the-database-disk-image-is-malformed/