Приложение 4. Как выполнять ремонт базы данных
Приложение 4. Как выполнять ремонт базы данных
Вам придется потратить много сил для разрушения базы данных Firebird - система спроектирована так, чтобы выдержать тяжелые удары, которые ломают базы данных в других системах. Вы узнаете о том, что база данных разрушена, если вы не сможете с ней соединиться, не сможете выполнить ее резервное копирование или когда сообщение в протоколе firebird или от gbak -b сообщает вам, что существуют нарушения в базе, или появляются сообщения об ошибке контрольной суммы.
Если вы хотите понять, как могут появиться нарушения в вашей базе данных, вернитесь к разд. "Как разрушить базу данных Firebird" в конце главы 15[166]
Восемь шагов восстановления
В этом приложении описаны шаги, которые вам нужно выполнить при использовании инструментов командной строки gfix или gbak, чтобы попытаться восстановить неповрежденные данные при некоторых видах разрушения. Однако имейте в виду, что существуют отдельные виды разрушения сервера, которые такая процедура не может исправить. См. в приложении 12 ресурсы, доступные для использования в этих случаях.
Для применения gfix и gbak в этой процедуре сделайте текущим каталог Firebird /bin на серверной машине.
Получение исключительного доступа
Первым делом, что нужно выполнить, когда появилось сообщение о разрушении, - это отключить всех пользователей от системы. Не позволяйте никому пытаться продолжить работу. Продолжение попыток использования базы данных может сделать восстанавливаемую базу данных невосстанавливаемой.
Проверка базы данных требует исключительного доступа к базе данных, иначе вы увидите следующее сообщение при попытке запустить gfix:
OBJECT database_name IS IN USE [Объект имя-базы-данных используется]
To же сообщение может появиться, если вы единственный пользователь, но имеете другую активную транзакцию. Например, утилита isql использует до трех параллельных транзакций. Остановив isql и другие инструменты администратора, вы можете выполнять работу.
Для получения исключительного доступа выполните останов базы данных, находясь пользователем SYSDBA или пользователем, являющимся владельцем базы данных. Подробности см. в главе 39. Например, следующая команда заблокирует все другие попытки соединения с базой данных и приведет к ее останову через две минуты:
gfix -sh -force 120 -user SYSDBA-password yourpword