Share via


ILog-Schnittstelle (txlogpub.h)

Bietet generische Protokollierungsfunktionen auf niedriger Ebene.

Das Common Log File System (CLFS) bietet Funktionen, die eine Übermenge der von ILog bereitgestellten Funktionen darstellt.

Vererbung

Die ILog-Schnittstelle erbt von der IUnknown-Schnittstelle . ILog verfügt auch über folgende Arten von Membern:

Methoden

Die ILog-Schnittstelle verfügt über diese Methoden.

 
ILog::AppendRecord

Schreiben Sie einen neuen Datensatz an das Ende des Protokolls.
ILog::Force

Erzwingt den Inhalt des Protokolls auf den Datenträger, zumindest über den angegebenen LSN.
ILog::GetLogLimits

Ruft Informationen über die aktuellen Grenzen des Protokolls ab.
ILog::ReadRecord

Lesen Sie einen Datensatz aus dem Protokoll.
ILog::ReadRecordPrefix

Liest einen ersten Teil eines Datensatzes aus dem Protokoll.
ILog::SetAccessPolicyHint

Stellt einen Hinweis auf die Implementierung zum Muster bereit, in dem Datensätze gelesen werden.
ILog::TruncatePrefix

Löst das angegebene Präfix des Protokolls aus, sodass es nicht mehr abrufbar ist.

Hinweise

WAL ist eine Technik, die von bestimmten Anwendungen, z. B. Datenbankverwaltungssystemen, verwendet wird, um atomare und isolierte Transaktionen zu implementieren. Dieses Verfahren umfasst das Schreiben von Datensätzen von Änderungen an den Ressourcen der Anwendung in ein Protokoll, bevor Sie diese Änderungen vornehmen. Auf diese Weise können die Änderungen zurückgesetzt werden, wenn sie erforderlich sind, z. B. wenn die Transaktion fehlschlägt oder unterbrochen wird. Damit Anwendungen Transaktionen bereitstellen können, die gegen Unterbrechungen wie Systemabsturz oder Stromausfall robust sind, muss die Protokollierungsimplementierung eine Methode zum Erzwingen des Protokolls bereitstellen. das heißt, um sicherzustellen, dass sich zuvor geschriebene Datensätze auf dem Datenträger befinden, bevor Sie fortfahren.

Das Schreiben von Datensätzen, die ILog verwenden, ist ein sequenzieller Vorgang. Das heißt, neue Datensätze werden immer am Ende des Protokolls angefügt. Jedem Datensatz, der an das Protokoll angefügt wird, wird eine Protokollsequenznummer (LSN) zugewiesen, ein numerischer Bezeichner, der zum späteren Abrufen des Datensatzes verwendet werden kann. Der Datentyp LSN ist eine Typdefinition für LARGE_INTEGER, ein signierter 64-Bit-Wert. ILog verwendet jedoch nur LSNs mit nicht negativen Werten. Darüber hinaus müssen LSNs die folgenden Bedingungen erfüllen:

  • LSNs nehmen monoton zu; wenn Datensatz B nach Datensatz A in das Protokoll geschrieben wird, muss der LSN von Datensatz B größer als der LSN von Datensatz A sein.
  • Werte von null und MAXLSN (0x7FFFFFFFFFFFFFFF) dürfen niemals als LSN eines Datensatzes verwendet werden, da sie für einige Methoden von ILog eine besondere Bedeutung haben.
Abgesehen von den hier aufgeführten Bedingungen sollten keine Annahmen darüber getroffen werden, wie LSNs durch eine Implementierung von ILog zugewiesen werden. Insbesondere kann nicht davon ausgegangen werden, dass Datensätze sequenzielle Werte für LSNs zugewiesen werden.

Nachdem ein Datensatz an das Protokoll angefügt wurde, wird er möglicherweise nicht geändert. Wenn jedoch zuvor geschriebene Datensätze nicht mehr benötigt werden, z. B. Datensätze von Änderungen in einer Transaktion, die bereits committet wurden, unterstützt ILog das Abschneiden des Protokolls. Auf diese Weise kann speicherplatz, der für nicht erforderliche Datensätze verwendet wurde, wiederverwendet werden. Das Abschneiden des Protokolls besteht aus dem Löschen aller Datensätze mit einem LSN, der kleiner als ein angegebener Wert ist.

