Поделиться через


Интерфейс 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.
Кроме приведенных здесь условий, не следует делать никаких предположений о том, как LSN назначаются реализацией ILog. В частности, небезопасно предположить, что записи будут назначаться последовательными значениями для LSN.

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

В качестве оптимизации производительности некоторые реализации ILog могут буферизуть записи в памяти до принудительного выполнения журнала. В этом случае необходимо специально рассмотреть возможность управления ошибками и восстановления. Рассмотрим следующую ситуацию:

  1. Запись A добавляется в журнал, но журнал не является принудительным. Реализация ILog копирует запись в буфер в памяти и возвращает код успешного выполнения.
  2. Запись B добавляется к журналу, а реализация ILog решает принудительно отправить журнал на диск. Это происходит либо потому, что вызывающий объект запросил принудительное выполнение журнала, либо из-за переполнения буфера памяти. Однако операция записи завершается сбоем, например из-за нехватки места на диске.
В этом случае для реализации 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

См. также раздел

IFileBasedLogInit