Интерфейс ILog (txlogpub.h)
Предоставляет универсальные функции ведения журнала низкого уровня.
Общая файловая система журналов (CLFS) предоставляет функции, которые являются надмножеством, предоставляемыми ILog.
Наследование
Интерфейс ILog наследуется от интерфейса IUnknown . ILog также содержит следующие типы элементов:
Методы
Интерфейс ILog содержит следующие методы.
ILog::AppendRecord Запишите новую запись в конец журнала. |
ILog::Force Принудительное использование содержимого журнала на диске по крайней мере через указанный номер LSN. |
ILog::GetLogLimits Извлекает сведения о текущих границах журнала. |
ILog::ReadRecord Чтение записи из журнала. |
ILog::ReadRecordPrefix Считывает начальную часть записи из журнала. |
ILog::SetAccessPolicyHint Предоставляет подсказку для реализации о шаблоне, в котором будут считываться записи. |
ILog::TruncatePrefix Удаляет указанный префикс журнала, что делает его недоступным для извлечения. |
Комментарии
WAL — это метод, используемый определенными приложениями, такими как системы управления базами данных, для реализации атомарных и изолированных транзакций. Этот метод включает запись записей об изменениях в ресурсах приложения в журнал перед внесением этих изменений. Таким образом, изменения можно отменить, если они требуются, например, если транзакция завершается сбоем или прервана. Чтобы приложения предоставляли транзакции, устойчивые к прерываниям, таким как сбой системы или сбой питания, реализация ведения журнала должна предоставлять метод принудительного создания журнала. то есть, чтобы убедиться, что ранее записанные записи находятся на диске, прежде чем продолжить.
Запись записей, использующих ILog , является последовательной операцией; то есть новые записи всегда добавляются в конец журнала. Каждой записи, добавляемой в журнал, назначается порядковый номер журнала (LSN), числовый идентификатор, который может использоваться для получения записи позже. Тип данных LSN — это typedef для LARGE_INTEGER, 64-разрядное значение со знаком; однако ILog использует только номера LSN с нерентативными значениями. Кроме того, номера LSN должны соответствовать следующим условиям:
- Номера LSN монотонно увеличиваются; Если запись B записывается в журнал после записи A, номер LSN записи B должен быть больше LSN записи A.
- Значения 0 и MAXLSN (0x7FFFFFFFFFFFFFFF) никогда не должны использоваться в качестве номера LSN записи, так как они имеют особое значение для некоторых методов ILog.
После добавления записи в журнал ее нельзя изменить. Однако если ранее записанные записи больше не нужны, например записи об изменениях в транзакции, которая уже была зафиксирована, ILog поддерживает усечение журнала. Таким образом, дисковое пространство, используемое для несуществующих записей, может быть использовано повторно. Усечение журнала состоит из удаления всех записей с номером LSN меньше указанного значения.
В качестве оптимизации производительности некоторые реализации ILog могут буферизуть записи в памяти до принудительного выполнения журнала. В этом случае необходимо специально рассмотреть возможность управления ошибками и восстановления. Рассмотрим следующую ситуацию:
- Запись A добавляется в журнал, но журнал не является принудительным. Реализация ILog копирует запись в буфер в памяти и возвращает код успешного выполнения.
- Запись B добавляется к журналу, а реализация ILog решает принудительно отправить журнал на диск. Это происходит либо потому, что вызывающий объект запросил принудительное выполнение журнала, либо из-за переполнения буфера памяти. Однако операция записи завершается сбоем, например из-за нехватки места на диске.
Реализация на основе файлов ILog
Операционная система Windows предоставляет файловую реализацию ILog, которая позволяет создать журнал, подходящий для упреждающего ведения журнала в файле. Журнал использует файл в качестве кругового буфера, что позволяет повторно использовать неиспользуемое пространство. Это также может увеличить размер файла, который может потребоваться для размещения дополнительных записей при заполнении журнала. Изменения в журнал вносятся атомарным образом, чтобы содержимое журнала можно было восстановить после сбоя. Эта реализация использует буфер в памяти для добавления записей журнала. В результате записи записей на диск при возврате метода ILog::AppendRecord не гарантируется, если вызывающий объект не запрашивает принудительное выполнение журнала.Используйте следующий идентификатор CLSID для создания экземпляра журнала на основе файлов (см. раздел CoCreateInstance):
CLSID_SimpleFileBasedLog ({E16C0593-128F-11D1-97E4-00C04FB9618A} ).
Реализация ILog на основе файлов дополнительно поддерживает интерфейсы IFileBasedLogInit и IPersistFile . Используйте IFileBasedLogInit::InitNew для создания нового файла журнала. Используйте IPersistFile::Load , чтобы открыть существующий файл журнала.
В этой реализации используется простая политика управления ошибками. Если какой-либо из методов завершается сбоем из-за ошибки на уровне файловой системы, которая включает ошибку полного диска, журнал закрепляется в состоянии ошибки. Это предотвращает добавление дополнительных записей в файл или чтение потенциально недопустимых записей. Чтобы продолжить использовать файл журнала, необходимо создать новый экземпляр журнала.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | txlogpub.h |