2011-08-17 34 views
11

Có cách nào tôi có thể xóa tất cả dữ liệu trong một cơ sở dữ liệu trong khi RavenDB vẫn đang chạy, lưu trữ cơ sở dữ liệu khác không?Xóa một cơ sở dữ liệu ravendb trong khi ravendb đang chạy lưu trữ cơ sở dữ liệu khác

Trong môi trường sản xuất với RavenDB lưu trữ nhiều cơ sở dữ liệu cho các khách hàng khác nhau, không thể chấp nhận dừng RavenDB để xóa dữ liệu khỏi một cơ sở dữ liệu. Nó sẽ là cần thiết để tùy chỉnh phát triển một công cụ, tại xóa tài liệu riêng lẻ để đạt được điều này?

Trả lời

10

Nếu bạn xóa tài liệu mô tả cơ sở dữ liệu thì bạn đã ngăn truy cập vào nó. RavenDB không cung cấp một cách để thực sự xóa cơ sở dữ liệu, nhưng cơ sở dữ liệu sẽ bị tắt nếu bạn xóa tài liệu mô tả nó. Sau đó bạn có thể xóa thư mục cơ sở dữ liệu, hoặc sao lưu nó, theo nhu cầu của bạn.

+0

Im không chắc chắn, nếu tôi có bạn ngay. Tôi có thể xóa các tài liệu mô tả và sau đó, ravenDB sẽ loại bỏ các khóa của nó trên các tệp cơ sở dữ liệu liên quan, và tôi sẽ có thể xóa tệp cơ sở dữ liệu theo cách thủ công sau đó? –

+0

Vâng, đó là cơ bản cách hoạt động. –

+1

Làm cách nào để xóa tài liệu mô tả cơ sở dữ liệu? Có tài liệu cho điều này ở đâu đó không? – Mike

1

Tôi muốn cập nhật giải pháp của bạn, đó là giải pháp duy nhất để "xóa" cơ sở dữ liệu.

Thực tế trong phiên bản mới (2.0) của RavenDB, vẫn không ổn định, bạn có thể xóa cơ sở dữ liệu bằng phiên bản mới của studio.

Bạn có thể tải về từ đây: http://hibernatingrhinos.com/builds/ravendb-unstable-v2.0/

tôi sẽ hy vọng điều này giúp bạn aditionally để trả lời Ayende tốt.

nhất, Dario

6

Trong phiên bản 2.0.3 (có thể ngay cả trong các phiên bản trước đó) studio đang kêu gọi như sau http endpoint để xóa một cơ sở dữ liệu:

/admin/cơ sở dữ liệu/nameOfYourDatabase? hard-delete = true
? hard-delete = true là tùy chọn.

Dựa trên mã nguồn từ studio Tôi đã tạo ra chức năng này:

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(); 
    } 
Các vấn đề liên quan