2011-08-17 13 views
11

Czy istnieje sposób, aby usunąć wszystkie dane w jednej bazie danych, podczas gdy RavenDB nadal działa, udostępniając inne bazy danych?Usunąć pojedynczą bazę danych ravendb, podczas gdy ravendb uruchamia hosting innych baz danych

W środowisku produkcyjnym, w którym RavenDB hostuje wiele baz danych dla różnych klientów, niedopuszczalne jest zatrzymanie RavenDB w celu usunięcia danych z pojedynczej bazy danych. Czy konieczne byłoby niestandardowe opracowanie narzędzia, usuwanie dokumentów indywidualnie, aby to osiągnąć?

Odpowiedz

10

Usunięcie dokumentu opisującego bazę danych uniemożliwiło do niego dostęp. RavenDB nie zapewnia sposobu na usunięcie bazy danych, ale baza danych zostanie zamknięta, jeśli usuniesz dokument opisujący ją. Następnie można usunąć katalog bazy danych lub utworzyć kopię zapasową zgodnie z własnymi potrzebami.

+0

Nie jestem pewien, czy mam cię. Mogę usunąć dokument opisujący, a następnie, ravenDB usunie swoje blokady z powiązanych plików baz danych i będę mógł ręcznie usunąć plik bazy danych? –

+0

Tak, w zasadzie to działa. –

+1

Jak usunąć dokument opisujący bazę danych? Czy jest gdzieś dokumentacja? – Mike

1

Chcę zaktualizować rozwiązanie, które jest jedynym rozwiązaniem do "usuwania" bazy danych.

Właściwie w nowej wersji (2.0) RavenDB, które wciąż są niestabilne, można usunąć bazę danych z nową wersją studia.

Można go pobrać stąd: http://hibernatingrhinos.com/builds/ravendb-unstable-v2.0/

będę nadzieję to pomóc aditionally na dobrą odpowiedź Ayende.

Best, Dario

6

W wersji 2.0.3 (może nawet w wersjach wcześniejszych) studio dzwoni następujące http końcowym w celu usunięcia bazy danych:

/admin/baz/nameOfYourDatabase? hard-delete = true
? hard-delete = true jest opcjonalny.

podstawie kodu źródłowego ze studia I stworzyliśmy tę funkcję:

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