Функции администратора. Управление памятью. Управление многопользовательским доступом. Экспорт и импорт данных, страница 6

Наконец, прокрутка призвана обеспечить восстановление состояния БД практически до момента сбоя.

4.2. Завершение транзакции

Прежде, чем перейти к рассмотрению механизмов, обеспечивающих восстановление, рассмотрим в общих чертах механизмы выполнения транзакций. Для обеспечения транзакционности по сбоям СУБД применяет либо тактику "списка намерений", либо тактику "исходного образа". В первом случае изменения в БД, выполняемые транзакцией, не заносятся в файл БД немедленно. Страница (блок), в которую вносятся изменения, копируется в отдельный файл, и изменения выполняются в этой копии. Измененные копии страниц БД и составляют список намерений. При завершении транзакции список намерений "актуализируется", то есть, содержащиеся в нем образы страниц заменяют собой соответствующие страницы в БД. При отмене транзакции актуализация не выполняется. Если в процессе актуализации произойдет сбой, то БД останется в нецелостном состоянии: часть страниц будет обновлена, а часть – еще нет. Однако, в этом случае актуализация может быть выполнена вновь с самого начала. Техника исходного образа в основном подобна описанной выше, но здесь изменения записываются в БД немедленно, а во вспомогательный файл копируется исходное содержимое страниц, подвергшихся изменениям. При откате или при рестарте содержимое БД восстанавливается по файлу исходного образа аналогично актуализации списка намерений.

СУБД, поддерживающие распределенные БД, применяют, так называемое "двухфазное" завершение транзакций. Такое завершение состоит в том, что при окончании транзакции вначале опрашивается готовность всех узлов, на которые будут записаны данные – первая фаза. Только если все узлы, участвующие в транзакции, подтвердили готовность принять данные, выполняется вторая фаза - передача на узлы данных.

4.3. Протоколирование транзакций

Для обеспечения восстанавливаемости БД применяется протоколирование транзакций. Все действия по изменению данных и инфраструктуры БД, выполняемые каждой транзакцией, сохраняются в отдельном файле - журнале. Завершение транзакции производится только после того, как вся соответствующая ей информация занесена в журнал и записана на внешнюю память. После завершения транзакции соответствующая ей запись в журнале помечается как завершенная. Записи в журнале, таким образом, позволяют воспроизвести все транзакции, выполненные в системе за период ведения журнала.

Журналы транзакций являются необходимым условием функционирования всех промышленных СУБД. Физически журналом может быть один или несколько файлов или специально выделенное пространство памяти БД. В любом случае различается активный журнал (только один) и архивные журналы (их может быть много). Активный журнал - файл или часть файла, содержащий записи о самых последних транзакциях - еще незавершенных или уже завершенных, но еще не записанных в БД. Архивные журналы содержат записи о более ранних транзакциях. Если для БД не определена возможность восстановления с прокруткой вперед, то в системе ведется только активный журнал. При рестарте системы СУБД просматривает активный журнал, выполняет все транзакции, помеченные в этом журнале, как завершенные, и откатывает все имеющиеся в журнале незавершенные транзакции. Как правило, просмотр и обработка активного журнала выполняется при любом старте автоматически. Для ограничения размера активного файла-журнала разумными пределами СУБД периодически или по запросу выполняет фиксацию контрольной точки - запись всего содержимого кэша на внешнюю память. Контрольная точка гарантирует, что все завершенные транзакции уже записаны в БД.

Архивные журналы транзакций применяются при выполнении прокрутки вперед. При восстановлении таким образом БД восстанавливается по архивной копии, а затем выполняются все транзакции, зарегистрированные в архивных журналах. Прокрутка может закончиться обработкой активного журнала или может быть остановлена раньше.