Алгоритм Инкрементного резервного копирования

Рубрика: Oracle

Приветствую, уважаемые посетители okITgo.ru! Продолжим начатую в прошлом посте данной рубрики тему и на этот раз более подробно рассмотрим, каким образом осуществляется инкрементное резервное копирование.

Каждый блок данных в файле данных содержит системный номер изменения (SCN), который является номером SCN, на котором было произведено новое изменение в блоке. Во время инкрементного резервного копирования RMAN читает SCN каждого блока данных во входном файле и сравнивает его с SCN контрольной точки родительского инкрементного резервного копирования. Если SCN в входном блоке данных больше или равно, чем SCN контрольной точки родителя, то RMAN копирует блок.

Отметьте, что, если Вы активируете опцию отслеживания изменений блоков, RMAN может обратиться к файлу отслеживания изменений, чтобы идентифицировать измененные блоки в файлах данных, не сканируя все содержимое файла данных. После включения, отслеживание изменений блоков не повлияет на то, как Вы осуществляете или используете инкрементные резервные копии, а только предлагает улучшенную производительность.

Инкрементные Резервные копии Уровня 0 и Уровня 1

Инкрементные резервные копии могут быть уровня 0 или уровня 1. Инкрементный бэкап Уровня 0, который является основой для последующих инкрементных бэкапов, копирует все блоки, содержащие данные, резервируя файл данных в резервный набор, как при полном резервном копировании. Единственная разница между инкрементным бэкапом уровня 0 и полным бэкапом состоит в том, что полный бэкап никогда не включается в инкрементную стратегию.

Инкрементный бэкап уровня 1 может иметь один из следующих типов:

  • Дифференциальный бэкап, который резервирует все блоки, измененные после последнего инкрементного бэкапа на уровне 1 или 0
  • Кумулятивный бэкап, который резервирует все блоки, измененные после последнего инкрементного бэкапа на уровне 0

Инкрементные бэкапы являются дифференциальными по умолчанию.

Примечание:
Кумулятивные резервные копии предпочтительнее дифференциальных, когда время восстановления более важно чем дисковое пространство, поскольку во время восстановления каждое дифференциальный бэкап должен быть применен последовательно. Используйте кумулятивные инкрементные резервные копии вместо дифференциальных, если имеется достаточно дискового пространства, чтобы сохранить кумулятивные инкрементные бэкапы.

Размер файла бэкапа зависит исключительно от количества модифицированных блоков и уровня инкрементного резервного копирования.

Дифференциальные Инкрементные Бэкапы

В дифференциальном бэкапе уровня 1 RMAN резервирует все блоки, которые изменились, начиная с последнего кумулятивного или дифференциального инкрементного бэкапа на уровне 1 или 0. RMAN определяет, какой бэкап уровня 1 был последний раз и резервирует все блоки, модифицированные после этого бэкапа. Если никакой бэкап уровня 1 не доступен, RMAN копирует все блоки, измененные начиная с бэкапа уровня 0.

Следующая команда выполняет дифференциальный инкрементный бэкап уровня 1 базы данных:

RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;

Если бэкап уровня 0 не доступен, то поведение зависит от установки режима совместимости. Если совместимость >=10.0.0, RMAN копирует все блоки, измененные с момента создания файла и сохраняет результаты как бэкап уровня 1. Другими словами, во время инкрементного резервного копирования берется SCN, равный SCN создания файла. Если совместимость <10.0.0, RMAN генерирует бэкап уровня 0 содержимого файла во время резервного копирования, чтобы не было противоречия с предыдущими релизами.

Рисунок 1 Дифференциальные Инкрементные Бэкапы (по умолчанию)

В примере, показанном на Рисунке 1, происходит следующее:

  • В воскресенье
    Инкрементный бэкап уровня 0 резервирует все блоки, которые когда-либо использовались в этой базе данных.
  • С понедельника – по субботу
    Каждый день с понедельника до субботы дифференциальный инкрементный бэкап уровня 1 резервирует все блоки, которые изменились, начиная с последнего инкрементного бэкапа на уровне 1 или 0. Так, бэкап в понедельник копирует блоки, измененные начиная с воскресного бэкапа уровня 0, бэкап во вторник копирует блоки, измененные начиная бэкапа уровня 1 в понедельник 1 и т.д.
  • Цикл повторяется в течение следующей недели.

Кумулятивные Инкрементные Бэкапы

В кумулятивном бэкапе уровня 1 RMAN резервирует все блоки, которые использовались, начиная с последнего инкрементного бэкапа уровня 0. Кумулятивные инкрементные бэкапы уменьшают работу, необходимую для восстановления, гарантируя, что Вам потребуется только один инкрементный бэкап от любого определенного уровня. Однако, кумулятивные резервные копии требуют больше пространства и времени, чем дифференциальные бэкапы, поскольку они копируют работу, сделанную предыдущими бэкапами на том же самом уровне.

Следующая команда выполняет кумулятивный бэкап уровня 1 базы данных:

BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE; # блоки, измененные с уровня 0

Рисунок 2 Кумулятивные Инкрементные Бэкапы

В примере, показанном на Рисунке 2, происходит следующее:

  • В воскресенье
    Инкрементный бэкап уровня 0 резервирует все блоки, которые когда-либо использовались в этой базе данных.
  • С понедельника – по субботу
    Кумулятивный инкрементный бэкап уровня 1 копирует все блоки, измененные начиная с последнего бэкапа уровня 0. Поскольку последний бэкап уровня 0 создавался в воскресенье, бэкап уровня 1 каждый день с понедельника до субботы резервирует все блоки, которые измененились начиная с воскресного бэкапа.
  • Цикл повторяется в течение следующей недели.

Простая Стратегия Инкрементного резервного копирования

Выберите схему резервирования согласно приемлемому MTTR (сокр. от mean time to recover – среднее время для восстановления). Например, можно реализовать трехуровневую схему резервирования так, чтобы полный или бэкап уровня 0 брался ежемесячно, кумулятивный бэкап уровня 1 брался еженедельно и дифференциальный бэкап уровня 1 брался ежедневно. В этой схеме Вам никогда не придется применять запас журналов транзакций более чем за один день для полного восстановления.

Решая, как часто брать полный или бэкап уровня 0, используйте хорошее эмпирическое правило: следует брать новый бэкап уровня 0 каждый раз, когда 50 % или более данных изменились. Если темп изменения вашей базы данных предсказуем, то можно наблюдать за размером инкрементных резервных копий, чтобы определить, когда следует брать очередной бэкап уровня 0. Следующий запрос выводит на экран количество блоков, записанных в набор резервирования для каждого файла данных с по крайней мере 50 % его зарезервированных блоков:

SELECT FILE#, INCREMENTAL_LEVEL, COMPLETION_TIME, BLOCKS, DATAFILE_BLOCKS 
  FROM V$BACKUP_DATAFILE 
  WHERE INCREMENTAL_LEVEL > 0 
  AND BLOCKS / DATAFILE_BLOCKS > .5 
  ORDER BY COMPLETION_TIME;

Сравните количество блоков в дифференциальных или кумулятивных резервных копиях с базовым бэкапом уровня 0. Например, если Вы создаете только кумулятивные резервные копии уровня 1, то после взятия очередного нового бэкапа уровня 1 с размером приблизительно в половину размера базового бэкапа уровня 0, берите новый бэкап уровня 0.

Спасибо за внимание! До скорых встреч на страницах сайта okITgo.ru.

Рубрика: Oracle

Ваш отзыв