Error: database disk image is malformed en SQLite

Actualmente uso el gestor de base de datos SQLite para hacer mis proyectos, la verdad que yo creo que es mucho más práctico que otros gestores de base de datos cuando se trata de implatar una base de datos de manera rápida o que no precise de un servidor de base de datos, además es simple, fácil de usar y es software libre!!!. Para los que no conozcan SQLite es un gestor de base de datos que trabaja en el disco duro, no crea un servicio como el caso de MySQL, PostrgreSQL, SQLServer, etc , si no , guarda y accede a la base de datos en el disco duro.

Bueno, la cosa es que, ayer tuve un pequeño problema con mi base de datos de SQLite, cuando hacia un select * from cache me salia el siguiente error:

 Error: database disk image is malformed

Y no me permitía agregar o eliminar registros a esa tabla.

2. Verificar la base de datos

Así que decidí realizar una revisión de la BD primero abrimos la base de datos a través de sqlite:

sqlite3 database.db

Ahora ejecutamos una validación

 pragma integrity_check;

Y pués me terminaba por confirmar que la BD estaba dañada.

3. Solucionar el problema

La solución proveida aquí ha sido desarrollada para linux, en caso de usar windows deberás instalar el cliente SQLite primero o algúna herramienta gráfica que te ayude en el problema.

Después de tanto buscar y hacer pruebas logré arreglar mi base de datos creando un backup:

sqlite3 database.db .dump > database.sql

Y cargandolo en una nueva base de datos:

sqlite3 database_nueva.db < database.sql

Y si eres vago esta la forma rapida:

sqlite3 database.db .dump | sqlite3 database_nueva.db

Espero les sirva este pequeño tip, Saludos :).

Tecnologias: 

Comentarios

pues quería acceder las conversaciones de mi móvil a través de mi ordenador, y buscando en la red me topé que lo podía hacer con el Whatsapp.Xtract, usándolo con el Python. Como verás no sé mucho de informática. Y lo hice y funcionó. Pero lo he intentado otra vez, para listar una conversación con mi antiguo jefe que me interesa y me sale el siguiente error.
error sqlite3. Error while reading chat #66925: database disk image is malformed
Se puede salvar este escollo o es imposible???
Gracias, me sería de gran ayuda

Imagen de Jean Mazuelos
Enviado por Jean Mazuelos el Jue, 05/23/2013 - 19:29

Claro que si se puede recuperar, pero la información dañada no se podrá recuperar.
Primero debes identificar donde está la base de datos de SQLite que usa el whatsapp, finalmente debes hacer es hacer un backup de tu base de datos dañada en sqlite con el siguiente comando:

sqlite3 daniado.db .dump > sql.sql

Deebes cargar el backup que creaste a una nueva base de datos:
sqlite3 nueva.db < sql.sql

Debes reemplazar la base de datos dañada por la nueva generada.

Estos errores en sqlite se deben usualmente a problemas en el disco, o transacciones no finalizadas al hacer uso de la base de datos.

En mi caso puedo leer algunas pocas conversaciones en msgstore.plain.db , eso significa que las que no se pueden leer estan perdidas, o hay alguna manera de recuperarlas? Gracias.

Imagen de Jean Mazuelos
Enviado por Jean Mazuelos el Lun, 03/31/2014 - 20:40

Si haz realizado los pasos mostrados en éste artículo para recuperar la BD Sqlite ya no es posible recuperar más, debido a que sqlite intenta recuperar sólo los sectores que puede leer del archivo y descarta los sectores dónde es ilegible.

Otra opción para intentar recuperar es undark , sería cuestión de que sigas buscando en internet algunas otras opciones.

Finalmente, el problema de database disk image is malformed en SQLite es causado usualmente por fallos de lectura-escritura en el disco duro.

No, no he intentado arreglar la base de datos, esto me sale con el xtract, pero solo veo frases sueltas por todo el archivo....si yo no lo puedo arreglar conoceis alguien que pueda hacerlo? Gracias.

Imagen de Jean Mazuelos
Enviado por Jean Mazuelos el Mié, 04/02/2014 - 22:56

Envíamelo a mi correo de homtail, misterio77777

tengo el mismo error , leo la solucion pero no tengo la menor idea de como hacer eso, como lo identifico la base de datos, como realizo el backuop y donde , en que ventana , si pudieras hacer mas sencilla la informacion te lo agradeceria mucho

Imagen de Jean Mazuelos
Enviado por Jean Mazuelos el Mar, 11/12/2013 - 19:07

Perfecto, déjame ponerte en contexto:
- La solución propuesta en éste apunte es a base de ejecución de comandos bajo GNU/Linux(cualquier distribución.
- Debes tener instalado el ejecutable sqlite desde tu gestor de paquetes
- Abres una consola y escribe los comando propuestos.

En caso de que uses una distribución windows puedes descargar el binario en: http://www.sqlite.org/download.html, el nombre del archivo es sqlite-shell-win32-x86-3080100.zip.
- Descomprimes en tu carpeta system de windows
- Abres un consola (cmd) y ejecutas los comandos propuestos

amigo trate de aser lo que propones pero me sale syntaxis error como podria aser ese que pongo los comandos propuestos y me sale lo mismo.
gracias por tu ayuda

Imagen de Jean Mazuelos
Enviado por Jean Mazuelos el Sáb, 12/07/2013 - 20:22

Cuál es el comando que usas?? y qué mensaje es el que exactamente te sale?