La base de données "History" de Chrome est corrompue

Chrome conserve votre historique de navigation dans une simple base de données SQLite — un fichier littéralement nommé History, sans extension, dans le dossier de votre profil. Quand une seule page à l'intérieur se casse, SQLite rejette le fichier entier et Chrome en démarre discrètement un nouveau, vide. Les lignes sont presque toujours encore sur le disque ; la récupération les relit et reconstruit une base de données propre.

Votre fichier ne quitte jamais votre appareil — la réparation s'exécute dans votre navigateur. 0 octet téléversé.

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

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

Réparer maintenant

  1. Déposez le fichier
  2. La réparation s'exécute en local
  3. Téléchargez le résultat

Le fichier History est une base de données SQLite standard (magic de 16 octets SQLite format 3\0), donc lorsqu'un outil signale database disk image is malformed à son sujet, ou que Chrome perd votre historique après un plantage, il s'agit de la même catégorie de panne que peut subir n'importe quel fichier SQLite : une page ou un pointeur endommagé, pas une perte massive de données. Déposez le fichier History ci-dessus et le scanner l'ouvre dans votre navigateur, parcourt directement les pages, reconstruit le schéma et réinsère dans une base de données neuve et ouvrable chaque ligne qu'il peut encore décoder — le fichier ne quitte jamais votre machine.

L'historique de Chrome est une base de données SQLite sans extension de fichier

Votre historique n'est pas stocké dans un quelconque format propriétaire — c'est une base de données SQLite qui réside dans le répertoire de profil de Chrome : sous Windows %LOCALAPPDATA%\Google\Chrome\User Data\Default\History, sous macOS ~/Library/Application Support/Google/Chrome/Default/History et sous Linux ~/.config/google-chrome/Default/History (Chromium utilise ~/.config/chromium/…, Edge …/Microsoft/Edge/…, Brave …/BraveSoftware/Brave-Browser/…). Le fichier s'appelle History sans extension, et c'est pour cela que beaucoup de gens ne réalisent pas qu'ils peuvent l'ouvrir dans n'importe quel outil SQLite — renommez une copie en History.db et DB Browser for SQLite la lira immédiatement.

À l'intérieur se trouvent les tables qui composent votre registre de navigation. urls conserve une ligne par page que vous avez visitée — ses colonnes sont id, url, title, visit_count, typed_count, last_visit_time et hidden. visits est la chronologie : chaque ligne possède une clé étrangère url qui pointe de nouveau vers urls.id, un visit_time, un from_visit qui désigne la visite précédente (c'est ainsi que se reconstruisent les chaînes précédent/suivant) et un masque de bits transition dont l'octet de poids faible est le type principal (LINK = 0, TYPED = 1, AUTO_BOOKMARK = 2, RELOAD = 8). À leurs côtés se trouvent keyword_search_terms, downloads et downloads_url_chains, segments/segment_usage (qui alimentent les raccourcis de la page Nouvel onglet) et une petite table meta avec les lignes version et last_compatible_version qui indiquent à Chrome quel schéma il regarde.

