Журнализация. Операции журнала транзакций и его логическая и физическая архитектуры. Модели восстановления. Метаданные
Базы данных SQL Server содержат файлы трех типов:
- Первичные файлы данных (содержат сведения, необходимые для запуска базы данных, и ссылки на другие файлы в базе данных; в каждой базе данных имеется один первичный файл данных)
- Вторичные файлы данных (необязательные определяемые пользователем файлы данных; данные можно распределить по нескольким дискам, поместив каждый файл на другой диск; обеспечивает распределение нагрузки по чтению и записи по нескольким дискам)
- Файлы журналов (журнал содержит информацию для восстановления базы данных; для каждой базы данных должен существовать хотя бы один файл журнала; используется для записи всех изменений, вносимых в данные, до того как изменения будут реально записаны в файлы данных)
Журнализация изменений - это функция СУБД, которая сохраняет информацию, необходимую для восстановления базы данных в предыдущее согласованное состояние в случае логических или физических отказов.
Записывается следующая информация:
- порядковый номер, тип и время изменения;
- идентификатор транзакции;
- объект, подвергшийся изменению (номер хранимого файла и номер блока данных в нём, номер строки внутри блока);
- предыдущее состояние объекта и новое состояние объекта.
В случае логического отказа или сигнала отката одной транзакции журнал сканируется в обратном направлении, и все записи отменяемой транзакции извлекаются из журнала вплоть до отметки начала транзакции. Согласно извлеченной информации выполняются действия, отменяющие действия транзакции, а в журнал записываются компенсирующие записи. Этот процесс называется откат (rollback).
В случае физического отказа, если ни журнал, ни сама база данных не повреждена, то выполняется процесс прогонки (rollforward). Журнал сканируется в прямом направлении, начиная от предыдущей контрольной точки. Все записи извлекаются из журнала вплоть до конца журнала. Извлеченная из журнала информация вносится в блоки данных внешней памяти, у которых отметка номера изменений меньше, чем записанная в журнале. Если в процессе прогонки снова возникает сбой, то сканирование журнала вновь начнется сначала, но фактически восстановление продолжится с той точки, откуда оно прервалось.
Структура журнала зависит от модели восстановления. Журналы буферизуются отдельно от других (серверных) процессов.
Процесс восстановления:
Анализ. Формирование списков REDO (накат) и UNDO (откат).
Накат. Начиная с позиции журнала, которая определена на этапе анализа, восстановление базы данных до того состояния, в котором она находилась во время аварийного останова.
Откат. Отмена результатов внесения изменений теми транзакциями, фиксация которых не была выполнена.
Журнал транзакций