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
Dokładnie to, czego szukałem i więcej. Dziękuję Ci! Mam nadzieję, że to pomoże wielu osobom. – Epiplon