Базы данных [Сергей Дмитриевич Кузнецов] (pdf) читать постранично, страница - 112
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
можно было продолжить даже выполнение незавершенных транзакций. Но обычно
это не делается, потому что восстановление после жёсткого сбоя – это достаточно
длительный процесс.
Несмотря на то, что к ведению журнала предъявляются особые требования по
части надежности, в принципе, возможна и его утрата. Тогда единственным способом
восстановления базы данных является возврат к последней архивной копии. Конечно,
253
ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ
МАТЕМАТИКИ И КИБЕРНЕТИКИ
МГУ ИМЕНИ М.В. ЛОМОНОСОВА
ФОНД
ВОЛЬНОЕ ДЕЛО
БАЗЫ ДАННЫХ
КУЗНЕЦОВ СЕРГЕЙ ДМИТРИЕВИЧ
в этом случае не удастся получить последнее согласованное состояние базы данных,
но это лучше, чем ничего.
Последний вопрос, который в данном курсе следует обсудить, касается того
как производить архивные копии базы данных и журнала. Современные СУБД
умеют делать архивирование в режиме online, не нарушая работу пользователей,
но мы не будем заострять на этом внимание, т.к. это дело техники. Традиционное
архивирование базы данных происходит в offline, когда база данных не используется
(например, в ночное время).
Интересно, что вместо архивирования самой базы данных, можно архивировать
журнал, который весит заметно меньше. Для создания архивной копии журнала
нужно:
• запретить создание новых транзакций и дождаться завершения всех транзакций
• вытолкнуть все страницы буферного пула во внешнюю память
• скопировать журнал
Тогда для полного восстановления базы данных после жёсткого сбоя достаточно
иметь архивную копию базы данных, последовательность архивных копий журнала и
последний логический журнал. Может показаться, что восстановление базы данных
на основе таких архивных источников будет занимать недопустимо большое время,
однако здесь возможна значительная оптимизация.
Эта оптимизация состоит в том, что архивированный логический журнал можно
существенно сжать:
• Для этого для каждого объекта базы данных нужно найти последовательность
журнальных записей, относящихся к этому объекту, в хронологическом порядке
• и заменить их одной записью, соответствующей операции над объектом, результат которой эквивалентен результату последовательного выполнения журнализованных операций из построенной последовательности.
На рис. 108 показан процесс сжатия последовательности журнальных записей,
соответствующих последовательности операций над кортежем, у которого tid = k
и имеются четыре целочисленных поля. Слева сверху показан исходный журнал,
который содержит одну запись вставки кортежа и три записи обновления. Операция
UPDATE (tid=k, (1,3), (6,30)) обозначает, что первый и третий столбцы кортежа
меняют значения на 6 и 30 соответственно. Логично, что можно сразу вставлять
кортеж с такими значениями, что и происходит после первого шага процесса сжатия.
Аналогичными рассуждениями мы приходим к тому, что можно сразу вставить
результирующий кортеж. Очевидно, что если хронологически последней в последовательности является запись, соответствующая операции DELETE, то после сжатия
последовательность станет пустой.
254
ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ
МАТЕМАТИКИ И КИБЕРНЕТИКИ
МГУ ИМЕНИ М.В. ЛОМОНОСОВА
ФОНД
ВОЛЬНОЕ ДЕЛО
БАЗЫ ДАННЫХ
КУЗНЕЦОВ СЕРГЕЙ ДМИТРИЕВИЧ
Рис. 108: Процесс сжатия последовательности журнальных записей
Заметим, что точно таким же образом можно совместно сжать два хронологически последовательных полных или сжатых журнала. Таким образом, для восстановления базы данных после жёсткого сбоя можно воспользоваться:
• исходной архивной копией
• одним сжатым архивным журналом
• последним логическим журналом
Могут возникнуть сомнения относительно сложности и продолжительности
процесса сжатия журнала. Но здесь следует заметить, что эта работа не должна
выполняться на сервере базы данных, такое сжатие может выполняться на отдельном
компьютере в режиме offline. Кроме того, если в какой-то момент происходит жёсткий
сбой и имеются архивная копия базы данных, сжатый архивный журнал (начиная
от этой копии) и набор еще не сжатых архивных журналов, то этого уже достаточно
для восстановления, так что сроки завершения процесса полного сжатия не являются
критическими.
Заключение
Были рассмотрены основные принципы и алгоритмы подсистем СУБД, предназначенных для управления буферами оперативной памяти, журнализации и восстановления базы данных после различных сбоев. Изложение велось без технических
деталей, таких как возможные структуры данных журналов.
255
ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ
МАТЕМАТИКИ И КИБЕРНЕТИКИ
МГУ ИМЕНИ М.В. ЛОМОНОСОВА
ФОНД
ВОЛЬНОЕ ДЕЛО
ФАКУЛЬТЕТ
ВЫЧИСЛИТЕЛЬНОЙ
МАТЕМАТИКИ И
КИБЕРНЕТИКИ
МГУ ИМЕНИ
М.В. ЛОМОНОСОВА
Последние комментарии
7 часов 10 минут назад
12 часов 14 минут назад
20 часов 3 минут назад
22 часов 33 минут назад
22 часов 41 минут назад
2 дней 9 часов назад