Открыть сервис

Журнал транзакций

Журнал транзакций (transaction log) — это системный файл базы данных, в котором последовательно регистрируются все изменения, вносимые в данные и структуру базы данных. Основное назначение журнала — обеспечение целостности данных, возможность восстановления базы данных после сбоев (откат незавершённых транзакций и повторное применение завершённых) и поддержка механизмов репликации. Журнал транзакций является критически важным компонентом систем управления базами данных (СУБД), работающих в режиме строгой гарантии сохранности данных.

Назначение и функции

Основная функция журнала транзакций — гарантировать, что база данных может быть восстановлена до согласованного состояния в любой момент времени, даже при внезапном отключении питания, сбое оборудования или программной ошибке. Журнал позволяет выполнять следующие операции:

Структура и принцип работы

Журнал транзакций представляет собой последовательный файл (или набор файлов), в который СУБД записывает записи (log records) в хронологическом порядке. Каждая запись содержит:

Запись в журнал происходит до того, как данные будут записаны на диск (принцип WAL — Write-Ahead Logging). Это означает, что перед тем, как СУБД запишет изменённую страницу данных в основной файл базы данных, соответствующая запись об изменении должна быть гарантированно сохранена в журнале транзакций. Только после этого транзакция считается зафиксированной.

LSN (Log Sequence Number)

Каждая запись в журнале транзакций имеет уникальный номер LSN, который монотонно возрастает. LSN используется для:

Виды журналов транзакций

В зависимости от архитектуры СУБД и режима работы, журналы транзакций могут различаться по способу записи и управления:

Управление журналом транзакций

Размер и управление файлами

Журнал транзакций обычно имеет фиксированный или динамически расширяемый размер. В СУБД предусмотрены механизмы управления его объёмом:

Режимы работы журнала

В различных СУБД существуют режимы, определяющие степень детализации журнала и возможность восстановления:

Примеры реализации в популярных СУБД

PostgreSQL

В PostgreSQL журнал транзакций называется Write-Ahead Log (WAL). Файлы WAL хранятся в каталоге pg_wal. Размер каждого файла WAL по умолчанию составляет 16 МБ. PostgreSQL поддерживает архивирование WAL для создания непрерывных резервных копий и репликации. Механизм восстановления основан на чтении WAL с момента последней контрольной точки.

Microsoft SQL Server

Журнал транзакций в SQL Server физически представлен файлом с расширением .ldf. Он работает в одном из трёх режимов восстановления. Для управления размером журнала используются команды BACKUP LOG и DBCC SHRINKFILE. SQL Server поддерживает автоматическое расширение файла журнала.

MySQL (InnoDB)

В MySQL с движком InnoDB журнал транзакций реализован через файлы ib_logfile0 и ib_logfile1 (по умолчанию). Размер журнала задаётся параметром innodb_log_file_size. InnoDB использует механизм WAL и циклическую запись. Для обеспечения надёжности используется двойная запись (doublewrite buffer).

Oracle Database

В Oracle журнал транзакций называется redo log. Он состоит из групп файлов redo log, которые циклически перезаписываются. Oracle также использует undo-сегменты для отката транзакций, которые работают совместно с redo log.

Проблемы и риски

Законодательные аспекты

В Российской Федерации требования к ведению журналов транзакций могут быть связаны с законодательством о персональных данных (Федеральный закон № 152-ФЗ) и об оперативно-розыскной деятельности. Согласно приказу Минкомсвязи России № 365 от 27 ноября 2018 года, операторы связи обязаны хранить журналы транзакций и предоставлять их уполномоченным органам. Также требования к журналированию изменений данных содержатся в стандартах банковской системы (ЦБ РФ) и в системах сертификации средств защиты информации (ФСТЭК России).

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →