Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по БД new.doc
Скачиваний:
11
Добавлен:
18.09.2019
Размер:
687.62 Кб
Скачать

Метод восстановления с использованием немедленного обновления

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

  • При запуске транзакции в журнал помещается запись Начало транзакции.

  • При выполнении любой операции записи помещаемая в файл журнала строка содержит все указанные выше данные.

  • Как только упомянутая выше запись будет помещена в файл журнала, все выполненные обновления вносятся в буфера базы данных.

  • В собственно файлы базы данных изменения будут внесены при очередной разгрузке буферов базы данных во вторичную память.

  • Когда транзакция завершает свое выполнение, в файл журнала заносится запись Транзакция завершена.

Очень важно, чтобы в файл журнала все записи (или хотя бы определенная их часть) помещались до внесения соответствующих изменений в базу данных. Это тре­бование известно как протокол предварительной записи журнала. Если изменения вначале будут внесены в базу данных и сбой в системе возникнет до помещения ин­формации об этом в файл журнала, то менеджер восстановления не будет иметь воз­можности отменить (или повторить) данную операцию. При использовании протоко­ла предварительной записи журнала менеджер восстановления всегда сможет безо­пасно предположить, что если для определенной транзакции в файле журнала отсутствует запись Транзакция завершена, значит, эта транзакция была активна в момент возникновения отказа и, следовательно, должна быть отменена.

Если выполнение транзакции было прекращено, то для отмены выполненных ею изменений может быть использован файл журнала, так как в нем сохранены сведе­ния об исходных значениях всех измененных элементов данных. Поскольку тран­закция может выполнить несколько изменений одного и того же элемента, отмена обновлений выполняется в обратном порядке. Независимо от того, были ли резуль­таты выполнения транзакции внесены в саму базу данных, наличие в записях жур­нала исходных значений полей гарантирует, что база данных будет приведена в со­стояние, отвечающее началу отмененной транзакции.

На случай отказа системы процедурой восстановления предусмотрено использование файла журнала для повторного прогона или отката транзакций. Для любой транзакции Т, для которой в файле журнала присутствуют записи Начало транзакции и Транзак­ция завершена, следует выполнить ее повторный прогон, используя для внесения в базу данных значения после изменения всех обновленных полей - как было описано выше. Отметим, что если новые значения уже были реально внесены в файлы базы данных, повторная их перезапись, хотя и будет излишней, тем не менее не окажет на базу дан­ных никакого отрицательного влияния. Те же изменения, которые еще не достигли базы данных к моменту отказа, будут в нее внесены в процессе восстановления. Для лю­бой транзакции S, для которой в файле журнала присутствует запись Начало тран­закции, но нет записи Транзакция завершена, необходимо выполнить откат внесенных ею изменений. На этот раз из записей файла журнала извлекается информация о зна­чении измененных полей до их изменения, что позволяет привести базу данных в со­стояние, которое она имела до начала данной транзакции. Операции отмены выполня­ются в порядке, обратном порядку их записи в файл журнала.