PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 15/02/2013 20:29:16

antonyj
Membre

Perte du répertoire pg_multixact

Bonjour à tous,

J'ai un serveur PostgreSQL 8.4 sous Linux FC12 sur disques SAS en RAID 1 (partitions ext3).

Le système de fichiers a été corrompu, un fsck l'a remis en état cohérent mais beaucoup de fichiers ont été supprimés.
Après avoir restauré les fichiers système, la machine arrive à démarrer mais Postgres ne démarre pas avec cette erreur :

postgres@lpmserveur /var/lib/pgsql/data/ $ postgres --single -D /var/lib/pgsql/data lpmdb
FATAL:  n'a pas pu accéder au statut de la transaction 110466
DÉTAIL:  N'a pas pu ouvrir le fichier « pg_multixact/offsets/0001 » : Aucun fichier ou dossier de ce type

Après vérification, il s'avère que la quasi-totalité du répertoire pg_multixact a été perdu (la totalité de pg_multixact/offsets).
J'ai fait une copie de la base corrompue et ai essayé diverses choses (pg_resetxlog, zero_damaged_pages , ignore_system_indexes) sans succès.

Seule une partie des données est importante (moins de 1%, le contenu de 10 tables sur les 50). La consistance des données est sans importance, tant que je peux les exporter dans des fichiers texte.

Ai-je une chance de récupérer une partie des données ? Comment arriver à faire démarrer le serveur ?
(Je n'ai pas de sauvegarde de cette base à tord).

Merci pour vos conseils.

Hors ligne

#2 17/02/2013 20:21:21

gleu
Administrateur

Re : Perte du répertoire pg_multixact

Chez moi, j'ai deux fichiers de 8 Ko, ainsi :

[guillaume@laptop pg_multixact]$ ll */*
-rw-------. 1 guillaume guillaume 8192 Nov  9 09:19 members/0000
-rw-------. 1 guillaume guillaume 8192 Feb 15 19:11 offsets/0000

Vu l'état du serveur (et en supposant que vous avez bien fait attention à conserver une copie des fichiers avant toute tentative, notamment le pg_resetxlog), j'essaierai de créer ces deux fichiers en les remplissant de zéros (binaires). La commande suivante doit suffire :

dd if=/dev/zero of=0000 bs=1 count=8192

Après ça, je redémarrerais PostgreSQL... et je croiserais fortement les doigts. Si jamais, par miracle, cela fonctionnait, je ferais immédiatement une sauvegarde et je recréerais l'instance complète.

Bon courage.


Guillaume.

Hors ligne

#3 18/02/2013 12:05:02

antonyj
Membre

Re : Perte du répertoire pg_multixact

Merci pour le conseil.

Pour moi les fichiers s'appellent 0001 et mesurent quelques centaines de Ko. J'ai donc fait un dd d'un méga et cela a fonctionné.
Il manque la moitié des tables, mais j'ai récupéré pas mal de données.

Encore merci.
Antony

Hors ligne

Pied de page des forums