ПросмотрWhat links here

Копирование и восстановление базы данных в InterBase / Firebird

Внимание! Настоящая статья предназначена для опытных пользователей и администраторов сети!

Базу данных рекомендуется регулярно копировать (back up) и восстанавливать (restore). При этом происходит переупорядочивание индексов, сборка мусора, более компактное использование дискового пространства. В процессе восстановления базы данных с резервной копии вы можете изменить размер страницы, количество и размер файлов базы данных. Для этих целей может использоваться как утилита командной строки gbak, так и программа графического интерфейса, например: IBExpert или BlazeTop (он же SQLHammer). Вы также можете написать собственную программу для выполнения копирования и восстановления базы данных.

Базу данных может копировать только владелец базы данных или пользователь SYSDBA.

Восстанавливать базу данных с резервной копии может любой пользователь. Следует отметить, в технической документации упоминается,что только владелец базы данных или пользователь SYSDBA могут восстанавливать копию поверх существующей базы данных. Однако, практический опыт показывает, что восстанавливать копию поверх существующей базы данных может любой пользователь.

Если база данных используется в сети несколькими клиентами, то во избежание разрушения данных бывает полезным выполнить ее останов (shut down) перед восстановлением, чтобы закрыть доступ клиентам к базе данных на время выполнения операции. После выполнения необходимых действий базу данных можно опять перевести в оперативное состояние (on line).
В данной статье мы рассмотрим копирование и восстановление баз данных при помощи утилиты gbak и программы IBExpert. Мы также напишем собственную программу для выполнения этих действий, используя компоненты FIBPlus .

Копирование и восстановление базы данных утилитой командной строки gbak

Создание резервной копии

Для выполнения копирования базы данных утилитой gbak нужно вызвать окно командной строки и перейти в каталог \Bin корневого каталога инсталляции сервера базы данных, например:

c:
cd \Program Files\Firebird\Firebird_1_5\Bin

Запустите утилиту gbak :

gbak -backup_database -verbose -user wizard -password master d:\BestDatabase\work.fdb
d:\BestDatabase\work.fbk

Переключатели утилиты для создания резервной копии представлены в табл. 1.

Внимание. В документации по InterBase 6 неверно указаны сокращения для некоторых переключателей утилиты.

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

Переключатель Назначение
-b[ackup_database] Задает операцию резервного копирования базы данных.
-pas[sword] Пароль пользователя.
-user Идентификатор пользователя.
-v[erbose] Задает отображение утилитой протокола выполняемых ею действий.
-se[rvice] Копирует базу данных на ту машину в локальной сети, где размещается база данных. При этом используется Service Manager .

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

Следует напомнить, что копировать базу данных может только ее владелец (пользователь, который создал базу данных) или пользователь SYSDBA.

Если требуется создание многофайловой копии, то в конце командной строки перечисляются файлы копии с указанием их размера:
файл размер[k|m|g]
Файл — это полный путь к файлу и имя файла.

Внимание. Операционные системы позволяют в именах файлов и каталогов использовать буквы кириллицы. Однако, это может привести к большим неприятностям при создании, изменении, копировании и восстановлении базы данных. Например, при использовании утилиты isql вы вообще не сможете создать базу данных, указывая путь, который содержит символы кириллицы. В других программах вы можете получать совершенно загадочные сообщения об ошибках, например, что у вас неверное имя или пароль пользователя.

Это связано с особенностями реализации сервера базы данных.

Размер — размер файла копии. Может задаваться в байтах (суффикс отсутствует), в килобайтах (суффикс k), мегабайтах (m) или гигабайтах (g). Минимальный размер 2048 байтов.
Чтобы сделать копию базы данных в два файла, предыдущий пример нужно переписать в виде:
gbak -backup_database -verbose -user wizard -password master d:\BestDatabase\work.fdb
d:\BestDatabase\work.fb1 2k d:\BestDatabase\work.fb2 2k

Здесь размер первого файла копии задается 2К, для второго указан тот же размер. Однако, реально его размер будет расширен до величины, необходимой для хранения всех данных копии.
Для последнего файла копии размер можно не задавать, однако его задание не приводит к ошибке.
Не страшно, если во время копирования базы данных с ней работают другие пользователи. Копироваться будут только подтвержденные изменения данных, которые существовали на момент начала копирования.

Останов и запуск базы данных

