Ở công việc trước đây tôi đã làm chính xác điều này. Chúng tôi đã ở trong phạm vi 500 người thuê nhà, nhưng một khi bạn đạt được trên 10 hoặc 20, phần tự động hóa làm cho con số thực tế ít quan trọng hơn nhiều.
Giả sử rằng phần cứng của bạn có thể xử lý sao lưu 10.000 cơ sở dữ liệu trong một thời gian đủ và tất cả 10.000 không có hoạt động đủ quan trọng để áp đảo máy chủ của bạn có hoặc không có bản sao lưu, bước tiếp theo là tự động hóa quy trình nói chung. Điều thú vị ở mô hình này là nếu 10.000 cơ sở dữ liệu kết thúc áp đảo máy chủ của bạn, việc chuyển một nửa trong số chúng sang máy chủ thứ hai sẽ dễ dàng hơn và hướng ứng dụng của bạn vào đúng ví dụ tùy thuộc vào người thuê, hơn là thử và trích xuất một nửa dữ liệu trong một cơ sở dữ liệu. Bạn có một số trong FULL và một số trong SIMPLE, hoặc tất cả chúng đều trong cùng một mô hình khôi phục?
Chúng tôi đã có những ưu tiên. Vì vậy, một bảng để chứa thông tin người thuê (trong triển khai của tôi có nhiều cột hơn, nhưng đây phải là những điều cơ bản):
CREATE TABLE dbo.TenantBackups
(
TenantID INT PRIMARY KEY,
RecoveryModel VARCHAR(6),
Priority TINYINT
);
Và sau đó là một bảng lịch sử (một lần nữa, nhiều hơn trong bảng hệ thống thực tế, nhưng cho mục đích của câu hỏi):
CREATE TABLE dbo.TenantBackupHistory
(
TenantID INT, -- FOREIGN KEY,
BackupType TINYINT, -- lookup for FULL, LOG, RESTORE_TEST
StartTime DATETIME,
EndTime DATETIME,
Status NVARCHAR(1000) -- almost always NULL but held true "exceptions"
);
Vì vậy, bây giờ (các) công việc có thể chạy qua người thuê, được sắp xếp theo thứ tự ưu tiên và thực hiện sao lưu. Chúng tôi thực sự đã có các công việc riêng cho ưu tiên 1 so với ưu tiên 2-5.
Chúng tôi đã kiểm tra mức độ ưu tiên 1 người thuê hàng đêm bằng cách khôi phục lại toàn bộ bản sao lưu của họ trên máy chủ sao lưu. Chúng tôi cũng chọn 20 cơ sở dữ liệu ngẫu nhiên từ các ưu tiên khác mỗi đêm để kiểm tra khôi phục của họ. Tất nhiên, có các cảnh báo được định cấu hình để các lỗi được biết ngay lập tức và nếu ngoại lệ nằm ngoài phạm vi thử lại / lỗi thông thường của chúng tôi, cột Trạng thái sẽ chứa thông tin.
Chúng tôi cũng đã sử dụng SQL Sentry để xâu chuỗi các công việc để chúng tôi không phải lo lắng về việc lên lịch cho bộ đệm và cố gắng dự đoán khi nào các công việc sao lưu sẽ kết thúc. Đối với cơ sở dữ liệu ưu tiên 1, chúng tôi không bận tâm chờ đợi các bản sao lưu hoàn tất; chúng tôi đã có một luồng nền sẽ đợi cho mỗi bản sao lưu đầy đủ riêng lẻ hoàn thành và sau đó sẽ ngay lập tức lấy nó ra khỏi hàng đợi và bắt đầu quá trình kiểm tra sao chép / khôi phục. Đối với những người thuê nhà ưu tiên 1, chúng tôi cũng đã sử dụng bản sao được khôi phục làm giảm tải báo cáo - đối với bất kỳ báo cáo nào quan tâm đến dữ liệu trước ngày hôm nay (hầu hết các báo cáo), họ có thể chạy khỏi bản sao, vì điều duy nhất nó bị thiếu là ngày hôm nay.
Đối với người thuê phục hồi hoàn toàn (không phải tất cả khách hàng yêu cầu tại thời điểm), các công việc sao lưu nhật ký có thể dễ dàng kiểm tra bảng lịch sử để xem liệu có bản sao lưu nào đang được tiến hành hay không. Nhưng tất nhiên xử lý lỗi và logic thử lại đã được thực hiện xung quanh.
Tôi biết đây là những mô tả rất chung chung nhưng tôi hy vọng họ chỉ cho bạn đi đúng hướng. Hãy cho tôi biết nếu bạn muốn tôi mở rộng bất kỳ chi tiết nào.