10
Восстановление
При старте сервера после сбоя
1. найти LSN
0
начала последней завершенной контрольной точки
2. применить каждую запись журнала, начиная с LSN
0
,
если LSN записи больше, чем LSN страницы
3. перезаписать нежурналируемые таблицы init-файлами
4. выполнить контрольную точку
xid
контрольная точка
контрольная точка сбой
необходимые файлы журнала
начало
восстановления
Если в работе сервера произошел сбой, при последующем запуске
процесс startup обнаруживает это (в файле pg_control статус отличен
от «shut down») и выполняет автоматическое восстановление.
Сначала процесс читает из того же файла LSN записи оmпоследней
контрольной точке. Из этой записи процесс узнает позицию LSN начала
контрольной точки.
(Для полноты картины заметим: если присутствует файл backup_label,
запись о контрольной точке читается из него — это нужно для
восстановления из резервных копий. Подробнее см. курс DBA3.)
Далее процесс startup читает журнал от найденной позиции,
последовательно применяя записи к страницам, если в этом есть
необходимость (что можно проверить, сравнив LSN страницы на диске
с LSN журнальной записи). Изменение страниц происходит в буферном
кеше, как при обычной работе.
Записи, относящиеся к страницам CLOG, восстанавливают статус
транзакций. Транзакции, не зафиксированные к концу восстановления,
считаются оборванными; их изменения не видны в снимках данных.
Аналогично записи применяются и к файлам: например, если запись
говорит, что файл должен быть создан, а его нет — файл создается.
В конце процесса все нежурналируемые таблицы перезаписываются
сmпомощью образов в init-файлах. На этом процесс startup завершает
работу, после чего процесс checkpointer выполняет контрольную точку,
чтобы зафиксировать восстановленное состояние.