Скачиваний:
42
Добавлен:
01.04.2014
Размер:
539.65 Кб
Скачать

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

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

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

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

Вначале остановимся на отказах системы.

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

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

Возникает вопрос: как во время перезагрузки система узнает, какую транзакцию отменить, а какую выполнить повторно? Ответ следующий. В некотором предписан­ном интервале (когда в журнале накапливается определенное число записей) система автоматически принимает контрольную точку. Принятие контрольной точки включает физическую запись содержимого рабочих буферов базы данных непосредственно в базу данных и специальную физическую запись контрольной точки, ко­торая предоставляет список всех осуществляемых в данный момент транзакций. На рис. 13.3 рассматривается пять возможных вариантов выполнения транзакций до ава­рийного сбоя системы.

Времяtc tf

ТT1

Р

А T2

Н

З T3

А

К T4

Ц

И T5

И контрольная точка( времяtc) отказ системы ( времяtf )

Рис. 13.3. Пять вариантов транзакции

Ниже приведены пояснения к рисунку.

• Отказ системы произошел в момент времени tf.

• Близлежащая к моменту времени tf контрольная точка была принята в момент времени tc.

• Транзакция Т1 успешно завершена до момента времени tc.

• Транзакция Т2 начата до момента времени tc и успешно завершена после момента времени tc, но до момента времени tf.

• Транзакция ТЗ также начата до момента времени tc, но не завершена к моменту времени tf.

• Транзакция Т4 начата после момента времени tc и успешно завершена до момента времени tf.

• И, наконец, транзакция Т5 также начата после момента времени tc, но не заверше­на к моменту времени tf.

Очевидно, что при перезагрузке системы транзакции типа ТЗ и Т5 должны быть отменены, а транзакции типа Т2 и Т4 — выполнены повторно. Тем не менее заметьте, что транзакции типа Т1 вообще не включаются в процесс перезагрузки, так как об­новления попали в базу данных еще до момента времени tc (т.е. зафиксированы еще до принятия контрольной точки). Отметьте также, что транзакции, завершившиеся неудачно (в том числе отмененные) перед моментом времени tf, вообще не будут во­влечены в процесс перезагрузки (подумайте, почему).

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

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

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

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

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

5. Когда достигается конец файла регистрации, списки UNDO и REDO анализиру­ются для идентификации транзакций типа Т2 и Т4, появившихся в списке REDO, и транзакций типа ТЗ и Т5, оставшихся в списке UNDO.

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

Замечание. Восстановление базы данных в правильное состояние путем отмены выполненных операций иногда называется обратным восстановлением. Аналогично, восстановление ее в правильное состояние повторным выполнением называется прямым восстановлением.

И, наконец, когда такая восстановительная работа завершена, система готова при­ступить к дальнейшей работе.

Соседние файлы в папке Дейтл Введ в БД