Контрольные точки
Теперь перейдем к описанию устройства системы восстановления в ARIES.
Обычно различают три вида сбоев: сбой транзакции, при котором по каким-то причинам транзакция не может завершиться, и ее требуется откатить; сбой системы (мягкий сбой), при котором теряется содержимое буферов основной памяти, и требуется восстановить базу данных на основе журнальной информации; и наконец, жесткий сбой, при котором теряются один или несколько жестких дисков. В последнем случае восстановление происходит на основе архивной копии базы данных и журнала. Здесь мы будем рассматривать только восстановление после мягких сбоев.
Как и в большинстве случаев, восстановление в ARIES основывается на механизме контрольных точек. Контрольные точки нужны для того, чтобы уменьшить тот объем журнала, который нужно будет обработать при восстановлении. Во многих СУБД при установке контрольной точки существенно изменялся режим работы системы. Например, в System R для этого временно прекращалась инициация новых транзакций, система дожидалась завершения работы всех операций всех транзакций и выталкивала буфера основной памяти на диск.
Ясно, что это очень дорогой способ создания контрольных точек. Ведь система фактически становится недоступной для пользователей на существенный промежуток времени. В ARIES контрольные точки устанавливаются асинхронно, не приостанавливая работу СУБД. Более того, установка контрольной точки не требует сброса буферов памяти. Таким образом, пользователи системы не испытывают никаких неудобств, связанных с контрольными точками, которые, кстати говоря, надо устанавливать довольно часто.
Итак, что же представляет собой контрольная точка в ARIES? Это всего лишь множество специфических записей журнала. Создание контрольной точки начинается с добавления в журнал записи begin_chkpt, а завершается добавлением записи end_chkpt. Запись end_chkpt содержит копии таблицы транзакций и таблицы грязных страниц, в также некоторую добавочную информации. Для простоты будем полагать, что все эти сведения содержатся в одной записи. После того, как запись end_chkpt добавлена в журнал, LSN первой записи (begin_chkpt) заносится в специальное место, называемое главной записью (master record). Обычно контрольные точки устанавливаются в процессе нормальной работы, но в принципе возможны случаи, когда требуется установка контрольной точки во время восстановления. Это нужно в том случае, если ожидаются сбои во время работы системы восстановления. Тогда механизм контрольных точек позволит сохранить ту работу, которая была совершена на этом этапе. Как будет видно далее, установка контрольных точек в таком режиме фактически не будет отличаться от их установки при нормальной работе.