Выбрать главу

Для получения исключительного доступа выполните останов базы данных, находясь пользователем SYSDBA или пользователем, являющимся владельцем базы данных. Подробности см. в главе 39. Например, следующая команда заблокирует все другие попытки соединения с базой данных и приведет к ее останову через две минуты:

gfix -sh -force 120 -user SYSDBA-password yourpword

Создание копии работающего файла

В этот момент gbak не может выполнить резервное копирование базы данных, содержащей разрушенные данные. Поскольку вы имеете исключительный доступ, выполните копирование средствами файловой системы (а не с помощью gbak) файла базы данных. В POSIX используйте команду ср, а в Windows команду сору или эквивалентное действие копировать/вставить в графическом интерфейсе. Убедитесь, что в этот момент нет пользователей, соединенных с базой данных, - даже вас!

Например, в Windows, находясь в каталоге базы данных, выполните:

copy damaged.fdb repaircopy.fdb

! ! !

ВНИМАНИЕ! Даже если вы можете восстановить исправленную базу данных, которая сообщала об ошибках контрольных сумм, может оказаться сложным определить объем потерянных данных. Если это важно, вы можете выбрать более раннюю копию, в которой вы сможете отыскать отсутствующие данные после проверки и починки разрушенных структур вашей текущей базы данных.

. ! .

Работайте с repaircopy.fdb.

Выполнение проверки

В первую очередь используются переключатели -v[alidate] и -f[ull] утилиты gfix для проверки структур записей и страниц. Процесс проверки сообщает о разрушенных структурах и освобождает неназначенные фрагменты записей или "осиротевших страниц" (т. е. страниц, которые выделены, но не назначены никаким структурам данных).

gfix -v -full {путь}repaircopy.fdb -user SYSDBA -password yourpword

Переключатель -n[o update] может быть использован вместе с -v для проверки и выдачи сообщений о разрушенных или не назначенных структурах без попыток их исправить:

gfix -v -n {путь}repaircopy.fdb -user SYSDBA -password yourpword

Если постоянно появляются ошибки контрольных сумм в процессе такого способа проверки, то используйте переключатель -i[gnore], чтобы проверка их игнорировала:

gfix -v -n -i {путь}repaircopy.fdb -user SYSDBA -password yourpword

Исправление разрушенных страниц

Если gfix сообщает о поврежденных данных, то следующий шаг - исправить (или починить) базу данных, убирая такие структуры.

Переключатель -m[end] отмечает разрушенные записи как недоступные, следовательно, они будут пропущены в процессе последующего резервного копирования. Включите переключатель -f[ull], чтобы запрос исправлял все разрушенные структуры, и переключатель -i[gnore], чтобы обходить ошибки контрольных сумм в процессе исправления.

gfix -mend -full -ignore {путь}repaircopy.fdb -user SYSDBA -password yourpword

или короче:

gfix -m -f -i {nyTb}repaircopy.fdb -user SYSDBA -password yourpword

Проверка после исправления -mend

После того как команда с переключателем -mend завершит свою работу, опять выполните

gfix -v -full {путь}repaircopy.fdb -user SYSDBA -password yourpword для проверки, остались ли еще разрушенные структуры.

Очистка и восстановление базы данных

Затем выполните полное резервное копирование и восстановление базы данных с использованием gbak, даже если все еще появляются сообщения об ошибках. Добавьте переключатель -v[erbose], чтобы видеть подробности. В своей простейшей форме команда резервного копирования может быть (все в одной команде):

gbak -b -v -i {путь}repaircopy.fdb {путь}repaircopy.fbk -user SYSDBA -password yourpword

Сложности в процессе резервного копирования

Проблемы сборки мусора могут привести к аварийному завершению gbak. Если такое произошло, добавьте переключатель -[g], чтобы сообщить, что не надо собирать мусор.

gbak -b -v -i -g {путь}repaircopy.fdb {путь}repaircopy.fbk -user SYSDBA -password yourpword

Если есть разрушения в версиях записей, связанных с зависшей транзакцией, вам может понадобиться добавить переключатель -limbo:

gbak -b -v -i -g -1 {путь}repaircopy.fdb (путь)repaircopy.fbk -user SYSDBA -password yourpword

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

Теперь создайте новую базу данных из резервной копии с переключателем -v[erbose], чтобы наблюдать, что восстанавливается:

gbak -create -v {путь}repaircopy.fbk (путь)reborn.fdb -user SYSDBA -password yourpword

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

Убедитесь, что восстановление базы данных разрешило проблемы, выполнив проверку восстановленной базы данных с использованием переключателя -n[o update]:

gfix -v -full {путь}reborn.fdb -user SYSDBA -password yourpword

Если существуют проблемы с восстановлением, вам может быть придется рассмотреть возможности новых попыток с использованием других переключателей gbak для уменьшения источников этих проблем, например:

* переключатель -i[nactive] уменьшит проблемы с разрушенными индексами за счет восстановления без активизации каких-либо индексов. Потом вы сможете активизировать индексы вручную по одному за раз, пока не будет найден проблемный индекс;

* переключатель -o[ne_at_a_time] будет восстанавливать и подтверждать каждую таблицу одну за другой, позволяя вам восстанавливать хорошие таблицы и пропуская проблемные.

Как поступать, если проблемы остались

Если предыдущие шаги не дают результатов, но вы все еще в состоянии соединяться с разрушенной базой данных, можно переслать структуры таблиц и данных из разрушенной базы данных в новую, используя инструмент qli (Query Language Interpreter). Этот инструмент находится в вашем каталоге Firebird /bin, а руководство по его синтаксису в формате Adobe PDF может быть загружено с http:// www.ibphoenix.com/downloads/qIi_syntax.pdf. qli является старым инструментом, однако он все еще работает, когда вам понадобится. Поищите в Интернете, как выполнить перекачку данных между базами данных с использованием qli.

В приложении 5 есть ссылки на инструменты починки базы данных, которые, возможно, помогут вам в восстановлении разрушенной базы данных.

Существуют компании, которые предоставляют сервис по восстановлению и починке сильно разрушенных баз данных Firebird и InterBase - хотя во время написания этой книги автор услышала о базе данных Firebird, которая была разрушена так, что для ее исправления требовался чародей!

Приложение 5. Инструменты администрирования

Одной из "приятных проблем" новичка в использовании Firebird является выбор инструментов. Почему? Потому что сообщество Firebird имеет огромное количество прекрасных инструментов, как коммерческих, так и свободно распространяемых. Чуть ли не все коммерческие продавцы предоставляют свободные пробные версии, так что вашей самой большой проблемой является выбор такого инструмента, который лучше всего подходил бы вам.

Графические инструменты администратора

Следующий список является лишь выборкой некоторых наиболее популярных элементов. Полный список см. на http://www.ibphoenix.com/main.nfs?a=ibphoenix &page=ibp_admin_tooIs.

Database Workbench

Database Workbench может соединяться с любым сервером Firebird на любой платформе. Он имеет полный визуальный интерфейс, браузер метаданных и зависимостей, средства отладки хранимых процедур, инструменты миграции данных, импорт/экспорт, редактор BLOB, управление пользователями и полномочиями, генератор тестовых данных, поиск метаданных, репозиторий фрагментов кода, средства печати метаданных, автоматическую генерацию триггеров для автоинкрементных ключей, не чувствительный к регистру поиск столбцов и многое другое.