Tuve algunos problemas con mi RAM (pantalla azul varias veces, Windows XP) y ahora están dañadas las bases de datos de Firefox. Firefox está funcionando, pero mi historial se ha ido y está reportando varias inconsistencias y errores al ejecutar pragma integrity_check
en places.sqlite
:
La imagen del disco de la base de datos tiene un formato incorrecto
Ahora la pregunta, ¿cómo puedo reparar bases de datos SQLite?
Respuestas:
Nota
Debido a que Firefox debe estar cerrado para realizar este procedimiento, asegúrese de abrir esta página en otro navegador web o imprimirla antes de continuar.
Después de horas de trabajo intentando recuperar la base de datos de Places, incluso leyendo el código fuente de Firefox, logré hacerlo. Así es como lo hice:
C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles\<code>.default
carpeta.places.sqlite
expediente. Si el archivo fue reemplazado debido a un daño, use laplaces.sqlite.corrupt
archivo para la recuperación. Crear una copia de seguridad del archivo, llamadoplaces.sqlite.bak
oplaces.sqlite.corrupt.bak
.sqlite3 places.sqlite
osqlite3 places.sqlite.corrupt
), luego ingrese:Debido a que la base de datos está dañada, el volcado de la base de datos resultante no está completo y no se han recuperado todos los datos recuperables. Para determinar dónde ocurrió el error, busque la palabra
ERROR
(todo mayúsculas) en un comentario SQL dentro del archivo de volcadodump.sql
(Solía Bloc de notas ++ para hacer esto), y leer el SQLINSERT
Comando arriba para determinar la tabla en cuestión. En mi caso, la mesa dañada esmoz_places
. (Se puede encontrar una descripción de las tablas encontradas en la base de datos de Lugares aquí ; Se puede encontrar un diagrama ER bastante desactualizado aquí . Explicaré cómo recuperar datos adicionales de esta tabla solamente; es probable que el siguiente procedimiento no sea aplicable para las otras tablas, por lo que debe omitir estos pasos secundarios si la tabla no esmoz_places
esta involucrado.)moz_places
La tabla tiene una identificación. Las filas se vuelcan de la tabla siguiendo el orden de este ID. 1 El ID es el primer valor después del paréntesis de apertura en elINSERT
declaración. El área donde la base de datos está dañada probablemente sea un pequeño bloque de filas en esta tabla; La idea aquí es saltarse esta área dañada y recuperar la mayor cantidad de datos posible. El área de inicio de dicho bloque se representa en el volcado como la fila antes de laERROR
aparece el comentario. Usando la ID para esta fila, podemos determinar dónde está dañada la base de datos. Lo hacemos usandoSELECT
declaraciones con el ID como condición; Este proceso requiere un poco de prueba y error. Por ejemplo, si el último ID anterior al error fue 49999, y el error aparece a continuación, el bloque dañado comienza en el ID 50000. Use declaraciones como:id >=
y repite lo anteriorSELECT
hasta que encuentre el valor más pequeño que no haga que SQLite genere un error. Este es el ID que se refiere a la fila a partir de la cual podemos recuperar datos adicionales. Asumamos que esta ID es 50200. Para volcar estos datos, ingrese:INSERT
declaraciones en eldump2.sql
el archivo comienza conINSERT INTO table VALUES
, entonces use la función de buscar y reemplazar en su editor de texto para reemplazar todas las instancias de esta cadena conINSERT INTO moz_places VALUES
.dump2.sql
archívalo y pégalo en eldump.sql
archivo donde elERROR
aparece el comentario.ROLLBACK; -- due to errors
al final del archivo conCOMMIT;
.dump.sql
expediente. Reemplazar<version>
con el valor correcto, que se requiere para que Firefox determine la versión del esquema de la base de datos según la versión de Firefox, como se muestra a continuación (se puede encontrar en el archivo fuente de Firefox)toolkit/components/places/Database.cpp
):places.sqlite
, luego inicie el shell SQLite creando un vacíoplaces.sqlite
base de datos utilizandosqlite3 places.sqlite
. Tipo.read dump.sql
para cargar el volcado de SQL en la base de datos.Más información relevante se puede encontrar en las siguientes páginas:
1 Normalmente, SQL no garantiza que la salida de la base de datos se dará en ningún orden a menos que use el
ORDER BY
cláusula. Sin embargo,ORDER BY
es probable que no produzca ningún resultado en una base de datos dañada (ya que SQLite necesitará leer la tabla completa antes de que pueda generar cualquier resultado) Por lo que yo sé, Firefox siempre escribemoz_places
entradas de tabla con ID secuenciales, por lo que podemos suponer que todas las salidas están ordenadas por ID.fuente
Bueno, dependiendo de lo dañado que esté, la reparación podría no ser posible. Su mejor apuesta es probablemente tratar de volcar el db usando
sqlite
, entonces ve lo que puedes salvar.Si eso falla, probablemente tendrás que restaurar desde la copia de seguridad.
Para volcar y volver a crear una base de datos, use el comando
.dump
:fuente
d:\sqlite3.exe d:\idimager.cat.db .dump | d:\sqlite3.exe d:\newdb.cat.db
. Todos los favicons se han ido, pero se están reconstruyendo a medida que visito los sitios. ¡Gracias de nuevo!places.sqlite.corrupt
expediente. publiqué otra respuesta Con una solución que me funcionó.Como siempre al realizar una reparación como esta, le recomiendo que primero haga al menos una copia de respaldo de su archivo places.sqlite ubicado en su directorio de perfil. Tener una copia de seguridad le permite probar varias cosas diferentes para reparar tales problemas y saber que si la reparación intentada empeora las cosas, siempre puede hacer otra copia de la copia de seguridad en la que vuelva a intentarlo.
Dependiendo de lo que esté dañado y de lo mal que esté, puede ser posible solucionar los problemas con la extensión Mantenimiento de lugares . He terminado con un archivo places.sqlite dañado en algunas ocasiones. Mantenimiento de lugares ha podido solucionar el problema cada vez ejecutando varios de los controles / correcciones que proporciona como operaciones en su diálogo de opciones. Los distintos controles y / o informes diferentes deben tomar solo unos minutos o minutos.
Si esto no funciona, entonces lo que se necesita es seguir la ruta de reparación manual de una manera similar a lo que DragonLord describe anteriormente.
fuente
Esta proceso descrito en MDN me ayudó a resolver un problema donde las nuevas páginas que visité no se registraron en el historial del navegador. No tuve un
places.sqlite.corrupt
(oplaces.sqlite-corrupt
), pero comprobando la integridad de miplaces.sqlite
archivo reveló el La imagen del disco de la base de datos tiene un formato incorrecto error.Salga de Firefox y haga una copia de seguridad de su perfil de Firefox antes de continuar aquí.
Inicia Firefox. La historia debería estar funcionando de nuevo.
Estoy en una Mac con Firefox 60.0.1. Es posible que necesite ajustar los comandos para su plataforma.
fuente