Использование утилиты nbackup для копирования базы данных между серверами
Стандартный способ переноса БД включает создание архивной копии утилитой gbak и восстановление из нее рабочей базы на другом сервере. Однако, если база данных имеет значительный размер (скажем, от 20 Гб и более), восстановление из архива может занимать весьма длительное время. Альтернативный способ -- простое копирование файла базы данных. Как известно, копировать файл из-под работающего сервера нельзя -- можно получить битую базу. Остановить сервер на большом предприятии тоже проблематично. Здесь на помощь приходит утилита nbackup из стандартной поставки сервера Firebird.
Первым делом следует заблокировать файл базы данных:
nbackup -L <database> -U sysdba -P masterkey
С этого момента файл можно свободно копировать. Все изменения с момента блокировки, если таковые будут, Firebird запишет в отдельный дельта файл, который нас не интересует. По окончании копирования базу ОБЯЗАТЕЛЬНО следует разблокировать командой:
nbackup -N <database> -U sysdba -P masterkey
Далее, переносим файл базы данных на другой сервер. Так как это копия заблокированной базы, перед использованием разблокируем ее командой:
nbackup -F <database> -U sysdba -P masterkey
Стоит заметить, что данная утилита не работает по сети, т.е. должна вызываться на том же компьютере, где расположен файл базы данных.
Естественный вопрос: в чем различие между командами разблокирования -N и -F? В первом случае, дополнительно, дельта файл сливается с основным файлом базы данных. Во втором -- база просто переводится в рабочий режим.
Использование команды ALTER DATABASE
Если утилиты nbackup нет под рукой, но есть возможность выполнять SQL команды, например, через окно SQL редактора Гедымина, то заблокировать файл базы данных для последующего копирования можно командой:
alter database begin backup
После окончания копирования следует выполнить команду:
alter database end backup
Проверка файла базы данных на повреждения
Небольшой минус копирования файла в отсутствии проверки базы данных на повреждения, в отличие от упоминавшейся выше стандартной последовательности бэкапа-восстановления. Выполнить проверку можно вручную командой:
gfix -v -full <database> -user sysdba -pas masterkey
При обнаружении ошибок следует выполнить процедуру восстановления, причем не только копии, но и основной базы данных.