Ведение журнала транзакций Db2
IBM Db2, как и большинство других современных реляционных СУБД, обеспечивающих предоставление гарантий ACID, использует транзакционный журнал как основной механизм реализации соответствующих требований.
Выполняемые Db2 операции изменения данных фиксируются в транзакционном журнале
в виде последовательности записей журнала. Для каждой базы данных ведется
собственный транзакционный журнал, представляющий собой последовательность
файлов на диске. Размер единичного файла определяется параметром LOGFILSIZ
,
количество первоначально создаваемых файлов определяется параметром LOGPRIMARY
.
При необходимости Db2 может создать дополнительные файлы журнала, максимальное количество
создаваемых файлов регулируется параметром LOGSECOND
.
Запись информации в транзакционный журнал ведется с использованием специального буфера в оперативной памяти. Сброс содержимого буфера на диск (в файлы транзакционного журнала) осуществляется по мере заполнения буфера, а также при подтверждении и отмене транзакций (по команде приложения либо по факту нештатного закрытия соединения с приложением).
Файл транзакционного журнала, который необходим для восстановления
данных после сбоя, называется активным. Активные файлы транзакционных
журналов должны быть постоянно доступны менеджеру баз данных
Db2. Поскольку доступность файлов транзакционного журнала является
критической для обеспечения работоспособности СУБД, предусмотрен
механизм зеркального хранения транзакционных журналов в двух файловых
системах (настраивается параметром LOGMIRROR
).
Существует два основных режима работы с транзакционным журналом DB2:
циклическое журналирование и архивное журналирование. В режиме
циклического журналирования DB2 циклически использует созданный набор
файлов транзакционного журнала. В режиме архивного журналирования DB2
дополнительно копирует файлы транзакционного журнала в архив с помощью
методов, определенных параметрами LOGARCHMETH1
и LOGARCHMETH2
.
Режим циклического журналирования обеспечивает восстановление целостности базы данных при крахе сервера СУБД. Резервное копирование такой базы данных возможно только после отключения всех приложений (т.е. с приостановкой доступа пользователей). Восстановление данных из резервной копии возможно только с приведением базы данных в состояние на момент снятия резервной копии.
Режим архивного журналирования также обеспечивает восстановление целостности базы данных при крахе сервера СУБД. Дополнительно обеспечивается резервное копирование базы данных без приостановки доступа пользователей и включение активных файлов журнала (необходимых для восстановления целостности данных) в резервную копию. Восстановление данных из резервной копии может быть дополнено применением изменений, выполненных над базой данных после снятия резервной копии, и приведения базы данных в состояние на выбранный момент времени в прошлом (но не ранее момента снятия резервной копии).
Режим архивного журналирования требует дополнительных затрат ресурсов на выполнение операций архивирования, включая увеличенный объем операций ввода-вывода и дополнительное дисковое пространство для хранения архивных файлов транзакционного журнала.
В случае неправильного выбора размера и количества файлов
транзакционного журнала, не соответствующего уровню текущей нагрузки,
возможны ситуации переполнения транзакционного журнала из-за
недостаточного количества разрешенных к созданию файлов журнала либо
недостатка в доступном дисковом пространстве. В зависимости от
настроек базы данных (см. параметр BLK_LOG_DSK_FUL
), приложениям
может возвращаться сообщение о соответствующей ошибке, либо обработка
может быть приостановлена до разрешения ситуации администратором.
Также ситуации переполнения транзакционного журнала могут возникать при наличии длительных транзакций, осуществляющих операции изменения данных. Даже если такая длительная транзакция выполняет единичное небольшое изменение базы данных, которое затем долгое время остается не подтвержденным, соответствующий файл транзакционного журнала остается активным и не может быть повторно использован.
Начиная с Db2 версии 11.5 поддерживается функция Advanced Log Space Management, которая позволяет радикально сократить вероятность переполнения журнала транзакций при выполнении длительных операций. При использовании этой функции Db2 автоматически обнаруживает длительные транзакции, и выполняет выгрузку данных из относящихся к ним журнала транзакций в отдельные области хранения. Таким образом, длительные операции перестают блокировать архивирование и очистку основных и дополнительных файлов журнала транзакций.