36
Индивидуальный откат транзакции. В этом случае не нужен
общесистемный журнал изменений баз данных. Достаточно поддерживать
для каждой транзакции локальный журнал операций модификации БД,
которые были выпонены в этой транзакции, и производить откат транзакции
методом выполнения обратных операций, начиная от конца локального
журнала. В определенных СУБД так и происходит, но в большинстве систем
локальные журналы не поддерживаются, а индивидуальный откат
транзакции выполняется по общесистемному журналу, где все записи от
одной транзакции связывают обратным списком (от конца к началу).
При мягком сбое во внешней памяти основной части БД могут
находиться объекты, модифицированные транзакциями, не закончившимися
к моменту сбоя, и могут отсутствовать объекты, модифицированные
транзакциями, которые к моменту сбоя успешно завершились (из-за
использования буферов оперативной памяти, содержимое которых при
мягком сбое исчезает). При соблюдении протокола WAL во внешней памяти
журнала гарантированно должны находиться записи, которые относились бы
к операциям модификации обоих видов объектов. Главной задачей процесса
восстановления после мягкого сбоя является состояние внешней памяти
основной части БД, возникающее во время фиксации во внешней памяти
изменений всех завершившихся транзакций и которое не содержало бы
никаких следов незаконченных транзакций. Для того, чтобы этого добиться,
сначала производят откат незавершенных транзакций (undo), а потом
повторно воспроизводят (redo) те операции завершенных транзакций,
результаты которых не отображены во внешней памяти. Этот процесс
содержит множество тонкостей, которые связаны с общей организацией
управления буферами и журналом.
Для восстановления БД после жесткого сбоя используется архивная
копия базы данных и журнал. Архивная копия - это полная копия БД к
моменту начала заполнения журнала (имеется множество вариантов более
общей трактовки смысла архивной копии). Необходимо, чтобы после сбоя не