- •Глава 13. Семантическое моделирование
- •Часть III Проектирование базы данных
- •Часть IV
- •14.1. Введение
- •14.2. Транзакции
- •14.3. Восстановление транзакции
- •14.4. Восстановление системы
- •14.5. Восстановление носителей
- •14.6. Двухфазная фиксация
- •14.7. Поддержка языка sql
- •14.8. Резюме
- •15.1. Введение
- •15.2. Три проблемы параллельности
- •15.3. Блокировка
- •15.4. Устранение трех проблем параллельности
- •15.5. Взаимная блокировка
- •15.6. Упорядочиваемость
- •15.7. Уровни изоляции
- •15.8. Блокировка намерения
- •15.9. Средства языка sql
- •15.10. Резюме
- •Часть V
- •16.1. Введение
- •16.2. Избирательная схема управления доступом
- •16.3. Мандатная схема управления доступом
- •16.4. Статистические базы данных
- •16.5. Шифрование данных
- •16.6. Средства языка sql
- •16.7. Резюме
- •17.1. Введение
- •17.2. Пример выполнения оптимизации
- •17.3. Оптимизация запросов
- •17.4. Преобразование выражений
- •17.5. Статистические показатели базы данных
- •17.6. Стратегия по принципу "разделяй и властвуй"
- •17.7. Реализация реляционных операторов
- •17.8. Резюме
- •18.1. Введение
- •18.2. Обзор концепции трехзначной логики
- •18.3. Некоторые следствия изложенной схемы
- •18.4. Отсутствующие значения и ключи
- •18.5. Внешнее соединение
- •18.6. Специальные значения
- •18.7. Поддержка неопределенных значений в языке sql
- •18.8. Резюме
- •Глава 19
- •19.1. Введение
- •19.2. Иерархия типов
- •19.3. Полиморфизм и заменимость
- •19.4. Переменные и операция присвоения
- •19.5. Специализация по ограничениям
- •19.6. Операции сравнения
- •19.7. Операторы, версии и сигнатуры
- •19.8. Является ли окружность эллипсом
- •19.9. Пересмотр специализации ограничением
- •19.10. Резюме
- •20.1. Введение
- •20.2. Предварительные сведения
- •20.3. Двенадцать основных целей
- •1. Локальная независимость
- •2. Отсутствие опоры на центральный узел
- •3. Непрерывное функционирование
- •4. Независимость от расположения
- •5. Независимость от фрагментации
- •6. Независимость от репликации
- •7. Обработка распределенных запросов
- •8. Управление распределенными транзакциями
- •9. Аппаратная независимость
- •10. Независимость от операционной системы
- •11. Независимость от сети
- •12. Независимость от типа субд
- •20.4. Проблемы распределенных систем
- •Транзакция т1х
- •20.5. Системы "клиент/сервер"
- •20.6. Независимость от субд
14.4. Восстановление системы
Система должна быть готова к восстановлению не только после локальных отказов, подобных возникновению условия переполнения при выполнении операции в пределах определенной транзакции, но и после глобальных нарушений, подобных отключению питания. Локальное нарушение по определению влияет только на ту транзакцию, в кото- рой оно, собственно говоря, и произошло. Подобные нарушения уже обсуждались выше, в разделах 14.2 и 14.3. Глобальное нарушение воздействует сразу на все транзакции, вы- полнявшиеся в момент его возникновения, и, следовательно, приводит к более значи- тельным для системы последствиям. Ниже кратко описывается, какие действия необхо- димо выполнить в процессе восстановления после глобального отказа системы. Сущест- вует две обширные категории глобальных нарушений.
Отказы системы (например, сбои в питании) воздействуют на все выполняю- щиеся в данный момент транзакции, но не нарушают физическое состояние базы данных. Отказ системы иногда также называют мягким отказом,
Отказы носителей (например, поломка головки дискового накопителя), которые могут представлять угрозу для физического состояния всей базы данных или ка- кой-либо ее части, способны воздействовать по крайней мере на те транзакции, которые используют поврежденную часть базы данных. Отказ носителя иногда также называют жестким отказом.
В этом разделе будут рассмотрены отказы системы, а в разделе 14.5 — отказы носителей.
Критическим моментом в отказе системы является потеря содержимого основной (оперативной) памяти (в частности, буферов базы данных). Поскольку точное состояние любой выполнявшейся в момент отказа системы транзакции остается неизвестным, такая транзакция никогда не сможет быть успешно завершена. Поэтому при перезагрузке сис- темы любая такая транзакция будет отменена (т.е. будет выполнен ее откат).
Более того, при перезагрузке системы, возможно, потребуется (как указывалось в разделе 14.3) повторно выполнить транзакции, которые успешно завершились до ава- рийного отказа, но выполненные ими обновления еще не были перенесены из буферов базы данных в физическую базу данных во вторичной памяти.
Возникает очевидный вопрос: "Как в процессе перезагрузки система узнает, какую транзакцию следует отменить, а какую выполнить повторно?". Ответ заключается в том, что система автоматически создает контрольные точки с некоторым наперед заданным интервалом (обычно, когда в журнале накапливается определенное число записей). Соз- дание контрольной точки означает: а) физическую перезапись ("принудительная разгруз- ка") содержимого рабочих буферов базы данных непосредственно в базу данных и б) фи- зическое помещение в файл журнала специальной записи контрольной точки. На рис. 14.3 представлен пример выполнения транзакций до аварийного сбоя системы (время возрастает слева направо).
Время tc tf
\
1
I Tl\
a
н T2 \ з
a T3 к
Ч T4 и
и TS
Контрольная точка Отказ системы II
(время tc) ( время tf) II
Рис. 14.3. Пять возможных вариантов выполнения транзакций К этому можно добавить следующие комментарии.
Отказ системы произошел в момент tf.
Ближайшая к моменту tf контрольная точка была создана в момент tc.
Транзакция Т1 успешно завершена до момента tc.
Транзакция Т2 начата до момента tc и успешно завершена после момента tc, но до момента tf.
Транзакция ТЗ также начата до момента tc, но не завершена к моменту tf.
Транзакция Т4 начата после момента tc и успешно завершена до момента tf.
Транзакция Т5 также начата после момента tc, но не завершена к моменту tf.
Очевидно, что при перезагрузке системы транзакции типа ТЗ и Т5 должны быть отме- нены, а транзакции типа Т2 и Т4 — выполнены повторно. Заметьте, что транзакции типа Tl вообще не участвуют в процессе перезагрузки, так как выполненные ими обновления были принудительно занесены в физическую базу данных в момент tc как часть проце- дуры создании этой контрольной точки. Обратите внимание также на то, что транзакции, завершившиеся неудачно (т.е. для них был выполнен откат) до момента tf, также не бу- дут принимать участия в процессе перезагрузки (подумайте, почему).
Следовательно, во время перезагрузки система прежде всего идентифицирует все транзакции типа Т2-Т5. При этом осуществляются следующие действия.
Создается два списка транзакций; назовем их UNDO (отменить) и REDO (выполнить повторно). В список UNDO заносятся все транзакции, упомянутые в последней из существующих записей контрольной точки, а список REDO пока остается пустым.
В журнале регистрации поиск организуется с записи последней контрольной точки.
Если в журнале регистрации обнаружена запись BEGIN TRANSACTION с указанием о на- чале выполнения некоторой транзакции Т, то эта транзакция добавляется в список UNDO.
Если в журнале регистрации обнаружена запись COMMIT, свидетельствующая об оконча- нии выполнения некоторой транзакции Т, эта транзакция добавляется в список REDO.
По достижении конца файла журнала регистрации списки UNDO и REDO анализиру- ются для выявления транзакций типа Т2 и Т4, помещенных в список REDO, и тран- закций типа ТЗ и Т5, оставшихся в списке UNDO.
После этого система просматривает журнал регистрации в обратном направлении, выполняя откат транзакций из списка UNDO, а затем вновь просматривает журнал в пря- мом направлении, повторно выполняя транзакции из списка REDO2.
Замечание. Восстановление согласованного состояния базы данных посредством от- мены выполненных операций иногда называется обратным восстановлением. Анало- гично восстановление согласованного состояния базы данных за счет повторного выпол- нения уже выполненных действий называется прямым восстановлением.
И наконец, когда такая восстановительная работа будет завершена, тогда (и только тогда) система будет готова к дальнейшей работе.