2015-09-01 2 views
1

J'utilise BerkeleyDb dans un projet. J'ai quelques environnements composés par plusieurs fichiers. Parfois, J'ai besoin de supprimer certains de ces fichiers.BerkeleyDb: supprimer en toute sécurité les fichiers de l'environnement

Lorsque je supprime un fichier avec le système de fichiers, l'ouverture de l'environnement génère une erreur Aucun fichier ou répertoire.

Existe-t-il un moyen pour supprimer en toute sécurité un fichier dans un environnement BerkeleyDb?

Répondre

0

Pour supprimer une base de données, vous devez être absolument certain qu'aucune référence à la base de données n'existe dans l'environnement. La façon la plus à toute épreuve pour ce faire est la suivante:

  1. Utilisez db->remove() pour supprimer la base de données à l'intérieur de votre application. Utilisez dbenv->txn_checkpoint() pour vider tous les changements, vérifiez le journal et vider le journal.
  2. Utilisez l'indicateur dbenv->txn_checkpoint() avec l'indicateur DB_FORCE pour activer un autre point de contrôle, en vous assurant que lorsque l'environnement est récupéré, il ne tente pas de récupérer les bases de données antérieures au dernier point de contrôle.

L'étape 3 semble fou, je sais. Et peut-être que ce n'est plus nécessaire. Mais c'était certainement nécessaire dans un passé pas si lointain. Certainement les étapes 1 et 2 sont nécessaires. Vous devrez expérimenter pour voir si l'étape 3 est nécessaire pour votre application.