Berkeley DB

Le
manu
Que donne Berkeley DB en cas de kill -9 ou de debranchement intempestif
de la machine pendant les accès à la base? Je suppose que la base peut
être corrompue? Si oui, existe-t-il un moyen de verifier l'integrité
d'une base DB quand on l'ouvre?

--
Emmanuel Dreyfus
Un bouquin en français sur BSD:
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
manu@netbsd.org
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DINH Viêt Hoà
Le #456284

Que donne Berkeley DB en cas de kill -9 ou de debranchement intempestif
de la machine pendant les accès à la base? Je suppose que la base peut
être corrompue? Si oui, existe-t-il un moyen de verifier l'integrité
d'une base DB quand on l'ouvre?


version 1 => base corrompue
C'est la version 1 qui est en standard sur les différents Unix :)

A partir de je ne sais plus quelle version, la base de donnée est censée
être journalisée, donc, moins de corruption de la base.

--
DINH V. Hoa,

"elle est maquillée comme une voiture volée" -- Elisa

manu
Le #456279
DINH Viêt Hoà
Que donne Berkeley DB en cas de kill -9 ou de debranchement intempestif
de la machine pendant les accès à la base? Je suppose que la base peut
être corrompue? Si oui, existe-t-il un moyen de verifier l'integrité
d'une base DB quand on l'ouvre?


version 1 => base corrompue
C'est la version 1 qui est en standard sur les différents Unix :)


Oui, et c'est celle que j'utilise. Donc deuxième question: ai-je un
moyen de verifier la bonne santé de la base? Si je peux la parcourir
entièrement avec db->seq, ca me donne une bonne garantie sur la
structure de la base, mais est-ce que ca suffit pour être sur que les
données sont correctes?

En fait, l'idée, c'est que j'ai un dump au format texte qui est fait
regulièrement, donc si la base est corrompue, je repars du fichier
texte. Mais pour faire ca il faut être capable de detecter la
corruption.

Si il n'y a pas de garantie sur l'etat des données, j'immagine que le
seul moyen d'en sortir, c'est de parcourir regulièrement la base et de
maintenir un fichier auxilaire où je stocke un checksum des données: si
au démarrage le checksum n'est pas verifié, c'est que la base est sale,
et que je dois recharger le fichier texte.

Cette approche est-elle envisageable? Ai-je des alternatives?

--
Emmanuel Dreyfus
Un bouquin en français sur BSD:
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3



DINH Viêt Hoà
Le #456277

DINH Viêt Hoà
Que donne Berkeley DB en cas de kill -9 ou de debranchement intempestif
de la machine pendant les accès à la base? Je suppose que la base peut
être corrompue? Si oui, existe-t-il un moyen de verifier l'integrité
d'une base DB quand on l'ouvre?


version 1 => base corrompue
C'est la version 1 qui est en standard sur les différents Unix :)


Oui, et c'est celle que j'utilise. Donc deuxième question: ai-je un
moyen de verifier la bonne santé de la base? Si je peux la parcourir
entièrement avec db->seq, ca me donne une bonne garantie sur la
structure de la base, mais est-ce que ca suffit pour être sur que les
données sont correctes?

En fait, l'idée, c'est que j'ai un dump au format texte qui est fait
regulièrement, donc si la base est corrompue, je repars du fichier
texte. Mais pour faire ca il faut être capable de detecter la
corruption.

Si il n'y a pas de garantie sur l'etat des données, j'immagine que le
seul moyen d'en sortir, c'est de parcourir regulièrement la base et de
maintenir un fichier auxilaire où je stocke un checksum des données: si
au démarrage le checksum n'est pas verifié, c'est que la base est sale,
et que je dois recharger le fichier texte.

Cette approche est-elle envisageable? Ai-je des alternatives?


heu ... et pourquoi tu mets pas un espèce de fichier genre :

- ta base : ma-base.db
- utilisation base : ma-base.db.corrupted
-

sur les BSD, comme la création de fichier est atomique me semble-t-il,
tu es garanti que si le fichier corrupted est présent, ta base est en
cours d'utilisation. Si au prochain lancement de ton appli, ce fichier
est présent, et bien tu flushes ta base.

Ca te va ?

(un peu comme les fichiers dot lock en fait ... (/var/mail/toto.lock),
sauf que là, ce serait plus pour un rôle d'état de la base)

--
DINH V. Hoa,

"j'ai du boulot je peux pas venir" -- cege



manu
Le #456060
DINH Viêt Hoà
heu ... et pourquoi tu mets pas un espèce de fichier genre :

- ta base : ma-base.db
- utilisation base : ma-base.db.corrupted
-

sur les BSD, comme la création de fichier est atomique me semble-t-il,
tu es garanti que si le fichier corrupted est présent, ta base est en
cours d'utilisation. Si au prochain lancement de ton appli, ce fichier
est présent, et bien tu flushes ta base.

Ca te va ?


En fait je me dis qu'en mettant simplement un fichier ma-base.busy que
je detruit dans une fonction atexit, je n'ai qu'à tester l'existance du
fichier pour savoir si la base est potentiellement corrompue ou pas.

--
Emmanuel Dreyfus
Un bouquin en français sur BSD:
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3


Laurent Wacrenier
Le #462079
DINH Viêt Hoà
A partir de je ne sais plus quelle version, la base de donnée est censée
être journalisée, donc, moins de corruption de la base.


Ça n'empeche que le décompte des vérous peut être faux.

Publicité
Poster une réponse
Anonyme