2014-08-28 13 views
8

To dość proste pytanie. Firebird ma narzędzie kopii zapasowej o nazwie nbackup, podczas gdy można tworzyć przyrostowe kopie zapasowe.Czy możliwe jest poznanie poziomu z ostatniej przyrostowej kopii zapasowej wykonanej za pomocą nbackup z Firebird?

Narzędzie narzeka, jeśli nie wykonasz kopii zapasowej we właściwej kolejności (np. Wykonasz kopię zapasową poziomu 0, a następnie poziom 2). Następnie zakładam, że narzędzie umieszcza flagę w bazie danych, wskazując poziom ostatniej utworzonej kopii zapasowej.

Dokumentacja jest here

Jak mogę odzyskać tę informację?

Odpowiedz

9

O ile mi wiadomo, jedynym sposobem jest wysłanie zapytania do tabeli RDB$BACKUP_HISTORY (nie ma w tym celu wezwania menedżera serwisowego). Aby uzyskać ostatniej kopii zapasowej można użyć:

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 

tabela RDB$BACKUP_HISTORY ma następujące kolumny:

  • RDB$BACKUP_ID klucz podstawowy
  • RDB$TIMESTAMP timestamp kopii zapasowej
  • RDB$BACKUP_LEVEL powrotem w górę poziomu
  • RDB$GUID Guid kopii zapasowej (jest to również używane w plikach kopii zapasowych do kontrolowania i c Zależności Heck)
  • RDB$SCN najwyższa marker strona w kopii zapasowej (patrz niżej)
  • RDB$FILE_NAME nazwa pliku kopii zapasowej utworzonej

Nbackup robi fizyczną kopię zapasową bazy danych stron. SCN (skrót od strony skanowania ...) to liczba używana do oznaczania stron bazy danych. Liczba ta jest zwiększana przy każdej zmianie stanu kopii zapasowej, dla każdej kopii zapasowej z nbackup są 3 zmiany stanu: nbak_state_normal (bez kopii zapasowej) -> nbak_state_stalled (baza danych zapisuje do pliku delta) -> nbak_state_merge (łączenie pliku delta z powrotem do bazy danych) -> nbak_state_normal (bez kopii zapasowej).

Pierwsza kopia zapasowa otrzymuje SCN 0, drugi SCN 3 itd. (Nie ma znaczenia, który poziom).

  • SCN 0: Strony przed dowolnej kopii zapasowej
  • SCN 1: Strony napisany/zaktualizowany do pliku delta podczas tworzenia kopii zapasowej
  • SCN 2: Strony pisemnych/zaktualizowany podczas scalania pliku delta w głównej kopii zapasowej (chociaż jestem pewien, czy strony z pliku delta pisemnej powrotem do głównego pliku dostać SCN 1 lub 2)
  • SCN 3: Strony napisany/aktualizowane po zakończeniu pierwszej kopii zapasowej + scalić
  • ...
  • SCN 6 : Strony napisane/zaktualizowane po zakończeniu drugiego b ackup + scalanie

Po wykonaniu kopii zapasowej poziomu 1 szuka ostatniej kopii zapasowej na poziomie 0 i tworzy kopie zapasowe wszystkich stron z SCN wyższym niż SCN kopii zapasowej tego poziomu 0 (i tak dalej). Opisano to również w wydaniach Firebird 2.1: New On-line Incremental Backup.

Należy pamiętać, że tworzenie kopii zapasowych i przywracanie z gbak usunie tabelę RDB$BACKUP_HISTORY i zresetować SCN wszystkich stron z powrotem do 0. Powodem tego jest to, że gbak tworzy logiczny zapasową zamiast fizycznej kopii zapasowej. Zatem przywracanie za pomocą gbaka spowoduje przepisanie całej bazy danych (a nawet zmianę rozmiaru strony). Powoduje to, że poprzednie kopie zapasowe z nbackup są bez znaczenia jako punkt wyjścia dla kolejnych kopii zapasowych: musisz zacząć od nowego poziomu 0.

Ponieważ tej informacji brakuje w podręczniku nbackup, utworzyłem bilet na trackerze Firebird: http://tracker.firebirdsql.org/browse/DOC-94

+1

Dokładnie to, czego szukałem i więcej. Dziękuję Ci! Mam nadzieję, że to pomoże wielu osobom. – Epiplon