Документация Firebird → Документация по Firebird → Утилита nbackup → Блокирование и разблокирование |
Если Вы предпочитаете использовать какие-то другие утилиты для создания резервных копий базы данных или просто делать обычную копию базы данных как резервную, то в игру вступает режим блокировки/разблокировки программы nbackup. «Блокировка» в данном случае означает, что основной файл базы данных временно замораживается, а не невозможность внесения изменений в базу данных. Как и в режиме резервирования, изменения фиксируются во временном файле дельты; при разблокировании файл дельты объединяется с основным файлом базы данных.
В качестве напоминания: nbackup.exe находится в подпапке bin папки, куда установлена СУБД Firebird. Типичными местонахождениями, например, являются C:\Program Files\Firebird\Firebird_2_0\bin (Windows) или /opt/firebird/bin (Linux). У утилиты нет графического интерфейса; Вы запускаете ее из командной строки (или из пакетного файла, или из другого приложения).
Типичным сценарием является следующий:
Блокировать базу данных с помощью параметра -L (Lock):
nbackup [-U <пользователь> -P <пароль>] -L <база_данных>
Теперь можно создать резервную копию, сжать файл базы данных (и много еще чего можно делать с содержимым файла базы данных), используя Ваши любимые программы. Простое копирование файла также допустимо.
Разблокировать базу данных с помощью параметра -N (uNlock):
nbackup [-U <пользователь> -P <пароль>] -N <база_данных>
Последняя команда также приведет к объединению файла дельты, куда записывались все изменения (мета)данных за время блокировки, с основным файлом базы данных.
Созанная резервная копия будет содержать данные, которые являлись актуальными на момент начала блокировки; эти данные не зависят от длительности блокировки, а также от периода времени, прошедшего с начала блокировки до момента начала резервного копирования.
Что применимо к резервированию/восстановлению, также применимо и к блокированию/разблокированию: не используйте блокирование/разблокирование на многофайловых базах данных. Пока ситуация не изменится, не подпускайте nbackup к многофайловым базам данных!
Копия блокированной базы данных является так же блокированной, поэтому Вы не сможете просто использовать копию как рабочую базу данных. В случае, если Ваша исходная база данных повреждена или утеряна, и нужно восстановить базу данных из копии, сделанной Вами самостоятельно, действуйте следующим образом:
Разархивируйте/скопируйте/восстановите файл базы данных с помощью используемых Вами утилит.
Теперь разблокируйте базу данных, но не с параметром -N, а с параметром -F (Fixup):
nbackup -F <база_данных>
Почему существует два параметра командной строки, -N и -F?
При использовании параметра -N сначала определяется наличие любых изменений с момента блокирования базы данных (после использования параметра -L) и производится объединение временного файла дельты и основного файла базы данных. После этого база данных переводится в нормальный режим чтения/записи, а временный файл удаляется.
При использовании параметра -F только изменяется в «нормальное» значение флага состояния самостоятельно восстановленной базы данных.
Итак, Вы используете:
параметр -N после создания резервной копии своими силами (для возвращения флага состояния после ранее выполненного блокирования файла с параметром -L);
параметр -F после самостоятельного восстановления из такой резервной копии.
Не очень хорошо получилось, что последний параметр -F назван по слову Fixup (поправить): его предназначение не исправлять что-либо, а только разблокировать базу данных. Параметр -N (uNlock, разблокировать), с другой стороны, не только разблокирует базу данных, но и вносит в нее некоторые правки (внедряет сделанные изменения в базу данных). Однако, нам придется работать с тем, что есть.
На заметку: то, что здесь будет описано, не является необходимыми знаниями для использования nbackup, но предоставялет Вам дополнительную информацию, которая поможет Вам глубже понять использование различных параметров командной строки.
nbackup -L делает следующее:
соединяется с базой данных;
запускает транзакцию;
выполняет оператор ALTER DATABASE BEGIN BACKUP (этот оператор обсуждался в разделе дополнительной информации по nbackup -B);
завершает (commit) транзакцию;
отсоединяется от базы данных.
nbackup -N делает те же шаги, но выполняет оператор ...END BACKUP на шаге 3.
nbackup -F работает следующим образом:
открывается восстановленный файл базы данных;
в файле базы данных флаг состояния изменяется с блокированного (nbak_state_stalled) в нормальное (nbak_state_normal) состояние;
файл закрывается.
nbackup -F работает на файловом уровне, а поэтому может быть выполнена даже при отсутствии работающего сервера Firebird. Любой из дополнительно указанных параметров -U и -P полностью игнорируются.
Документация Firebird → Документация по Firebird → Утилита nbackup → Блокирование и разблокирование |