J'ai eu quelques problèmes avec ma RAM (écran bleu plusieurs fois, Windows XP) et maintenant mes bases de données Firefox sont endommagées. Firefox fonctionne, mais mon historique a disparu et il signale plusieurs incohérences et erreurs lors de l'exécution pragma integrity_check
sur places.sqlite
:
l'image du disque de la base de données est mal formée
Maintenant, la question, comment réparer les bases de données SQLite?
firefox
data-recovery
database
sqlite
places.sqlite
Policier
la source
la source
Réponses:
Remarque
Étant donné que Firefox doit être fermé pour effectuer cette procédure, assurez-vous d'ouvrir cette page dans un autre navigateur Web ou de l'imprimer avant de continuer.
Après des heures de travail à essayer de récupérer la base de données Places, même en lisant le code source de Firefox, j'ai réussi à réussir. Voici comment je l'ai fait:
C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles\<code>.default
dossier.places.sqlite
fichier. Si le fichier a été remplacé en raison d'une corruption, utilisez leplaces.sqlite.corrupt
fichier pour la récupération. Créez une copie de sauvegarde du fichier, nomméeplaces.sqlite.bak
ouplaces.sqlite.corrupt.bak
.sqlite3 places.sqlite
ousqlite3 places.sqlite.corrupt
), puis entrez:Étant donné que la base de données est corrompue, le vidage de base de données résultant n'est pas terminé et toutes les données récupérables n'ont pas été récupérées. Pour déterminer où l'erreur s'est produite, recherchez le mot
ERROR
(toutes majuscules) dans un commentaire SQL à l'intérieur du fichier de vidagedump.sql
(j'ai utilisé Notepad ++ pour ce faire) et lisez laINSERT
commande SQL au-dessus pour déterminer la table en question. Dans mon cas, la table endommagée estmoz_places
. (Une description des tables trouvées dans la base de données Places peut être trouvée ici , qui inclut un diagramme ER obsolète.) Je vais expliquer comment récupérer des données supplémentaires à partir de cette table uniquement; la procédure suivante n'est probablement pas applicable pour les autres tables, donc ignorez ces sous-étapes si une table autre que celle-cimoz_places
est impliquée.)moz_places
tableau a un ID. Les lignes sont vidées du tableau suivant l'ordre de cet ID. 1 L'ID est la première valeur suivant la parenthèse ouvrante dans l'INSERT
instruction. La zone où la base de données est endommagée est susceptible d'être un petit bloc de lignes dans ce tableau; l'idée ici est de sauter cette zone endommagée et de récupérer autant de données que possible. La zone de début d'un tel bloc est représentée dans le vidage comme la ligne avant que leERROR
commentaire n'apparaisse. En utilisant l'ID de cette ligne, nous pouvons déterminer où la base de données est endommagée. Nous le faisons en utilisant desSELECT
instructions avec l'ID comme condition; ce processus prend quelques essais et erreurs. Par exemple, si le dernier ID avant l'erreur était 49999 et que l'erreur suit, le bloc endommagé commence à l'ID 50000. Utilisez des instructions telles que:id >=
et répétez laSELECT
commande ci-dessus jusqu'à ce que vous trouviez la plus petite valeur qui ne provoque pas la sortie d'une erreur par SQLite. Il s'agit de l'ID qui fait référence à la ligne à partir de laquelle nous pouvons récupérer des données supplémentaires. Supposons que cet ID soit 50200. Pour vider ces données, entrez:INSERT
instructions dudump2.sql
fichier commencent parINSERT INTO table VALUES
, utilisez donc la fonction Rechercher et remplacer dans votre éditeur de texte pour remplacer toutes les instances de cette chaîne parINSERT INTO moz_places VALUES
.dump2.sql
fichier et collez-le dans ledump.sql
fichier où leERROR
commentaire apparaît.ROLLBACK; -- due to errors
à la fin du fichier parCOMMIT;
.dump.sql
fichier. Remplacez<version>
par la valeur correcte, qui est requise pour que Firefox détermine la version du schéma de base de données en fonction de la version de Firefox, comme suit (cela peut être trouvé dans le fichier source de Firefoxtoolkit/components/places/Database.cpp
):places.sqlite
, puis démarrez le shell SQLite en créant uneplaces.sqlite
base de données vide à l' aide desqlite3 places.sqlite
. Tapez.read dump.sql
pour charger le vidage SQL dans la base de données.Des informations plus pertinentes sont disponibles sur les pages suivantes:
Une procédure simplifiée est décrite dans cet article MDN mais je ne l'ai pas testée. Néanmoins, j'ai incorporé des
PRAGMA
commandes mises à jour de cet article.1 SQL ne garantit normalement pas que la sortie de la base de données sera donnée dans n'importe quel ordre, sauf si vous utilisez la
ORDER BY
clause. Cependant,ORDER BY
ne produira probablement aucune sortie sur une base de données corrompue (car SQLite devra lire la table entière avant de pouvoir produire une sortie). Pour autant que je sache, Firefox écrit toujoursmoz_places
les entrées de table avec des ID séquentiels, nous pouvons donc supposer que toutes les sorties sont ordonnées par ID.la source
Eh bien, en fonction de son endommagement, la réparation peut ne pas être possible. Votre meilleur pari est probablement d'essayer de vider la base de données en utilisant
sqlite
, puis de voir ce que vous pouvez récupérer.Si cela échoue, vous devrez probablement restaurer à partir de la sauvegarde.
Pour vider et recréer une base de données, utilisez la commande
.dump
:la source
d:\sqlite3.exe d:\idimager.cat.db .dump | d:\sqlite3.exe d:\newdb.cat.db
. Tous les favicons ont maintenant disparu, mais moi ils se reconstruisent en visitant les sites. Merci encore!places.sqlite.corrupt
fichier. J'ai posté une autre réponse avec une solution qui a fonctionné pour moi.Comme toujours pour effectuer une réparation comme celle-ci, je vous recommande de faire au moins une copie de sauvegarde de votre fichier places.sqlite situé dans votre répertoire de profil. Avoir une sauvegarde vous permet d'essayer différentes choses pour réparer de tels problèmes tout en sachant que si la réparation tentée aggrave les choses, vous pouvez toujours faire une autre copie de la sauvegarde sur laquelle réessayer.
Selon ce qui est corrompu et à quel point il est corrompu, il peut être possible de résoudre les problèmes avec l'extension Places Maintenance . J'ai fini avec un fichier places.sqlite corrompu à quelques reprises. Places Maintenance a pu résoudre le problème à chaque fois en exécutant divers des contrôles / correctifs qu'il fournit en tant qu'opérations dans sa boîte de dialogue d'options. Les différents contrôles et / ou rapports ne devraient prendre que quelques instants à quelques minutes.
Si cela ne fonctionne pas, il peut être nécessaire de suivre la voie de la correction manuelle d'une manière similaire à ce que DragonLord décrit ci-dessus.
la source
Ce processus décrit sur MDN m'a aidé à résoudre un problème où les nouvelles pages que j'ai visitées n'étaient pas enregistrées dans l'historique du navigateur. Je n'avais pas de fichier
places.sqlite.corrupt
(ouplaces.sqlite-corrupt
), mais la vérification de l'intégrité de monplaces.sqlite
fichier a révélé que l' image disque de la base de données était une erreur de forme.Quittez Firefox et sauvegardez votre profil Firefox avant d'aller plus loin ici.
Démarrez Firefox. L'histoire devrait fonctionner à nouveau.
Je suis sur un Mac avec Firefox 60.0.1. Vous devrez peut-être ajuster les commandes de votre plate-forme.
la source