Журнализация и восстановление БД после сбоя

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: