При задании переключателя -se[rvice] вы можете вызвать Менеджер сервисов Firebird с удаленного сервера и заставить gbak передать выполнение вашей команды серверу. В этом случае локализация базы данных и файлов копии должна осуществляться с точки зрения размещения с серверной машины. Каталог, из которого была запущена программа gbak, не действует при копировании через Менеджер сервисов. Подробнее о Менеджере сервисов см. далее разд. "Использование gbak с Менеджером сервисов Firebird".
Решение вопросов безопасности
Хорошей мерой предосторожности является присваивание атрибутов только для чтения вашим файлам копии на уровне файловой системы после их создания для предотвращения их случайной или намеренной перезаписи.
Вы можете защитить ваши базы данных от воровства в системах UNIX и Windows NT/2000/XP, поместив файлы копии в каталоги с ограниченным доступом.
! ! !
ВНИМАНИЕ! Файлы копий, которые хранятся в системах Windows 95/98/ME или в областях со свободным доступом в других системах, являются совершенно беззащитными.
. ! .
Возвращаемые коды и ответная реакция
Копирование базы данных, выполняемое под Windows, возвращает код 0 при успешном завершении и 1 при ошибках. Если встретилась ошибка, посмотрите файл firebird.log (interbase.log в версии 1.0.x). Для получения полного протокола копирования используйте переключатели -у и -v.
Выполнение восстановления
Синтаксис восстановления базы данных из копии следующий.
POSIX:
$] ./gbak {-c[reate] | -r[eplace_database] } <режимы> исходная-копия база-данных или
$] /opt/firebird/bin/gbak {-c[reate] | -r[eplace_database] } <режимы> исходная-копия база-данных
Windows:
C:\Program Files\Firebird\Firebird_1_5\bin> {-c[reate] | -r[eplace database] } <режимы> исходная-копия база-данных
ИЛИ
С: \> C:\Program Files\Firebird_1_5\bin\gbak {-c[reate] | -r[eplace database] } <режимы> исходная-копия база-данных
Аргументы gbak для восстановления
исходная-копия- полный путь и имя файла копии gbak. Если копия содержит несколько файлов, укажите только первый (первичный) файл gbak. В POSIX исходной- копией может быть также stdin, в этом случае gbak читает свои входные данные из стандартного ввода (обычно канал).
База-данных- полный путь и имя файла восстанавливаемой базы данных. В Firebird 1.5 это может быть алиас. База может быть одним файлом или множеством файлов. Возможные варианты синтаксиса баз данных обсуждаются в следующих разделах этой главы.
Режимы могут быть допустимой комбинацией переключателей из табл. 38.2. Переключатели нечувствительны к регистру.
Переключатели восстановления
В табл. 38.2 перечисляются и описываются переключатели, которые могут быть использованы в gbak при выполнении восстановления базы данных.
Таблица 38.2. Переключатели gbak для выполнения восстановления базы данных
Переключатель |
Эффект |
-c[reate database] |
Восстанавливает базу данных в новый файл |
-b[uffers] |
Устанавливает значение по умолчанию для размера кэша (в страницах базы данных) для восстанавливаемой базы данных |
-i[nactive] |
Делает неактивными индексы в восстанавливаемой базе данных. Полезно при повторной попытке восстановления, когда первая попытка оказалась неудачной из-за ошибок индекса |
-k[ill] |
Подавляет создание ранее определенных теневых копий (shadow)[152] |
-mo[de] {read write | read_only} |
Задает, будет ли восстанавливаемая запись только для чтения или для чтения/записи. Возможные значения read_write (по умолчанию) и read only |
-n[o validity] |
Удаляет ограничения проверки данных из восстанавливаемых метаданных. Используйте, если вам нужно повторить попытку восстановления, если первая попытка оказалась неудачной из- за нарушений ограничения CHECK |
-o[ne at a time] |
Восстанавливает одну таблицу за один раз. Может быть использовано при частичном восстановлении, если база данных содержит разрушенные данные |
-p[age size] n |
Устанавливает новый размер страницы в n байтах (1024, 2048, 4096, 8192 или 16 384). Размер по умолчанию 4096. Размер страницы 16 384 байт невозможен, если файловая система не поддерживает 64-битовый ввод/вывод |
-pa[ssword] пароль |
Проверяет пароль вместе с -u[ser] перед попыткой создания базы данных |
-r[eplace database] |
Восстанавливает базу данных, заменяя существующий файл с тем же именем, если он существует; если нет, создает новый файл с указанным именем |
-se[rvice] сервис |
Создает восстанавливаемую базу данных на хосте, где располагаются файлы копии. Используйте этот переключатель, если вы запустили gbak с удаленного узла и хотите восстановить из копий, размещенных на том же сервере, что и база данных. Это вызывает Менеджер сервисов Firebird на серверной машине, экономит время и сетевой трафик. См. подробности в разд. "Использование gbak с Менеджером сервисов Firebird" |
-u[ser] имя |
Проверяет пользователя имя вместе с -pa[ssword] перед попыткой создания базы данных |
-use_[all space] |
Восстанавливает базу данных со 100-процентным заполнением каждой страницы данных вместо значения по умолчанию 80-процентное заполнение. Это идеал для баз данных только для чтения, поскольку им не надо иметь зарезервированное пространство на страницах базы данных для хранения версий строк при добавлении, изменении или удалении. Чтобы вернуть восстановленную базу данных к обычному коэффициенту заполнения, используйте gfix с переключателем -use (т. е. gfix -use reserve) |
-v[erbose] |
Выводит подробные сведения о том, что выполняет gbak. Вы можете по желанию вывести этот текст в файл при использовании переключателя -у |
-y [ файл | suppress output] |
Направляет сообщения в файл, задающий полный путь к файлу, который вы хотите создать. Вызовет ошибку, если указанный файл уже существует. Если восстановление завершится нормально и не был использован переключатель -v[erbose], то этот файл будет пустым. suppress_output может быть использовано вместо "молчаливого" восстановления, при котором не выводится вообще никаких сообщений |
-z |
Показывает версии gbak и сервера Firebird |
Восстанавливать или создавать?
Понятие "восстановление базы данных" при ее перезаписывании родилось в годы, когда дисковое пространство было дороже, чем прием на работу эксперта по реконструкции разрушенной базы данных или формирование группы персонала по данным для восстановления системы компании по бумажным носителям.
Короче говоря, перезаписывание базы данных, чья жизнеспособность вас сильно волнует, не рекомендуется ни при каких условиях. Поразмышляйте о таких тягостных фактах:
* если восстановление завершается с ошибкой, переписываемая база данных навсегда умрет- и дела пойдут плохо при любом восстановлении;
* восстановление поверх существующей базы данных, которая находится в использовании, приведет к ее разрушению;
* возможность пользователей соединяться с частично восстановленной базой данных также приведет к ее разрушению.
! ! !
СОВЕТ. "Горячее" копирование - нормально. "Горячее" восстановление - большая глупость.
. ! .
Если вы все-таки, несмотря на риск, решили использовать -r[epiace_database], то вы можете делать это, если при соединении будете предоставлять учетные данные владельца базы данных или пользователя SYSDBA. Любой пользователь, описанный на сервере, может восстановить базу данных с использованием режима -c[reate]. Рассмотрите последствия этого факта и примите соответствующие меры предосторожности, чтобы уберечь ваши копии от чужих рук.
152
Будьте внимательны, -k обеспечивает не только восстановление БД без shadow, но и удаление существующих shadow с именами, сохраненными в файле резервной копии. Этот баг исправлен только в Firebird 2.0 (см. баг № 1122344 в багтрекере проекта Firebird: sf.net/projects/firebird). - Прим. науч. ред.