Repara una base de datos SQLite dañada — sin subirla

«Database disk image is malformed» casi nunca significa que tus datos se hayan perdido. Significa que una página o un puntero se rompió y SQLite rechaza el archivo entero. La recuperación escanea las páginas y reconstruye una base de datos limpia a partir de lo que sobrevivió.

Tu base de datos nunca sale de tu dispositivo — la recuperación ocurre en tu navegador. 0 bytes subidos.

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Suelta un archivo aquí o exploraToca para elegir un archivo

ZIP · Office · PDF · vídeo · JPG · PNG · RAR/7z · SQLite — reparados aquí mismo, en tu navegador. No se sube nada

0 bytes subidosGratis: 3 reparaciones/día — hasta 500 MB de vídeo, 100 MB de documentos y archivos, 50 MB de fotos. Descarga gratuita. Una reparación 5,90 €. Sin cuenta.

¿La base de datos no abre? Recupérala ahora

  1. Suelta el archivo .db / .sqlite
  2. La recuperación ocurre en local
  3. Descarga una base de datos nueva y abrible

Para recuperar una base de datos SQLite dañada no «arreglas» el archivo roto en su sitio — lees todo lo que todavía es decodificable y lo escribes en una base de datos totalmente nueva, exactamente como funciona el propio comando .recover de SQLite. Eso se ejecuta aquí mismo, en tu navegador: suelta el archivo arriba, el diagnóstico muestra qué está dañado y el motor de recuperación reconstruye el esquema y vuelve a insertar cada fila que puede leer. No se instala nada y la base de datos nunca se sube.

Los errores que esto cubre

Error: database disk image is malformed (11)

El clásico SQLITE_CORRUPT. Algo en la estructura de páginas del archivo es incoherente — una página de árbol B dañada, un puntero de celda incorrecto, un recuento de páginas que no concuerda con el tamaño del archivo. El motor se detiene en el primer problema que encuentra, pero las páginas que nunca alcanzó suelen estar bien, y un escaneo en bruto puede extraer las filas directamente de ellas.

file is not a database

SQLite dice esto cuando el número mágico de 16 bytes de la cabecera («SQLite format 3\0») es incorrecto. Dos causas muy distintas: los bytes de la cabecera se dañaron (las páginas que hay detrás suelen estar intactas y son recuperables), o el archivo es realmente otra cosa — o una base de datos cifrada (SQLCipher/SEE), que se lee como ruido de alta entropía y no se puede recuperar sin la clave. El diagnóstico distingue entre las dos.

database or disk is full / malformed database schema

Síntomas derivados del mismo daño de páginas subyacente. Si volver a abrir el archivo produce el mismo fallo, las soluciones in situ se han agotado y una reconstrucción a partir de las páginas supervivientes es el siguiente paso.

Cómo se rompe un archivo SQLite: páginas y punteros

Una base de datos SQLite es un array plano de páginas de tamaño fijo (normalmente 4 KB cada una). La página 1 contiene la cabecera y el esquema; cada tabla e índice es un árbol B cuyas páginas interiores apuntan hacia abajo a las páginas hoja que contienen tus filas reales. El software lee la cabecera, encuentra el esquema y luego sigue esos punteros hasta los datos.

Los punteros son el punto débil. Una sola escritura interrumpida, un sector defectuoso, una sincronización que se detuvo a medias o un bit invertido en una página interior y la cadena de punteros se rompe — SQLite se topa con una incoherencia y declara toda la imagen malformada, aunque tus filas sigan intactas en sus páginas hoja. Es la misma historia que el índice ausente de un vídeo o el directorio central roto de un ZIP: se rompió el mapa, no los datos.

Por eso funciona la recuperación: las páginas hoja llevan registros autodescriptivos, así que el motor puede recorrer el archivo página por página, decodificar las filas que encuentra y reconstruir los árboles B desde cero a su alrededor. Las filas que los punteros no pueden alcanzar se localizan con un barrido en bruto; las filas que no coinciden con ninguna tabla conocida van a una tabla lost_and_found en lugar de tirarse.

Si tienes un archivo -wal, tráelo

Las bases de datos en modo WAL preparan los cambios recientes en un archivo hermano <nombre>-wal hasta que se consolidan en la base de datos principal. Tras un bloqueo, tus datos confirmados más recientes pueden vivir solo ahí. Suelta primero el .db principal y luego añade el archivo -wal en la ranura opcional para archivos auxiliares: sus marcos confirmados se superponen antes del escaneo, de modo que la base de datos recuperada refleja la última transacción confirmada en lugar del último checkpoint. Es opcional — la recuperación funciona bien solo con el archivo principal — pero si tienes el archivo auxiliar, a menudo es donde están las filas más recientes.

Por qué el «sin subida» importa en las bases de datos

Piensa en lo que contiene de verdad una base de datos: cuentas de usuario, mensajes, historial de ubicaciones, el estado entero de una aplicación. Es el único archivo que menos querrías ver en el servidor de otra persona «solo para repararlo». Las herramientas de recuperación basadas en subida lo copian de tu equipo y lo procesan en una infraestructura que no puedes inspeccionar. La recuperación en el navegador elimina ese paso por completo — el archivo se lee desde tu disco, se reconstruye en tu pestaña y no existe ninguna copia en ningún otro sitio. Para el trabajo forense (DFIR) sobre pruebas, eso además mantiene intacta la cadena de custodia: el artefacto nunca sale de la estación de trabajo. Puedes verificarlo en la pestaña Red mientras se ejecuta la recuperación.