Un détail fait trébucher tous ceux qui exportent leur historique : les horodatages ne sont pas du temps Unix. last_visit_time et visit_time sont stockés en microsecondes depuis le 1601-01-01 00:00:00 UTC (l'époque de Chrome/WebKit). Pour lire l'un d'eux comme une date normale, vous divisez par 1 000 000 et vous soustrayez 11 644 473 600 secondes. La récupération conserve les entiers bruts exactement tels qu'ils se trouvent sur le disque, si bien que les dates survivent à la reconstruction — il vous suffit de les convertir ensuite.

Comment le fichier History se corrompt : pages et pointeurs

Une base de données SQLite est un tableau plat de pages de taille fixe — Chrome utilise la valeur par défaut de 4096 octets. La page 1 porte l'en-tête et le schéma ; chaque table, y compris urls et visits, est un arbre-B dont les pages internes pointent vers les pages feuilles qui contiennent vos lignes réelles. Chrome exécute la base de données History en mode WAL (write-ahead logging), si bien qu'à côté vous verrez normalement des fichiers frères nommés History-wal et History-shm ; les versions plus anciennes et certains profils laissent à la place un journal d'annulation (rollback journal) appelé History-journal.

Cette machinerie de fichiers annexes est justement l'endroit par où le dommage se faufile. Si la machine perd le courant, que le disque se remplit ou que Chrome est tué en plein checkpoint, une frame du WAL peut n'être réécrite qu'à moitié dans le fichier principal — une seule page interne se retrouve avec un pointeur de cellule incohérent ou un nombre de pages qui ne correspond pas à la taille du fichier. SQLite suit ce pointeur, tombe sur quelque chose qui n'est pas une page d'arbre-B valide et s'arrête avec Error: database disk image is malformed (11) — code de résultat SQLITE_CORRUPT. Lancez PRAGMA integrity_check et vous verrez les détails : des lignes comme *** in database main ***, Page 214: btreeInitPage() returns error code 11, row 1803 missing from index urls_url_index ou wrong # of entries in index visits_url_index.

L'essentiel : le moteur s'arrête à la première incohérence, mais les pages qu'il n'a jamais atteintes sont généralement parfaites, et vos lignes reposent toujours intactes dans leurs pages feuilles. C'est la même histoire que l'index moov manquant d'une vidéo ou le répertoire central cassé d'un ZIP — c'est la carte qui s'est brisée, pas les données. Voilà pourquoi une reconstruction au niveau des pages récupère autant là où ouvrir le fichier normalement ne récupère rien.

Ce que la récupération ramène

On ne répare pas un fichier History corrompu sur place — on lit tout ce qui est encore décodable et on l'écrit dans une base de données toute neuve, exactement comme le fait la commande .recover de SQLite elle-même. Le scanner lit chaque page localement, reconstruit le schéma à partir des définitions qui ont survécu, puis parcourt l'arbre-B de chaque table et décode les enregistrements auto-descriptifs de ses pages feuilles. Les lignes que la chaîne de pointeurs ne peut plus atteindre sont retrouvées par un balayage brut des pages, et tout ce qui se décode mais ne correspond à aucune table connue est écrit dans une table lost_and_found plutôt que jeté.

En pratique, cela ramène l'essentiel de votre historique : la table urls (adresses, titres de page, visit_count, last_visit_time), la chronologie visits avec ses types de transition et ses chaînes from_visit, et — là où leurs pages sont intactes — keyword_search_terms, downloads et les données de segments. Si vous avez encore le fichier annexe History-wal, ajoutez-le dans l'emplacement optionnel après avoir déposé le fichier principal : ses frames validées (committed) sont superposées avant l'analyse, de sorte que la reconstruction reflète la dernière transaction validée plutôt que le dernier checkpoint — souvent les toutes dernières heures de navigation. Le résultat est un fichier SQLite neuf et ouvrable que vous téléchargez ; renommez-le en History, déposez-le dans le dossier du profil pendant que Chrome est fermé, et votre historique réapparaît, ou interrogez-le simplement dans n'importe quelle visionneuse SQLite.

Là où elle s'arrête vraiment

La récupération renvoie ce qui est physiquement présent ; elle ne peut pas inventer ce qui a été écrasé. Les lignes qui ont été tronquées à la fin du fichier, ou dont les pages ont été réutilisées après une suppression, ont disparu — aucun outil ne peut les ramener. La plus grande perte avec Chrome en particulier, c'est le temps : quand Chrome ouvre un fichier History qu'il considère comme corrompu, il le supprime fréquemment et en crée un neuf et vide sur-le-champ, de sorte que l'original endommagé est écrasé sur place. Si cela s'est déjà produit, fermez Chrome immédiatement et récupérez depuis une sauvegarde ou une copie de l'ancien History/History-wal — le fichier vide qui l'a remplacé n'a rien à l'intérieur à trouver.

Deux réserves plus mineures, dites clairement. Les valeurs récupérées reviennent sous leur classe de stockage sur disque, si bien que l'affinité déclarée d'une colonne peut ne pas être réappliquée — les horodatages restent les bons entiers en microsecondes, il vous suffit de les convertir vous-même. Et les données récupérées d'une base de données corrompue sont toujours suspectes : la documentation de SQLite elle-même le dit, et comme un balayage brut lit aussi les pages de la liste libre (freelist), une URL supprimée auparavant peut de temps en temps refaire surface. Le rapport de récupération indique table par table ce qui est ressorti et ce qui a été extrait par le balayage brut. Rien de tout cela n'a besoin d'un serveur : le fichier History — qui est une carte de tous les endroits où vous êtes allé — est lu depuis votre disque et reconstruit dans votre onglet, et vous pouvez surveiller l'onglet Réseau pour confirmer que 0 octet ne sort.

Ce que cela peut et ne peut pas réparer

Peut réparer

  • « database disk image is malformed (11) » sur le fichier History de Chrome/Chromium à cause d'une page ou d'un pointeur d'arbre-B endommagé
  • La table urls — adresses, titres de page, visit_count, typed_count et last_visit_time — depuis les pages feuilles qui ont survécu
  • La chronologie visits : visit_time, types de transition et chaînes from_visit précédent/suivant
  • keyword_search_terms, downloads et les données de segments là où leurs pages sont intactes
  • La navigation non checkpointée depuis un fichier annexe History-wal fourni (superposé avant l'analyse)
  • Des champs d'en-tête corrompus (taille ou nombre de pages erroné) avec des pages intactes derrière eux

Ne peut pas réparer

  • Un historique que Chrome a déjà supprimé et remplacé par un fichier neuf et vide — les anciennes lignes ont été écrasées sur place
  • Des lignes physiquement tronquées à la fin du fichier, ou sur des pages réutilisées après une suppression — ces octets n'existent plus
  • Une garantie d'exactitude — les données récupérées sont toujours suspectes ; les URL supprimées peuvent refaire surface depuis les pages de la liste libre, alors vérifiez-les
  • Les affinités exactes des colonnes : les valeurs reviennent sous leur classe de stockage sur disque (les horodatages restent corrects, vous les reconvertissez simplement)
  • Un fichier History de 0 octet — c'est d'abord un problème de récupération de données du périphérique de stockage, avant toute reconstruction SQLite

Si une réparation échoue, nous vous expliquons pourquoi (données manquantes ou structure endommagée), et vous n'êtes jamais facturé pour une réparation échouée.

Questions fréquentes

Où se trouve le fichier History de Chrome, et n'a-t-il vraiment aucune extension ?

Oui — c'est un fichier littéralement nommé History, sans extension, à l'intérieur de votre profil : %LOCALAPPDATA%\Google\Chrome\User Data\Default\History sous Windows, ~/Library/Application Support/Google/Chrome/Default/History sous macOS, ~/.config/google-chrome/Default/History sous Linux. C'est une base de données SQLite ordinaire ; copiez-la ailleurs (fermez d'abord Chrome) et déposez cette copie ici, ou renommez-la History.db pour l'ouvrir dans n'importe quelle visionneuse SQLite.

Que signifie « database disk image is malformed » pour mon historique ?

C'est l'erreur SQLITE_CORRUPT de SQLite, code de résultat 11 : le moteur a suivi un pointeur à l'intérieur du fichier et est tombé sur quelque chose qui n'est pas une page d'arbre-B valide. Cela ne veut pas dire que toutes les visites ont disparu — en général, une seule page endommagée fait tomber le fichier entier tandis que les lignes de urls et visits restent intactes dans leurs pages feuilles. La récupération parcourt directement les pages et reconstruit une base de données propre à partir de ce qui a survécu.

Ai-je besoin des fichiers History-wal et History-shm ?

Le fichier -wal vaut la peine d'être apporté ; le -shm, non. Chrome exécute History en mode WAL, si bien que vos visites validées les plus récentes peuvent ne vivre que dans History-wal jusqu'à ce qu'un checkpoint les écrive dans le fichier principal. Déposez d'abord History, puis ajoutez History-wal dans l'emplacement optionnel de fichier annexe et ses frames validées sont superposées avant l'analyse. Le fichier de mémoire partagée -shm ne contient aucune donnée durable et n'est pas nécessaire.

Pourquoi mon historique a-t-il disparu après que Chrome a annoncé que le profil était corrompu ?

Parce que la réponse de Chrome face à un fichier History qu'il ne peut pas ouvrir consiste souvent à le supprimer et à en créer un neuf et vide immédiatement — de sorte que l'original endommagé est écrasé sur place. Si cela s'est produit, fermez Chrome tout de suite et récupérez depuis une sauvegarde ou une copie antérieure de History ; le nouveau fichier vide n'a rien à récupérer. Plus tôt vous empêchez Chrome d'écrire, plus l'ancienne base de données survit.

Puis-je remettre le fichier récupéré dans Chrome ?

Oui. Le résultat est une base de données SQLite normale avec le même schéma urls/visits. Fermez Chrome, renommez le fichier récupéré en History et déposez-le dans le dossier du profil (supprimez d'abord tout History-wal/History-shm obsolète). Ou passez-vous complètement de Chrome et interrogez-le dans une visionneuse SQLite — rappelez-vous simplement que last_visit_time est en microsecondes depuis le 1601-01-01, donc divisez par 1 000 000 et soustrayez 11 644 473 600 pour obtenir le temps Unix.

Associés : Réparer une base de données SQLite corrompue · Word : contenu illisible · Acrobat : « the file is damaged » · Vérifier la promesse de zéro téléversement