Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_Infa.doc
Скачиваний:
169
Добавлен:
20.03.2016
Размер:
2.75 Mб
Скачать

10.1. Восстановление транзакции

Транзакция начинается с успешного выполнения оператора Begin Transaction и заканчивается успешным выполнение либо оператора Commit, либо оператора Rollback. Оператор Commit устанавливает так называемую точку фиксации, которая соответствует концу логической единице работы и , следовательно, точке, в которой база данных находится в согласованном состоянии. Выполнение же оператора Rollback возвращает базу данных в состоянии, в котором она находилась во время выполнения оператора Begin Transaction, т.е. в предыдущую точку фиксации.

Из этого следует, что транзакция – это не только логическая единица работы, но и также единица восстановления при неудачном выполнении операций.

Таким образом, транзакции обладают четырьмя важными свойствами: атомарность, согласованность, изоляция и долговечность.

Атомарность. Транзакции атомарны (выполняется все или ничего).

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

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

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

10.2 Восстановление системы

Система должна быть готова к восстановлению не только после небольших локальных нарушений, таких как невыполнение операции в пределах определенной транзакции, но также и после глобальных нарушений типа сбоев питания ЦПУ. Местное нарушение по определению поражает только транзакцию, в которой оно произошло. Глобальное нарушение поражает сразу все транзакции, что приводит к значительным для системы последствиям.

Существует два вида глобальных нарушений:

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

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

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

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

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

Рис. 10.2. Варианты транзакции

Очевидно, что при перезагрузке системы транзакции типа T3 и T5 должны быть отменены, а транзакции типа T2 и T4 – выполнены повторно, а транзакции типа T1 вообще не включаются в процесс перезагрузки, так как обновления попали в БД еще до момента времени Tc, т.е. зафиксированы еще до принятия контрольной точки.

Следовательно, во время перезагрузки система вначале проходит через процедуру идентификации всех транзакций типа T2-T5. при этом выполняются перечисленные ниже шаги.

  1. Создаются два списка транзакций: будем их называть UNDO (отменить) и REDO (повторить). В список UNDO заносятся все транзакции, предоставленные из записи контрольной точки (т.е. все транзакции, выполняющиеся в момент времени Tc), а список REDO остается пустым.

  2. Осуществляется поиск в файле регистрации (журнале), начиная с записи контрольной точки.

  3. Если в файле регистрации обнаружена запись Begin Transaction о начале транзакции T, то эта транзакция также добавляется в список UNDO.

  4. Если в файле регистрации обнаружена запись Commit об окончании транзакции T, то эта транзакция добавляется в список REDO.

  5. Когда достигается конец файла регистрации, списки и REDO анализируются для идентификации транзакций типа T2 и T4, появившихся в списке REDO и транзакций типа T3 и T5, оставшихся в списке UNDO.

После этого система просматривает файл регистрации, отменяя транзакции из списка UNDO, а затем просматривает снова вперед, повторно выполняя транзакции из списка REDO.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]