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.
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:
- 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.
- 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.
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 |