Что такое формат файла LDF?
Файл .ldf - это файл журнала транзакций, созданный Microsoft SQL Server для записи каждого изменения, внесенного в базу данных, до того как эти изменения будут записаны на диск. Он реализует стратегию ведения журнала с предварительной записью: SQL Server сначала записывает запись журнала, а затем применяет соответствующее изменение к страницам данных.
Каждый .ldf работает как парный файл к основному файлу данных .mdf. Без работоспособного файла журнала база данных не может стать онлайн; удаление или потеря .ldf вне контролируемых процедур может сделать базу данных не восстанавливаемой.
Внутренне журнал разделен на виртуальные файлы журнала (VLF) - фиксированные сегменты, которые SQL Server выделяет и повторно использует по кругу. Каждая запись журнала несет уникальный номер последовательности журнала (LSN) - 10-байтовое значение, кодирующее номер файла, смещение блока и слот в 512-байтовом блоке журнала. Цепочка LSN - это то, что движок использует во время восстановления после сбоя для повторного выполнения зафиксированных транзакций и отмены незавершенных.
.ldf поддерживает несколько критически важных функций SQL Server:
- Восстановление после сбоя - повторное воспроизведение или откат выполняющихся транзакций после неожиданного завершения работы
- Восстановление в определенный момент времени - используется вместе с полным резервным копированием .bak и резервными копиями журналов .trn в модели полного восстановления
- Репликация и захват измененных данных (CDC) - чтение зафиксированных изменений непосредственно из журнала
Формат является проприетарным двоичным, не имеет публично задокументированных магических байтов и не может быть открыт вручную. Третьими сторонами инструменты, такие как ApexSQL Log или Redgate SQL Log, могут декодировать записи журнала для аудита или целей судебно-следственного анализа. Начиная с SQL Server 2017, файлы .ldf поддерживаются идентично на Linux и в контейнерах Docker наряду с дополнительными файлами данных .ndf.
Безопасность и защита
РИСК: MEDIUMФайл содержит данные, а не исполняемый код, поэтому он не несет прямого риска вредоносного ПО. Реальная опасность - операционная: удаление или отсоединение .ldf от работающей или «подозрительной» базы данных может привести к потере данных или сделать базу данных не восстанавливаемой, а создание базы данных без её журнала (или с перестроенным журналом) приведет к потере незавершенных транзакций. Никогда не редактируйте .ldf вручную. Если журнал очень большой, уменьшите его поддерживаемым способом (сделайте резервную копию журнала, а затем DBCC SHRINKFILE), а не удаляйте его. Журналы, зашифрованные с помощью TDE, требуют сертификата/ключей базы данных для восстановления.
Детали формата
в двух словахПрограммы, открывающие файлы LDF
Технические подробности
глубокая спецификация| Кодировка | Двоичная, little-endian |
| Структура контейнера | Последовательность виртуальных файлов журнала (VLF); SQL Server выделяет и повторно использует VLF по кругу по мере освобождения пространства журнала |
| Единица записи журнала | Записи журнала переменной длины, упакованные в 512-байтовые блоки журнала |
| Идентификатор записи | Номер последовательности журнала (LSN) - 10-байтовое значение, кодирующее номер файла журнала, смещение блока внутри файла и номер слота внутри блока |
| Круговое повторное использование | Пространство журнала освобождается и повторно используется, когда активная часть больше не нужна - после контрольной точки в модели SIMPLE или резервного копирования журнала в модели FULL |
| Поддержка модели восстановления | Поведение зависит от модели восстановления SQL Server: SIMPLE (автоматическое усечение при контрольной точке), BULK-LOGGED (минимальное ведение журнала для массовых операций), FULL (журнал растет до создания резервной копии журнала) |
| Парный файл данных | Всегда парный с хотя бы одним файлом данных `.mdf`; дополнительные файлы данных используют расширение `.ndf` |
| Максимальный размер файла | До 2 ТБ на файл журнала на Windows NTFS/ReFS; одна база данных может иметь несколько файлов `.ldf`, каждый из которых подчиняется этому ограничению |
| Шифрование | По умолчанию не зашифрован; автоматически шифруется при включении прозрачного шифрования данных (TDE) на базе данных |
| Сжатие | Сам файл `.ldf` хранится несжатым; резервные копии журнала, записанные в файлы `.trn` или `.bak`, могут использовать сжатие резервных копий SQL Server |
| Контрольная сумма / целостность | Необязательное обнаружение разорванных страниц и контрольные суммы страниц настраиваются на уровне базы данных; движок проверяет цепочку LSN при каждом восстановлении |
| Автоматический рост | SQL Server автоматически увеличивает `.ldf` при заполнении; приращение роста настраивается в фиксированных МБ или процентах; чрезмерный автоматический рост малыми шагами вызывает фрагментацию VLF и более медленное восстановление |
| Внутренняя привязка версии | Формат привязан к версии движка SQL Server и уровню совместимости базы данных; например, SQL Server 2022 использует внутреннюю версию базы данных 904 |
| Поддержка ОС | Windows (все современные версии SQL Server); Linux и контейнеры Docker (SQL Server 2017 и более поздние через SQL Server на Linux) |
| MIME-тип | application/octet-stream (для этого формата не зарегистрирован специальный MIME-тип) |
| Прямой доступ | Не предназначен для прямого открытия или синтаксического анализа; доступ осуществляется через подключение движка SQL Server, команды RESTORE DATABASE или сторонние средства чтения журнала, такие как ApexSQL Log или Redgate SQL Log |
| Выпущен | Microsoft SQL Server (log architecture present since the Sybase-derived 4.x/6.x era, 1990s) |
| Последняя версия | Format tied to the database compatibility/engine version (e.g. SQL Server 2022, internal db version 904) |
| Спецификация | learn.microsoft.com |
Конвертации LDF
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах LDF.