* Ошибки записи операционной системы или оборудования. Ошибки записи обычно создают проблемы для целостности базы данных. Они могут привести к разрушению или потере структур данных, таких как страницы базы данных и индексы. В худшем случае такие разрушения структур данных могут сделать подтвержденные данные нечитаемыми. Иногда проверка может помочь найти такие разрушенные фрагменты и удалить их.
Когда проверять базу данных
Вы должны проверять базу данных:
* всякий раз при неуспешном копировании базы данных;
* всякий раз, когда приложение получает сообщение об ошибке "разрушена база данных";
* периодически в качестве регулярной процедуры для отслеживания разрушения структур данных или нераспределенного пространства;
* каждый раз, когда вы подозреваете, что данные разрушены.
Утилита командной строки gbak может быть использована вместе с gfix для выполнения последовательной проверки и починки данных.
Выполнение проверки базы данных
Пров базы данных требует исключительного доступа к базе данных. Без исключительного доступа вы получите сообщение об ошибке:
OBJECT имя-базы-данных IS IN OSE
Для проверки базы данных просто введите команду:
gfix -v
Проверка будет молча отыскивать и освобождать неназначенные страницы или нераспределенные структуры, которые она найдет. Она будет сообщать о любых разрушенных структурах, но не будет пытаться их исправлять. Для получения протокола об ошибках gfix, но без попыток освобождения пространства введите переключатель -n[o_update]:
gfix -v -n
Вы можете заставить проверку игнорировать ошибки контрольных сумм, добавив переключатель -i [gnore]:
gfix -v -i
! ! !
ПРИМЕЧАНИЕ. Даже если вы сможете восстановить исправленную базу данных, которая сообщала об ошибках контрольных сумм, объем потерянных данных трудно будет определить. Если это вас беспокоит, вы можете восстановить вашу базу данных с более ранней копии.
. ! .
Восстановление разрушенной базы данных
Если вы подозреваете, что ваша база данных разрушена, важно точно придерживаться последовательности шагов восстановления, чтобы избежать дальнейших разрушений. Подробное описание рекомендуемой процедуры восстановления см. в приложении 4[157].
Восстановление транзакций
Утилита gfix предоставляет инструменты для восстановления зависших транзакций 2РС - транзакций с несколькими базами данных после потери соединения с одной из них.
Двухфазное подтверждение
Транзакция, которая используется в нескольких базах данных Firebird, подтверждается в два этапа, или в две фазы. Такое двухфазное подтверждение гарантирует, что если транзакция не может завершить изменения во всех используемых базах данных, она не будет изменять ни одну из них.
На первой фазе двухфазного подтверждения Firebird подготавливает субтранзакцию для каждой базы данных, вовлеченной в операции транзакции, и записывает соответствующие изменения в каждую базу данных.
На второй фазе, следуя точно в том же порядке, что и при их подготовке и записи, Firebird отмечает каждую подтранзакцию как подтвержденную.
Зависшие (limbo) транзакции- это подтранзакции, которые остались неразрешенными, если возникли какие-то проблемы в соединениях с одной или более базами данных в процессе выполнения второй фазы двухфазного подтверждения, например, ошибки сети или отключение питания. Сервер не может сказать, должны ли зависшие транзакции подтверждаться или следует выполнить их откат.
Следовательно, некоторые записи в базе данных могут оказаться недоступными, пока явно не будут выполнены те действия по разрешению зависших транзакций, с которыми они связаны.
Восстановление транзакции
При использовании gfix, вы имеете множество режимов для получения информации и для разрешения зависших транзакций после ошибок двухфазного подтверждения. Процесс идентификации зависших транзакций и их подтверждение либо откат называется восстановлением транзакций.
Вы можете попытаться восстановить сразу все зависшие транзакции или вы можете выполнять восстановление транзакции за транзакцией, используя идентификатор каждой индивидуальной транзакции.
Для получения списка всех зависших транзакций с индикацией, что произойдет с каждой, если было запрошено автоматическое двухфазное восстановление, используйте переключатель -l[ist]:
gfix -l база-данных
Используйте переключатель -p[rompt] вместе с -l[ist] для получения от gfix списка зависших транзакций одну за другой и выдачи вам запроса на выполняемое действие:
COMMIT или ROLLBACK:
gfix -l -р база-данных