Verwenden von Protokollstreams mit KTM

KTM-basierte Transaktionsverarbeitungssysteme (TPSs) sollten Die Transaktionsaktivität mithilfe des Common Log File System (CLFS) protokollieren. KTM erstellt einen Protokollstream für jedes Transaktions-Manager-Objekt. Jeder Ressourcen-Manager sollte einen eigenen Protokollstream erstellen.

Erstellen von Protokollstreams für Transaction Manager-Objekte

Wenn Ihr Ressourcen-Manager ZwCreateTransactionManager aufruft, müssen Sie den Namen eines CLFS-Protokollstreams angeben. Wenn der angegebene Stream nicht vorhanden ist, erstellt KTM ihn. Wenn der Stream bereits vorhanden ist, wird er von ZwCreateTransactionManager erneut geöffnet. KTM weist diesen Protokolldatenstrom dem Transaktions-Manager-Objekt zu.

KTM verwendet den Protokollstream des Transaktions-Manager-Objekts, um interne Zustandsinformationen über das Transaktions-Manager-Objekt und alle Resource Manager-Objekte, Transaktionsobjekte und Einlistungsobjekte aufzuzeichnen, die dem Transaktions-Manager-Objekt zugeordnet sind. Wenn Transaktionsvorgänge unterbrochen werden, bevor sie abgeschlossen sind, kann KTM die Informationen im Protokoll verwenden, um zu bestimmen, ob die Transaktionen committ oder zurückgerollt werden sollen.

KTM zeichnet keine Transaktionsdaten auf, die Ressourcenmanager von Clients empfangen oder an diese senden. Ressourcenmanager müssen ihre eigenen Protokolldatenströme verwenden, um diese Informationen aufzuzeichnen.

Ressourcenmanager können ZwQueryInformationTransactionManager aufrufen, um Informationen zum Protokolldatenstrom eines Transaktions-Manager-Objekts abzurufen, z. B. den Pfadnamen des Protokolldatenstroms oder die GUID, die KTM dem Stream zuweist.

Erstellen von Protokollstreams für Resource Manager

Im Initialisierungscode sollte jeder Ressourcen-Manager ClfsCreateLogFile aufrufen, um einen eigenen Protokollstream zu erstellen. Jeder Ressourcen-Manager sollte seinen Stream verwenden, um alle Informationen zu Transaktionen aufzuzeichnen, die er zum Commit, Rollback oder Wiederherstellen der Transaktionsdaten benötigt.

KTM und alle Ressourcenmanager eines TPS können eine einzelne Protokolldatei verwenden, aber jede TPS-Komponente muss einen anderen Stream in der Protokolldatei verwenden. Informationen zum Angeben einzelner Streams in einer Protokolldatei finden Sie unter ClfsCreateLogFile.

In regelmäßigen Abständen erstellt KTM einen Neustartbereich im Protokollstream des Transaktions-Managers. Wenn KTM einen Wiederherstellungsvorgang ausführt, liest es den letzten Neustartbereich, um den Zustand der Objekte wiederherzustellen, die vor dem Herunterfahren des Systems geöffnet waren. Ebenso sollte Ihr Ressourcen-Manager regelmäßig Neustartbereiche in seinem Protokolldatenstrom erstellen. Beispielsweise kann Ihr Ressourcen-Manager bei jedem Abschluss eines Transaktionsvorgangs einen Neustartbereich erstellen.

Weitere Informationen zu Neustartbereichen in CLFS-Protokolldatenströmen finden Sie unter Lesen von Neustartdatensätzen aus einem CLFS-Stream. Siehe auch die Routinen ClfsWriteRestartArea, ClfsReadRestartArea und ClfsReadPreviousRestartArea .

Verwenden von Protokolldatenströmen für die Wiederherstellung

Nachdem Ihr Ressourcen-Manager ZwCreateTransactionManager aufgerufen hat, muss er ZwRecoverTransactionManager aufrufen. Die ZwRecoverTransactionManager-Routine liest den Protokolldatenstrom des Transaktions-Manager-Objekts, um den Zustand des TPS auf einen bekannten guten Punkt wiederherzustellen. Wenn der Computer nach dem letzten Laden des Ressourcen-Managers ordnungsgemäß heruntergefahren oder nicht heruntergefahren wurde, enthält der Protokolldatenstrom nur minimale Informationen. Wenn ein Systemabsturz aufgetreten ist, enthält der Protokolldatenstrom genügend Wiederherstellungsinformationen, um alle Transaktionen in einen bekannten Zustand wiederherzustellen.

Nachdem Ihr Ressourcen-Manager ZwCreateResourceManager aufgerufen hat, muss er ZwRecoverResourceManager aufrufen. Die ZwRecoverResourceManager-Routine versucht, die Transaktionen wiederherzustellen, die den einzelnen Listen des Ressourcen-Managers zugeordnet sind. Weitere Informationen zum Wiederherstellen der Transaktionen eines Ressourcen-Managers finden Sie unter Behandeln von Wiederherstellungsvorgängen.

Speichern von Transaktionsdaten

Ressourcenmanager, die CLFS-Protokolldatenströme verwenden, sollten Transaktionsdaten in CLFS-Marshallingbereichen speichern. CLFS verschiebt die Daten in regelmäßigen Abständen aus dem Marshallingbereich des Protokolldatenstroms in ein permanentes Speichermedium. Um einen Vorgang zu protokollieren, der Daten ändert, kann ein Ressourcen-Manager die folgenden Schritte ausführen:

  1. Kopieren Sie die ursprünglichen Daten, bevor sie durch den Schreibvorgang geändert werden, in den Marshallbereich.

  2. Führen Sie den Vorgang für eine Kopie der Daten aus, ohne das permanente Speichermedium der Datenbank zu ändern.

  3. Kopieren Sie die neuen Daten in den Marshallbereich.

Wenn der Ressourcen-Manager eine Rollbackbenachrichtigung erhält, kann er die ursprünglichen Daten aus dem Protokolldatenstrom wiederherstellen. Wenn er eine Commitbenachrichtigung empfängt, kann der Ressourcen-Manager die geänderten Daten aus dem Protokolldatenstrom auf das permanente Speichermedium der Datenbank kopieren.

Ressourcenmanager können auch die ZwSetInformationEnlistment-Routine verwenden, um Wiederherstellungsinformationen in einem Einlistungsobjekt zu speichern. KTM speichert diese Informationen im Protokolldatenstrom und liest sie während der Wiederherstellungsvorgänge aus dem Protokolldatenstrom. Daher kann ein Ressourcen-Manager diese Wiederherstellungsinformationen jederzeit abrufen, indem er ZwQueryInformationEnlistment aufruft.