Шрифт:
Интервал:
Закладка:
Термин "отключение Forced Writes" означает переключение поведения по выводу данных с синхронного на асинхронное.
Синтаксис этой команды:
gfix -w[rite] {sync ! async} Для включения Forced Writes введите: gfix -w sync d:dataaccounts.fdb Для отключения Forced Writes введите:
gfix -w async d:dataaccounts.fdb
Firebird инсталлируется в Windows NT/2000/XP и Linux с включенным режимом Forced Writes. В очень надежной среде с надежной поддержкой бесперебойного питания (UPS) администратор базы данных может отключить Forced Writes для сокращения операций ввода/вывода и улучшения производительности. Когда отключается Forced Writes в менее надежных средах, база данных становится чувствительной к потере данных и даже к их разрушению в случае неуправляемого отключения.
Forced Writes неприменимо в Windows 95. В серверах Windows 98 и ME вы никогда не должны отключать Forced Writes.
Отключение Forced Writes в серверах WindowsОперационные системы Windows менее надежны, чем другие системы в отношении записи на диск кэша. Это проявляется в том, что приложения не могут явно запросить систему Windows записать кэш на диск, система может отложить все выводы на диск до того момента, как файл базы данных будет закрыт.
* Firebird 1.0.x: если Forced Writes не задается для сервера Windows, работающего 24/7 (24 часа, 7 дней в неделю), то запись на диск может никогда не произойти.
* Firebird 1.5: были добавлены новые установки конфигурации для записи буферов кэша на диск в Windows. См. параметры MaxUnfiushedwrites и MaxUnflushedWriteTime (firebird.COnf) В главе 36.
Системное восстановление в Windows ME и XPWindows ME вместе с XP Ноте и Professional Edition имеет возможность, называемую системным восстановлением, которая вызывает копирование самой файловой системы в файлы с некоторыми суффиксами каждый раз, как происходят операции ввода/вывода. Системное восстановление не является заменой Forced Writes[156].
Конвертированные базы данных InterBaseВам следует знать, что база данных Firebird, которая начала свою жизнь в InterBase 6.x (коммерческом или с открытыми текстами), создана с отключенным режимом Forced Writes по умолчанию.
Запрос версии сервера Firebird
Переключатель -z (без параметров) показывает версию gfix и сервера Firebird, инсталлированного на сервере.
Вот синтаксис:
gfix -z
Проверка и починка данных
В повседневных операциях в базе данных иногда происходят события, создающие некоторые проблемы для структуры базы данных.
* Ненормальное завершение сервера. Ненормальное завершение не влияет на целостность базы данных. Однако если Firebird уже назначил страницу данных для неподтвержденных изменений, запрошенных клиентом, эта страница становится бесхозной, "осиротевшей". Поскольку такие страницы являются вполне безобидными, они лишь занимают дисковое пространство, которое должно быть возвращено в свободное пространство. Проверка может отыскать и освободить это пространство.
* Ошибки записи операционной системы или оборудования. Ошибки записи обычно создают проблемы для целостности базы данных. Они могут привести к разрушению или потере структур данных, таких как страницы базы данных и индексы. В худшем случае такие разрушения структур данных могут сделать подтвержденные данные нечитаемыми. Иногда проверка может помочь найти такие разрушенные фрагменты и удалить их.
Когда проверять базу данных
Вы должны проверять базу данных:
* всякий раз при неуспешном копировании базы данных;
* всякий раз, когда приложение получает сообщение об ошибке "разрушена база данных";
* периодически в качестве регулярной процедуры для отслеживания разрушения структур данных или нераспределенного пространства;
* каждый раз, когда вы подозреваете, что данные разрушены.
Утилита командной строки 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 -р база-данных
Автоматическое двухфазное восстановлениеПоскольку зависшие транзакции являются результатом либо ошибок при подтверждении, либо ошибок при откате, сервер знает, как должна каждая из них заканчиваться. Следовательно, автоматическое восстановление просто является способом подтверждения, что вы хотите, чтобы утилита gfix продолжала осуществлять первоначальное намерение, каким оно было, когда двухфазное подтверждение было прервано.
Переключатель-t[wo_phase] {ID | all} инициирует автоматическое двухфазное восстановление.
Используйте all для выполнения двухфазного восстановления всех зависших транзакций:
gfix -t all база-данных
Используйте ID для ввода идентификатора одной транзакции, для которой вы хотите выполнить двухфазное восстановление:
gfix -t nnnnnn база-данных
Здесь nnnnnn - идентификатор транзакции.
Задание подтверждения или откатаЧтобы попытаться разрешить зависшие транзакции их подтверждением, используйте переключатель-c[ommit] {ID | all}. Для восстановления всех зависших транзакций таким способом введите:
gfix -с all база-данных
Для разрешения одной зависшей транзакции попыткой ее подтверждения введите:
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование