2011-08-17 17 views
11

¿Hay alguna manera de que pueda eliminar todos los datos en una sola base de datos mientras RavenDB aún se está ejecutando, alojando otras bases de datos?Eliminar una sola base de datos ravendb mientras ravendb ejecuta otras bases de datos

En un entorno de producción con RavenDB alojando múltiples bases de datos para diferentes clientes, no es aceptable detener RavenDB para eliminar los datos de una única base de datos. ¿Sería necesario desarrollar una herramienta a medida, al eliminar documentos individualmente para lograr esto?

Respuesta

10

Si elimina el documento que describe la base de datos, ha impedido el acceso. RavenDB no proporciona una manera de eliminar realmente la base de datos, pero la base de datos se cerraría si elimina el documento que la describe. Puede eliminar el directorio de la base de datos o hacer una copia de seguridad de acuerdo con sus necesidades.

+0

No estoy seguro, si te tengo derecho. Puedo eliminar el documento descriptivo y luego, ravenDB eliminará sus bloqueos en los archivos de base de datos asociados y, entonces, ¿podré eliminar el archivo de la base de datos? –

+0

Sí, así es básicamente como funciona. –

+1

¿Cómo se elimina el documento que describe la base de datos? ¿Hay documentación para esto en alguna parte? – Mike

1

Quiero actualizar su solución, que es la única solución para "eliminar" una base de datos.

Actualmente en la nueva versión (2.0) de RavenDB, que aún son inestables, puede eliminar una base de datos con la nueva versión del estudio.

Puede descargarlo desde aquí: http://hibernatingrhinos.com/builds/ravendb-unstable-v2.0/

voy espero que esto ayudará a Adicionalmente a la buena respuesta Ayende.

mejor, Darío

6

En la versión 2.0.3 (tal vez incluso en las versiones antes) el estudio está llamando a los siguientes http punto final con el fin de eliminar una base de datos:

/admin/bases de datos/nameOfYourDatabase? hard-delete = true
? hard-delete = true es opcional.

Basado en el código fuente del estudio He creado esta función:

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