Als Leistungsoptimierung können einige Implementierungen von ILog Datensätze im Arbeitsspeicher puffern, bis das Protokoll erzwungen wird. Wenn dies der Fall ist, müssen Sie die Fehlerkontrolle und -wiederherstellung in Betracht ziehen. Sehen Sie sich das folgende Beispiel an:

  1. Datensatz A wird an das Protokoll angefügt, aber das Protokoll wird nicht erzwungen. Die ILog-Implementierung kopiert den Datensatz in einen Puffer im Arbeitsspeicher und gibt einen Erfolgscode zurück.
  2. Datensatz B wird an das Protokoll angefügt, und die ILog-Implementierung beschließt, das Protokoll auf den Datenträger zu erzwingen. Dies liegt entweder daran, dass der Aufrufer das Protokoll erzwungen hat oder weil der Speicherpuffer voll ist. Der Schreibvorgang schlägt jedoch fehl, z. B. aufgrund des geringen Speicherplatzes.
In dieser Situation wäre es unangemessen, dass die ILog-Implementierung das Anfügen zusätzlicher Datensätze an das Protokoll ermöglicht, es sei denn, sie kann garantieren, dass alle Datensätze, für die ein Erfolgscode zurückgegeben wurde, zuerst auf den Datenträger geschrieben werden. Eine mögliche Methode der Fehlerkontrolle besteht darin, das Protokoll in einen Fehlerzustand anzuheften, wenn diese Situation auftritt, und zusätzliche Schreibvorgänge dauerhaft in das Protokoll instance. Aufrufer, die das Protokoll nicht auf den Datenträger für jeden angefügten Datensatz erzwingen, sollten erkennen, dass diese Situation auftreten kann, und in der Lage sein, sie entsprechend zu behandeln.

Dateibasierte ILog-Implementierung

Das Windows-Betriebssystem bietet eine dateibasierte Implementierung von ILog, mit der Sie ein Protokoll erstellen können, das für die Schreibzugriffsprotokollierung für eine Datei geeignet ist. Das Protokoll verwendet eine Datei als Kreispuffer, wodurch nicht genutzter Speicherplatz wiederverwendet werden kann. Dies kann auch die Größe der Datei erhöhen, die möglicherweise erforderlich ist, um zusätzliche Datensätze anzupassen, wenn das Protokoll voll ist. Änderungen am Protokoll werden atomar vorgenommen, sodass der Inhalt des Protokolls nach einem Absturz wiederhergestellt werden kann. Diese Implementierung verwendet einen Puffer im Arbeitsspeicher zum Anfügen von Protokolldatensätzen. Daher ist es nicht garantiert, dass Datensätze auf den Datenträger geschrieben werden, wenn die ILog::AppendRecord-Methode zurückgibt, es sei denn, der Aufrufer fordert die Erzwingung des Protokolls an.

Verwenden Sie die folgende CLSID, um eine instance eines dateibasierten Protokolls zu erstellen (siehe CoCreateInstance):

CLSID_SimpleFileBasedLog ({E16C0593-128F-11D1-97E4-00C04FB9618A} ).

Die dateibasierte Implementierung von ILog unterstützt zusätzlich die Schnittstellen IFileBasedLogInit und IPersistFile . Verwenden Sie IFileBasedLogInit::InitNew , um eine neue Protokolldatei zu erstellen. Verwenden Sie IPersistFile::Load , um eine vorhandene Protokolldatei zu öffnen.

Diese Implementierung verwendet eine einfache Fehlersteuerungsrichtlinie. Wenn eine der Methoden aufgrund eines Fehlers auf Dateisystemebene fehlschlägt, der einen vollständigen Datenträgerfehler enthält, wird das Protokoll in einem Fehlerzustand angeheftet. Dadurch wird verhindert, dass Clients zusätzliche Datensätze an die Datei anfügen oder potenziell fehlerhafte Datensätze lesen. Um die Protokolldatei weiterhin verwenden zu können, müssen Sie eine neue instance des Protokolls erstellen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile txlogpub.h

Weitere Informationen

IFileBasedLogInit