Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Berkeley DB

5 réponses
Avatar
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

5 réponses

Avatar
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 :)

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

Avatar
manu
DINH Viêt Hoà wrote:

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



Avatar
DINH Viêt Hoà

DINH Viêt Hoà wrote:

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



Avatar
manu
DINH Viêt Hoà wrote:

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


Avatar
Laurent Wacrenier
DINH Viêt Hoà écrit:
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.