Метод немедленного обновления
. При использовании этого прото-
кола все изменения вносятся в БД сразу же после их выполнения в тран-
закции, не дожидаясь ее завершения. Помимо необходимости повторно-
го прогона изменений, выполненных транзакциями, закончившимися до
появления сбоя, в данном случае может потребоваться выполнить откат
изменений, внесенных транзакциями, которые не были завершены к это-
му моменту. При применении данного метода файл журнала использует-
ся с целью восстановления следующим образом.
1. При запуске транзакции в журнал помещается запись: Начало
транзакции.
2. При выполнении любой операции записи помещаемая в файл жур-
нала строка содержит все указанные выше данные.
3. Как только упомянутая выше запись будет помещена в файл жур-
нала, все выполненные обновления вносятся в буфера БД.
4. В собственно файлы БД изменения будут внесены при очередной
разгрузке буферов БД во вторичную память.
5. Когда транзакция завершает свое выполнение, в файл журнала за-
носится запись: Транзакция завершена.
77
Очень важно, чтобы в файл журнала все записи (или хотя бы опреде-
ленная их часть) помещались до внесения соответствующих изменений в
БД. Это требование известно как протокол предварительной записи
журнала. Если изменения вначале будут внесены в БД и сбой в системе
возникнет до помещения информации об этом в файл журнала, то ме-
неджер восстановления не будет иметь возможности отменить (или по-
вторить) данную операцию. При использовании протокола предвари-
тельной записи журнала менеджер восстановления всегда сможет безо-
пасно предположить, что если для определенной транзакции в файле
журнала отсутствует запись Транзакция завершена, значит, эта транзак-
ция была активна в момент возникновения отказа и, следовательно,
должна быть отменена.
Если выполнение транзакции было прекращено, то для отмены вы-
полненных ею изменений может быть использован файл журнала, так
как в нем сохранены сведения об исходных значениях всех измененных
элементов данных. Поскольку транзакция может выполнить несколько
изменений одного и того же элемента, отмена обновлений выполняется в
обратном порядке. Независимо от того, были ли результаты выполнения
транзакции внесены в саму БД, наличие в записях журнала исходных
значений полей гарантирует, что БД будет приведена в состояние, отве-
чающее началу отмененной транзакции.
На случай отказа системы процедурой восстановления предусмотрено
использование файла журнала для повторного прогона или отката тран-
закций. Для любой транзакции T, для которой в файле журнала присут-
ствуют записи Начало транзакции и Транзакция завершена, следует вы-
полнить ее повторный прогон, используя для внесения в БД значения по-
сле изменения всех обновленных полей, как было описано выше. Отме-
тим, что если новые значения уже были реально внесены в файлы БД,
повторная их перезапись хотя и будет излишней, тем не менее, не окажет
на БД никакого отрицательного влияния. Те же изменения, которые еще
не достигли БД к моменту отказа, будут в нее внесены в процессе вос-
становления. Для любой транзакции S, для которой в файле журнала
присутствует запись Начало транзакции, но нет записи Транзакция за-
вершена, необходимо выполнить откат внесенных ею изменений. На этот
раз из записей файла журнала извлекается информация о значении изме-
ненных полей до их изменения, что позволяет привести базу данных в
стояние, которое она имела до начала данной транзакции. Операции от-
мены выполняются в порядке, обратном порядку их записи в файл жур-
нала.
78
|