Saltar al contenido

¿Cómo recuperar una base de datos SQLite3 corrupta?

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 .dumpy 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/

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *