Firebird Documentation Index → Утилита 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 Documentation Index → Утилита nbackup → Блокирование и разблокирование |