2014-08-28 15 views
8

Đó là một câu hỏi khá đơn giản. Firebird có công cụ sao lưu có tên là nbackup trong khi bạn có thể thực hiện sao lưu gia tăng.Có thể biết mức độ từ bản sao lưu gia tăng cuối cùng, được tạo bằng nBackup từ Firebird không?

Công cụ này than phiền nếu bạn không thực hiện sao lưu theo đúng thứ tự (ví dụ: bạn thực hiện sao lưu mức 0, sau đó là cấp 2). Sau đó, tôi giả định rằng công cụ đặt một lá cờ trong cơ sở dữ liệu cho biết mức độ sao lưu cuối cùng được thực hiện.

Tài liệu được cung cấp here

Làm cách nào tôi có thể truy xuất thông tin này?

Trả lời

9

Theo như tôi biết, cách duy nhất là truy vấn bảng RDB$BACKUP_HISTORY (không có cuộc gọi của người quản lý dịch vụ cho việc này). Để có được bản sao lưu cuối cùng bạn có thể sử dụng:

SELECT RDB$BACKUP_ID, RDB$TIMESTAMP, RDB$BACKUP_LEVEL, RDB$GUID, RDB$SCN, RDB$FILE_NAME 
FROM RDB$BACKUP_HISTORY 
ORDER BY RDB$TIMESTAMP DESC 
ROWS 1 

Bảng RDB$BACKUP_HISTORY có các cột sau:

  • RDB$BACKUP_ID chính chủ chốt
  • RDB$TIMESTAMP dấu thời gian của sao lưu
  • RDB$BACKUP_LEVEL sao lưu mức
  • RDB$GUID guid của sao lưu (điều này cũng được sử dụng trong các tập tin sao lưu để kiểm soát và c quái phụ thuộc)
  • RDB$SCN đánh dấu trang cao nhất trong sao lưu (xem dưới đây)
  • RDB$FILE_NAME filename của sao lưu được tạo

Nbackup hiện một sao lưu vật lý của các trang cơ sở dữ liệu. SCN (viết tắt của trang quét ...) là một số được sử dụng để đánh dấu các trang cơ sở dữ liệu. Con số này được tăng lên ở mỗi thay đổi trạng thái sao lưu, cho mỗi sao lưu với nbackup có 3 thay đổi trạng thái: nbak_state_normal (không sao lưu) -> nbak_state_stalled (cơ sở dữ liệu ghi vào tệp delta) -> nbak_state_merge (hợp nhất tệp delta vào cơ sở dữ liệu) -> nbak_state_normal (không sao lưu).

Sao lưu đầu tiên là SCN 0, SCN 3 thứ hai, v.v. (không quan trọng đến cấp độ nào).

  • SCN 0: Trang trước bất kỳ sao lưu
  • SCN 1: Các trang viết/cập nhật vào các tập tin đồng bằng trong khi sao lưu
  • SCN 2: Các trang viết/cập nhật trong việc hợp nhất các tập tin đồng bằng vào sao lưu chính (mặc dù tôi không chắc chắn nếu các trang từ tập tin đồng bằng văn bản trở lại vào tập tin chính được SCN 1 hoặc 2)
  • SCN 3: các trang viết/cập nhật sau khi kết thúc đầu tiên sao lưu + kết hợp
  • ...
  • SCN 6 : Trang được viết/cập nhật sau khi kết thúc thứ hai b ackup + merge

Khi bạn tạo bản sao lưu cấp 1, nó sẽ sao lưu mức 0 cuối cùng và sao lưu tất cả các trang có SCN cao hơn SCN của bản sao lưu mức 0 đó (v.v.). Điều này cũng được mô tả trong ghi chú phát hành Firebird 2.1: New On-line Incremental Backup.

Lưu ý rằng một bản sao lưu và khôi phục với gbak sẽ xóa bảng RDB$BACKUP_HISTORY và đặt lại SCN tất cả các trang trở về 0. Lý do cho điều này là gbak tạo ra một bản sao lưu logic thay vì một bản sao lưu chất. Vì vậy, một khôi phục bằng cách sử dụng gbak sẽ viết lại toàn bộ cơ sở dữ liệu (và thậm chí có thể thay đổi kích thước trang). Điều này làm sao lưu trước đó với nbackup vô nghĩa như là một điểm khởi đầu cho sao lưu tiếp theo: bạn cần phải bắt đầu với một cấp độ tươi 0.

Vì thông tin này bị thiếu trong hướng dẫn nbackup, tôi đã tạo một vé trên trình theo dõi Firebird: http://tracker.firebirdsql.org/browse/DOC-94

+1

Chính xác những gì tôi đang tìm kiếm và hơn thế nữa. Cảm ơn bạn! Tôi hy vọng điều này giúp rất nhiều người. – Epiplon

Các vấn đề liên quan