Эта страница переведена машинным переводом. Читайте английский оригинал. English

Библиотека IBSurgeon

Как реализовать резервное копирование с помощью онлайн-дампа InterBase XE7

Дмитрий Кузьменко, 08-СЕН-2016

InterBase, начиная с версии 2007, поддерживает онлайн-дамп - онлайн-копирование файла базы данных. Вместо gbak -b/-c это позволяет получить готовую к использованию базу данных после копирования, и вам не нужно «восстанавливать» её из резервной копии (которая не является базой данных). Онлайн-дамп очень быстрый, почти как копирование файла операционной системой.

Используйте следующую команду для создания онлайн-дампа базы данных

gbak -d [options] database target

(Полное описание дампа можно найти в документации, Doc\OpGuide.pdf, или здесь)

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

Время первого запуска этой команды - это время сканирования (чтения) исходной базы данных и время записи целевого файла.

Пока целевой файл находится в режиме только для чтения, он связан с файлом базы данных. При первом дампе будет прочитан и скопирован в целевой файл весь файл базы данных. При втором и последующих - в целевой файл будут записаны только изменённые страницы. Это называется «инкрементальным дампом».

Важно! InterBase XE7 при каждой повторной команде дампа (с теми же именами файлов, конечно) читает только изменённые страницы базы данных и записывает их в целевой файл. Другие версии до XE7 читают всю исходную базу данных. Таким образом, производительность различается, и XE7 намного быстрее. Если в исходной базе данных не было изменено ни одной страницы, инкрементальный дамп XE7 займёт ~1 секунду, тогда как InterBase2007-XE3 потратит время, необходимое для чтения всего файла базы данных. Время зависит от размера исходной базы данных и скорости хранилища. Например, если скорость хранилища составляет около 400 МБ/сек, то база данных объёмом 100 ГБ будет просканирована за 250 секунд (4 минуты 10 секунд).

Примечание. InterBase XE7 поддерживает форматы файлов баз данных XE7 (ODS 16), XE/XE3 (ODS 15) и 2009 (ODS 13). Функция интеллектуального сканирования, упомянутая выше, будет работать только с форматом базы данных XE7 (ODS 16).

Если вам нужно перевести целевой файл в режим чтения-записи (обычный режим), используйте команду

gfix target -mode read_write

Но после этого целевой файл теряет связь с базой данных, и последующий запуск gbak -d database target становится невозможен, поскольку целевой файл считается «другой» базой данных.

Если вы хотите полностью перезаписать целевой файл вместо инкрементального дампа, используйте опцию -ov

gbak -d -ov database target

Дамп дампа

Первый дамп дампа будет работать, но последующие инкременты - нет. Например, сначала

gbak -d database target1

здесь мы получаем target1 как полную дамп-копию базы данных в режиме только для чтения.

Далее,

gbak -d target1 target2

Как видите, мы создаём дамп дампа. И да, эта команда скопирует target1 в target2. Оба целевых файла будут в режиме только для чтения. Но если мы повторим эти две команды снова, изменения, которые перешли из базы данных в target1, не будут скопированы в target2. Таким образом, target2 остаётся в состоянии после первой, начальной, копии. И при этом не выводится никаких сообщений об ошибках или предупреждениях.

Поэтому, если вы когда-либо захотите сделать дамп дампа, вам следует использовать только полный дамп

gbak -d -ov target1 target2

Опция -ov обязательна, чтобы гарантировать, что target2 будет записан (и перезаписан) из источника target1.

Схема резервного копирования 1

Пример дампов в разные интервалы времени

gbak -d database target

Выполняется, например, каждый 1 час. Здесь у нас есть рабочая исходная база данных и «резервная» копия target, отстающая на один час.

Кроме того, дополнительно каждые 24 часа мы можем запускать

gbak -d database target2

Здесь у нас есть рабочая база данных, копия target с отставанием в 1 час и копия target2 с отставанием в 24 часа.

Вы можете создавать любое количество дампов из одной базы данных.

Излишне говорить, что целевые дампы можно использовать как базы данных только для чтения для любых целей - отчётности, аналитики и т.д., для задач, которым не нужно обращаться к актуальной базе данных.

Плюсы: Каждый дамп может планироваться независимо.

Минусы: Задержки между самым новым и самым старым дампом.

Схема резервного копирования 2

Последовательный дамп в разные целевые файлы. В этом случае вам нужно настроить какой-либо планировщик (ОС или собственный) для запуска следующих команд по одной за указанный интервал времени

gbak -d database target1

gbak -d database target2

gbak -d database target3

Если вы используете интервал в 1 час между этими командами, у вас будут дампы (резервные копии) следующим образом:

target1 в 12:00, target2 в 13:00, target3 в 14:00. Следующий запуск дампа target1 будет обновлён в 15:00 и так далее. В результате у нас будут копии баз данных за последние 3 часа.

Плюсы: у нас есть дампы за несколько часов, которые близки к исходной базе данных.

Минусы: немного сложно планировать эти команды. Т.е. в этом примере команды дампа необходимо планировать по точному времени:

Дамп в target1 в 00:00, 03:00, 06:00…

Дамп в target2 в 01:00, 04:00, 07:00…

Дамп в target3 в 02:00, 05:00, 08:00…

Резюме

Gbak -d можно использовать для дампа в локальное хранилище и для дампа по сети - поскольку инкрементальный дамп отправляет в целевой файл только изменённые страницы. Таким образом, целевой файл может быть размещён в удалённом сетевом хранилище. Но, конечно, сеть должна иметь хорошую пропускную способность, чтобы быть сопоставимой с локальным хранилищем. В противном случае запись в целевой файл будет медленной.

Онлайн-дамп можно использовать не только как инструмент для создания онлайн-резервной копии базы данных, но и как инструмент для «горизонтального масштабирования» системы, для балансировки нагрузки производственных, отчётных и аналитических приложений.

Хотя вы видите, что онлайн-дамп - это самый быстрый способ получить онлайн-копию базы данных (вместо gbak -b/-c), поскольку дамп работает со страницами, он может пропустить некоторые повреждения страниц, если база данных повреждена. Таким образом, вам всё равно необходимо проверять целостность базы данных с помощью старого доброго gbak -b/-c, но вы можете делать это реже, чем раньше.