2011-08-17 6 views
11

Est-il possible de supprimer toutes les données d'une base de données pendant que RavenDB est en cours d'exécution, hébergeant d'autres bases de données? Dans un environnement de production où RavenDB héberge plusieurs bases de données pour différents clients, il n'est pas acceptable d'arrêter RavenDB afin de supprimer les données d'une base de données unique. Serait-il nécessaire de développer un outil personnalisé, à supprimer des documents individuellement pour y parvenir?Supprimer une seule base de données ravendb pendant que ravendb héberge d'autres bases de données

Répondre

10

Si vous supprimez le document qui décrit la base de données, vous en avez empêché l'accès. RavenDB ne fournit pas un moyen de supprimer réellement la base de données, mais la base de données serait arrêtée si vous supprimez le document qui le décrit. Vous pouvez ensuite supprimer le répertoire de la base de données ou le sauvegarder en fonction de vos besoins.

+0

Je ne suis pas sûr, si je vous ai droit. Je peux supprimer le document de description et après, RavenDB va supprimer ses verrous sur les fichiers de base de données associés, et je serai en mesure de supprimer le fichier de base de données manuellement alors? –

+0

Oui, c'est fondamentalement comment cela fonctionne. –

+1

Comment supprimer le document qui décrit la base de données? Y a-t-il de la documentation pour ça quelque part? – Mike

1

Je veux mettre à jour votre solution, qui est la seule solution pour "supprimer" une base de données.

Actuellement dans la nouvelle version (2.0) de RavenDB, qui sont encore instables, vous pouvez supprimer une base de données avec la nouvelle version du studio.

Vous pouvez le télécharger ici: http://hibernatingrhinos.com/builds/ravendb-unstable-v2.0/

J'espère que cette aide vous Aditionally à la Ayende bonne réponse.

Best, Dario

6

Dans la version 2.0.3 (peut-être même dans les versions antérieures) le studio appelle le suivant http point final afin de supprimer une base de données:

/admin/bases de données/nameOfYourDatabase? hard-delete = true
? hard-delete = true est facultatif.

Basé sur le code source du studio, j'ai créé cette fonction:

public void DeleteDatabase(string name, bool hardDelete = false) 
    { 
     if (string.IsNullOrEmpty(name)) 
      throw new ArgumentNullException("name"); 

     var databaseCommands = _documentStore.DatabaseCommands; 
     var relativeUrl = "/admin/databases/" + name; 

     if (hardDelete) 
      relativeUrl += "?hard-delete=true"; 

     var serverClient = databaseCommands.ForSystemDatabase() as ServerClient; 
     if (serverClient == null) 
      throw new ApplicationException("Please use a more intelligent exception here"); 

     var httpJsonRequest = serverClient.CreateRequest("DELETE", relativeUrl); 
     httpJsonRequest.ExecuteRequest(); 
    } 
Questions connexes