Самым глупым занятием, которое можно себе придумать, является восстановление базы данных с резервной копии поверх существующей базы данных в то время, когда с ней работают другие пользователи. Это гарантированно ведет к разрушению базы данных. По этой причине перед восстановлением базы данных с резервной копии необходимо остановить базу данных — перевести ее в состояние shutdown, — выполнить восстановление, а затем сделать базу данных доступной для пользователей.
Останов базы данных можно выполнить при помощи утилиты gfix. Синтаксис останова:
gfix – sh [ ut ] {- at [ tach ] <целое> | - tr [ an ] <целое> | - force <целое>}
Переключатель – attach предотвращает новые соединения с базой.

- tran предотвращает запуск новых транзакций.

- force останавливает базу данных через указанное количество секунд.


В строку также нужно включить имя пользователя (переключатель – user ), пароль (- pa [ ssword ]) и полный путь к первичному файлу базы данных. Например :

gfix –sh –force 10 –user sysdba –pa masterkey d:\BestDatabase\work.fdb


База данных будет остановлена через 10 секунд.

Для перевода базы данных в активное состояние используется gfix – o
[ nline ]. Например :

gfix –online –user sysdba –pa masterkey d:\BestDatabase\work.fdb

В IBExpert также можно выполнить останов и запуск базы данных. Для
останова нужно выбрать в меню Services | Database Shutdown. В
появившемся окне из выпадающего списка выбрать одну из
зарегистрированных в IBExpert баз данных или набрать имя файла базы
данных. Выбрать режим: Forced, Deny Transaction или Deny Attachment,
задать время ожидания и щелкнуть по кнопке Shutdown.

Чтобы перевести базу данных в активное состояние нужно выбрать в
меню Services | Database Online, в появившемся окне выбрать из
списка или ввести вручную имя файла базы данных и щелкнуть по кнопке
Bring Online.

Восстановление базы данных с резервной копии

При восстановлении базы данных с резервной копии можно изменить
размер страниц, а также количество и размеры файлов базы данных, как
первичного, так и вторичных.

Для восстановления базы данных запустите утилиту gbak:

gbak -create_database -verbose -user wizard -password master d:\BestDatabase\work.fbk
d:\BestDatabase\work2.fdb

Здесь мы восстанавливаем базу данных с резервной копии, задавая ей
другое имя — WORK 2. FDB. Чтобы перезаписать существующую базу
данных, нужно первым переключателем указать – r.

Переключатели утилиты для восстановления базы данных с резервной
копии представлены в табл. 2.

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


Переключатель

Назначение
-c[reate_database] Задает операцию восстановления базы данных во вновь
создаваемый файл. Файл базы данных должен отсутствовать на
диске.
-r[eplace_database] Задает операцию восстановления базы данных во вновь
создаваемый файл или при перезаписи существующего файла.
-pas[sword] Пароль пользователя.
-pa[ge_size] n Размер страницы восстанавливаемой базы данных.
-user Идентификатор пользователя.
-v[erbose] Задает отображение утилитой протокола выполняемых ею действий.
-se[rvice] Создает восстанавливаемую базу данных на той машине в локальной сети, где размещается резервная копия. При этом
используется Service Manager .

Последние аргументы в командной строке задают путь к файлам резервных копий и путь к файлам базы данных. Если выполняется восстановление базы данных на другом компьютере в сети, то файлы резервных копий должны размещаться на диске с разрешенным доступом. Для каждого файла восстанавливаемой базы данных (кроме последнего) нужно указать размер файла в страницах базы данных. Минимальным размером является 200 страниц. Если вы укажете меньшее количество, утилита предупредит об этом и все равно выполнит восстановление, установив размер файла 200 страниц.
При восстановлении базы данных из копии, состоящей из нескольких файлов, необходимо указать все файлы копии в том порядке, в каком создавалась копия.

В следующем примере восстанавливается база данных, состоящая из двух файлов. Копия включает в себя три файла:

gbak -c -user wizard -password master –pa 1024 D:\Test\W.fd1
200 D:\Test\W.fb2 D:\Copy\W.fk1 D:\Copy\W.fk2 D:\Copy\W.fk3

При восстановлении задается размер страницы 1024 байта, размер первичного файла устанавливается в 200 страниц.
Если копия базы данных находится на другой машине в локальной сети, то можно использовать переключатель – service, после которого указать имя Service Manager. При использовании протокола TCP / IP для восстановления копии на той же машине в сети можно задать следующее:

gbak -c -verbose -user wizard -password master -service Server:service_mgr d:\BestDatabase\work.fbk d:\BestDatabase\work.fdb

Здесь Server — имя другой машины в сети, где располагается копия и куда нужно восстановить базу данных.
Использование Service Manager является единственным способом создавать копию базы данных на диске с запрещенным доступом средствами gbak.

Материал взят из статьи Александра Бондаря.
Полностью статью можно прочитать по ссылке здесь