Behandeln von Rollbackvorgängen

Ein Ressourcen-Manager, ein Transaktionsclient oder KTM kann ein Rollback für eine Transaktion ausführen, wenn er feststellt, dass die Transaktion nicht committet werden darf (in der Regel, weil ein Fehler erkannt wurde).

Um ein Rollback für eine Transaktion auszuführen, kann ein Ressourcen-Manager ZwRollbackEnlistment aufrufen. Nachdem der Ressourcen-Manager ZwCreateEnlistment aufgerufen hat, um sich in eine Transaktion ein eintragen zu lassen, kann er die Transaktion jederzeit zurücksetzen, bevor er ZwPrepareComplete aufruft.

Transaktionsclients können ein Rollback für ihre Transaktionen ausführen, indem sie ZwRollbackTransaction aufrufen. Nachdem ein Transaktionsclient ZwCreateTransaction aufgerufen hat, um eine Transaktion zu erstellen, kann er die Transaktion jederzeit zurücksetzen, bevor er ZwCommitTransaction aufruft.

Darüber hinaus kann ein Transaktionsclient einen Timeoutwert für eine Transaktion festlegen, indem er ZwSetInformationTransaction aufruft. KTM führt ein Rollback für die Transaktion aus, wenn kein Commit für den angegebenen Zeitraum erfolgt ist.

Wenn ein Aufruf von ZwRollbackEnlistment oder ZwRollbackTransaction erfolgt oder ein Timeoutwert überschritten wird, sendet KTM eine TRANSACTION_NOTIFY_ROLLBACK Benachrichtigung an alle Ressourcenmanager.

Wenn jeder Ressourcen-Manager eine TRANSACTION_NOTIFY_ROLLBACK-Benachrichtigung empfängt, muss er folgendes tun:

  1. Stellen Sie die Daten der Transaktion in den Zustand wieder her, in dem sie sich befanden, bevor der Ressourcen-Manager in der Transaktion eingetragen wurde.

    In der Regel stellt ein Ressourcen-Manager die Daten der Transaktion wieder her, indem er die gespeicherten Anfangsdaten der Transaktion aus dem Protokolldatenstrom in den öffentlichen, dauerhaften Speicher der Datenbank kopiert. Weitere Informationen zur Verwendung von Protokolldatenströmen finden Sie unter Verwenden von Protokolldatenströmen mit KTM.

  2. Rufen Sie ZwRollbackComplete auf.

Nach dem Aufruf von ZwRollbackComplete sollte der Ressourcen-Manager ZwClose aufrufen, um das Eintragshandle zu schließen.

Wenn ein Ressourcen-Manager den Rollbackvorgang initiiert hat, muss er seine Clientschnittstelle verwenden, um den Client darüber zu informieren, dass die Transaktion fehlgeschlagen ist.