2011-08-17 15 views
11

Esiste un modo per rimuovere tutti i dati in un singolo database mentre RavenDB è ancora in esecuzione, ospitando altri database?Elimina un singolo database ravendb mentre ravendb è in esecuzione su altri database

In un ambiente di produzione con RavenDB che ospita più database per diversi clienti, non è accettabile interrompere RavenDB per eliminare i dati da un singolo database. Sarebbe necessario personalizzare lo strumento, eliminando individualmente i documenti per raggiungere questo obiettivo?

risposta

10

Se si elimina il documento che descrive il database, si è impedito l'accesso ad esso. RavenDB non fornisce un modo per eliminare effettivamente il database, ma il database verrebbe chiuso se si elimina il documento che lo descrive. È quindi possibile eliminare la directory del database o eseguirne il backup in base alle proprie esigenze.

+0

Im non sicuro, se ho avuto ragione. Posso eliminare il documento descrittivo e successivamente, ravenDB rimuoverà i suoi blocchi sui file di database associati e sarò in grado di eliminare manualmente il file del database? –

+0

Sì, questo è fondamentalmente il modo in cui funziona. –

+1

Come si elimina il documento che descrive il database? C'è documentazione per questo da qualche parte? – Mike

1

Desidero aggiornare la soluzione, che è l'unica soluzione per "eliminare" un database.

In realtà nella nuova versione (2.0) di RavenDB, che sono ancora instabili, è possibile eliminare un database con la nuova versione dello studio.

Potete scaricarlo da qui: http://hibernatingrhinos.com/builds/ravendb-unstable-v2.0/

io spero che questo aiuto si Aditionally alla buona risposta Ayende.

migliore, Dario

6

Nella versione 2.0.3 (forse anche nelle versioni prima) lo studio sta chiamando il seguente http endpoint al fine di eliminare un database:

/admin/database/nameOfYourDatabase? hard-delete = true
? hard-delete = true è facoltativo.

Sulla base del codice sorgente dallo studio ho creato questa funzione:

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(); 
    }