Delen via


Terugdraaibewerkingen afhandelen

Een resourcemanager, een transactionele client of KTM kan een transactie terugdraaien als deze bepaalt dat de transactie niet moet worden doorgevoerd (meestal omdat er een fout is gedetecteerd).

Een resourcemanager kan ZwRollbackEnlistment aanroepen om een transactie terug te draaien. Nadat de resourcemanager ZwCreateEnlistment heeft aangeroepen om een transactie in te schakelen, kan de transactie op elk gewenst moment worden teruggedraaid voordat ZwPrepareComplete wordt aangeroepen.

Transactionele clients kunnen hun transacties terugdraaien door ZwRollbackTransaction aan te roepen. Nadat een transactionele client ZwCreateTransaction heeft aangeroepen om een transactie te maken, kan de transactie op elk gewenst moment worden teruggedraaid voordat ZwCommitTransaction wordt aangeroepen.

Daarnaast kan een transactionele client een time-outwaarde voor een transactie instellen door ZwSetInformationTransaction aan te roepen. KTM rolt de transactie terug als deze niet is vastgelegd met de opgegeven hoeveelheid tijd.

Wanneer een aanroep naar ZwRollbackEnlistment of ZwRollbackTransaction wordt uitgevoerd of wanneer een time-outwaarde wordt overschreden, verzendt KTM een TRANSACTION_NOTIFY_ROLLBACK melding naar alle resourcemanagers.

Wanneer elke Resource Manager een TRANSACTION_NOTIFY_ROLLBACK melding ontvangt, moet deze het volgende doen:

  1. Herstel de gegevens van de transactie naar de status waarin deze zich bevond voordat de resourcemanager in de transactie was opgenomen.

    Normaal gesproken herstelt een Resource Manager de gegevens van de transactie door de opgeslagen initiƫle gegevens van de transactie uit de logboekstroom te kopiƫren naar de openbare, permanente opslag van de database. Zie Logboekstreams gebruiken met KTM voor meer informatie over het gebruik van logboekstreams.

  2. Roep ZwRollbackComplete aan.

Nadat ZwRollbackComplete is aangeroepen, moet de resourcemanager ZwClose aanroepen om de enrolment-handle te sluiten.

Als een Resource Manager de terugdraaibewerking heeft gestart, moet deze de clientinterface gebruiken om de client te informeren dat de transactie is mislukt.