Qué puede y qué no puede recuperar

Puede recuperar

  • «Database disk image is malformed» por una página dañada o un puntero de árbol B
  • Campos de cabecera dañados (tamaño o recuento de páginas incorrecto) con páginas intactas detrás
  • Archivos truncados: se extrae cada fila de una página superviviente
  • Filas en páginas que la cadena de punteros ya no puede alcanzar, mediante un escaneo de páginas en bruto
  • Cambios sin consolidar de un archivo auxiliar -wal aportado

No puede recuperar

  • Filas sobrescritas físicamente o cortadas del final — esos datos ya no existen
  • Bases de datos cifradas (SQLCipher/SEE) sin la clave — las páginas son texto cifrado
  • Las afinidades exactas de las columnas: los valores vuelven según su clase de almacenamiento en disco
  • Una garantía de corrección — los datos recuperados son siempre sospechosos; verifícalos
  • Archivos de 0 bytes: eso es primero un problema de recuperación de datos del dispositivo de almacenamiento

El informe de recuperación enumera lo que salió de cada tabla, señala las filas extraídas por el escaneo en bruto o descartadas por indescifrables, y una recuperación fallida nunca se cobra.

Preguntas frecuentes

¿Qué significa «database disk image is malformed»?

Es el error SQLITE_CORRUPT de SQLite (código de resultado 11): el motor siguió un puntero dentro del archivo y encontró algo que no es una página de árbol B válida — una página a cero, un desplazamiento de celda incorrecto, una página que apunta más allá del final del archivo. No significa que todas las filas se hayan perdido. En la práctica, una sola página dañada o un campo de cabecera erróneo tumba el archivo entero, mientras el resto de tus tablas siguen ahí intactas. La recuperación recorre las páginas directamente, reconstruye el esquema y vuelve a insertar cada fila que aún puede decodificar en una base de datos totalmente nueva — la misma estrategia que el propio comando .recover de SQLite.

¿De verdad se puede recuperar una base de datos SQLite dañada en el navegador?

Sí. Suelta el archivo .db (o .sqlite/.sqlite3) arriba. El escáner de páginas es TypeScript puro y se ejecuta por completo en tu pestaña: lee cada página en local, reconstruye el esquema, recorre el árbol B de cada tabla y recurre a un escaneo de páginas en bruto, sin punteros, para todo lo que el árbol B no alcanza. Las filas que no se pueden atribuir a una tabla conocida se colocan en una tabla lost_and_found en lugar de descartarlas. El resultado es un archivo de base de datos nuevo y abrible que descargas. Ningún competidor ofrece recuperación de SQLite en el navegador — la mayoría te obliga a subir el archivo a un servidor.

¿Qué es el archivo -wal y lo necesito?

SQLite en modo WAL (registro de escritura anticipada) mantiene los cambios recientes en un archivo hermano llamado -wal hasta que se consolidan (checkpoint) de vuelta en el .db principal. Si tu aplicación se bloqueó, los datos más recientes pueden vivir solo en ese archivo -wal. Si lo tienes, añádelo en la ranura opcional para archivos auxiliares después de soltar la base de datos: sus marcos confirmados se superponen antes del escaneo, de modo que la recuperación refleja la última transacción confirmada. ¿No tienes -wal? La recuperación se ejecuta igualmente sobre el archivo principal — simplemente no verás los cambios que nunca se consolidaron.

¿Es seguro pasar mi base de datos por una herramienta de reparación online?

Una base de datos es a menudo lo peor que puedes entregar a un servidor que no controlas: puede contener todos los registros de usuario, mensajes o credenciales que tu aplicación haya almacenado. Las herramientas basadas en subida copian ese archivo en su infraestructura, bajo unos términos de retención que tú no escribiste. Aquí no se sube nada — el archivo se lee desde tu disco y se reconstruye en tu navegador, y puedes vigilar la pestaña Red para confirmar que se transmiten 0 bytes.

¿Qué aplicaciones guardan datos en SQLite, para saber si esto me sirve?

Casi todo. Las apps de iOS y Android, los navegadores (historial, cookies, almacenamiento de extensiones), Signal y otros mensajeros, las apps de notas, los clientes de correo, los catálogos de Lightroom e innumerables herramientas de escritorio guardan sus datos en bases de datos SQLite — a menudo con una extensión .db, .sqlite, .sqlite3 o propia de la aplicación. Si una herramienta dice que su base de datos está dañada, «malformed» o «not a database», esta página es para ti. Los analistas de DFIR se topan con los mismos archivos al extraer artefactos de una imagen de disco.

¿Por qué no pueden volver todas las filas?

Honestidad ante todo: los datos recuperados de una base de datos dañada son siempre sospechosos — la propia documentación de SQLite lo dice, y deberías contrastarlos con una fuente fiable antes de fiarte de ellos. Cualquier cosa que se sobrescribiera físicamente o se cortara del final del archivo se ha perdido; ninguna herramienta puede inventarla. Los valores vuelven según su clase de almacenamiento en disco, así que el tipo de una columna puede cambiar. Y como el escaneo lee las páginas de la lista libre y las no compactadas, pueden reaparecer filas que se habían borrado antes. El informe de recuperación te dice exactamente qué pasó, tabla por tabla.

Relacionado: la hoja de cálculo no abre — reparar archivos de Excel · el documento no abre — reparar archivos PDF · el archivo comprimido no se extrae — reparar archivos ZIP ·verifica la promesa de cero subidas