Можно ли узнать уровень из последней инкрементной резервной копии, сделанной с помощью nbackup от Firebird?

Это довольно простой вопрос. Firebird имеет резервный инструмент под названием nbackup тогда как вы можете создавать инкрементные резервные копии.

инструмент жалуется, если вы не делаете резервную копию в правильном порядке (например, вы делаете резервную копию уровня 0, а затем Уровень 2). Затем я предполагаю, что инструмент помещает флаг в базу данных, указывающий уровень последней резервной копии.

документация здесь

Как я могу получить эта информация?

1 ответов


насколько я знаю, единственный способ-запросить таблицу RDB$BACKUP_HISTORY (для этого нет вызова диспетчера служб). Чтобы получить последнюю резервную копию, вы можете использовать:

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

в таблице RDB$BACKUP_HISTORY имеет следующие столбцы:

  • RDB$BACKUP_ID первичный ключ
  • RDB$TIMESTAMP отметка времени резервного копирования
  • RDB$BACKUP_LEVEL обратно до уровня
  • RDB$GUID guid резервной копии (это также используется в файлах резервных копий для управления и проверки зависимости)
  • RDB$SCN самый высокий маркер страницы в резервной копии (см. ниже)
  • RDB$FILE_NAME имя файла созданной резервной копии

Nbackup делает физическую резервную копию страниц базы данных. SCN (сокращение от сканирования страницы...)- номер, используемый для обозначения страниц базы данных. Это число увеличивается при каждом изменении состояния резервной копии, для каждой резервной копии с nbackup есть 3 изменения состояния: nbak_state_normal (без резервной копии) - > nbak_state_stalled (база данных записывается в delta файл) - > nbak_state_merge (слияние Дельта-файла обратно в базу данных) - > nbak_state_normal (без резервной копии).

первая резервная копия получает SCN 0, вторая SCN 3 и т. д. (не имеет значения, какой уровень).

  • SCN 0: страницы перед любой резервной копией
  • SCN 1: страницы, записанные / обновленные в Дельта-файл во время резервного копирования
  • SCN 2: страницы, написанные / обновленные во время слияния Дельта-файла в основную резервную копию (хотя я не уверен, что страницы из дельта-файла записывается обратно в основной файл get SCN 1 или 2)
  • SCN 3: страницы, написанные / обновленные после завершения первого резервного копирования + merge
  • ...
  • SCN 6: страницы, написанные / обновленные после завершения второго резервного копирования + merge

когда вы делаете резервную копию уровня 1, он ищет последнюю резервную копию уровня 0 и создает резервные копии всех страниц с SCN выше, чем SCN этой резервной копии уровня 0 (и так далее). Это также описано в примечаниях к выпуску Firebird 2.1:Новый он-лайн Инкрементное Резервное Копирование.

обратите внимание, что резервное копирование и восстановление с gbak ясный RDB$BACKUP_HISTORY таблица и сбросить SCN всех страниц обратно в 0. Причина этого заключается в том, что gbak создает логическую резервную копию вместо физической. Таким образом, восстановление с помощью gbak перепишет всю базу данных (и даже может изменить размер страницы). Это делает предыдущие резервные копии с nbackup бессмысленными в качестве отправной точки для последующих резервных копий: вам нужно начать с нового уровня 0.

поскольку эта информация отсутствует в руководстве nbackup, я создал билет на трекер Firebird:http://tracker.firebirdsql.org/browse/DOC-94