Sdílet prostřednictvím


Zpracování operací vrácení zpět

Správce prostředků, transakční klient nebo KTM může vrátit transakci zpět, pokud zjistí, že transakce nesmí být potvrzena (obvykle proto, že byla zjištěna chyba).

Pokud chcete vrátit transakci zpět, správce prostředků může volat ZwRollbackEnlistment. Jakmile správce prostředků zavolá ZwCreateEnlistment k zařazení do transakce, může vrátit transakce kdykoli předtím, než zavolá ZwPrepareComplete.

Transakční klienti mohou vrátit zpět své transakce voláním ZwRollbackTransaction. Jakmile transakční klient nazývá ZwCreateTransaction k vytvoření transakce, může vrátit transakce kdykoli předtím, než volá ZwCommitTransaction.

Kromě toho může transakční klient nastavit hodnotu časového limitu pro transakci voláním ZwSetInformationTransaction. KTM vrátí transakci zpět, pokud nebyla potvrzena zadanou dobou.

Při volání ZwRollbackEnlistment nebo ZwRollbackTransaction nebo při překročení hodnoty časového limitu KTM odešle TRANSACTION_NOTIFY_ROLLBACK oznámení všem správcům prostředků.

Když každý správce prostředků obdrží oznámení TRANSACTION_NOTIFY_ROLLBACK, musí provést následující:

  1. Obnovte data transakce do stavu, ve kterém byla před zapojením správce prostředků do transakce.

    Správce prostředků obvykle obnoví data transakce zkopírováním počátečních dat transakce z datového proudu protokolu do veřejného, trvalého úložiště databáze. Další informace o tom, jak používat protokolové toky, najdete v tématu Použití protokolových toků s KTM.

  2. Zavolejte ZwRollbackComplete.

Po volání ZwRollbackComplete by měl správce prostředků zavolat ZwClose ke zavření popisovače zařazení.

Pokud správce prostředků inicioval operaci vrácení zpět, musí pomocí svého klientského rozhraní informovat klienta, že transakce selhala.