Delen via


Herstelbewerkingen beheren

In een herstelbewerking probeert een transactieverwerkingssysteem (TPS) de status te herstellen van de informatie die zich in logboekstromen bevindt. Nadat een herstelbewerking is voltooid, moeten alle transacties zich in een vastgelegde of teruggedraaide status bevinden en moeten alle resourcegegevens een bekende goede status hebben.

Soms stopt een TPS voordat alle transacties zijn voltooid. Het besturingssysteem kan bijvoorbeeld vastlopen. Daarom moeten resourcebeheerders herstelbewerkingen starten wanneer ze beginnen te draaien. De herstelbewerking probeert te bepalen of transacties onvolledig zijn. Als onvolledige transacties in het logboek worden gevonden, probeert de herstelbewerking deze transacties vast te leggen of terug te draaien.

Voor een op KTM gebaseerde TPS bestaat elke herstelbewerking uit twee stappen. De eerste stap omvat het herstellen van gegevens uit de logboekstroom van het transactiebeheerobject. De tweede stap omvat het herstellen van gegevens uit de logboekstream van de resourcemanager.

Een TPS kan herstellen tot het einde van alle logboekstreams of, als de resourcemanagers virtuele klokwaarden behouden, kan het herstellen tot een opgegeven klokwaarde.

Informatie herstellen uit de logboekstream van een Transaction Manager-object

Direct nadat een resourcemanager ZwCreateTransactionManager of ZwOpenTransactionManager aanroept, moet zwRecoverTransactionManager worden aangeroepen. De ZwRecoverTransactionManager-routine leest de logboekstroom die deel uitmaakt van het transaction manager-object. Deze routine reconstrueert de status van het transactiebeheerobject (inclusief alle transacties, deelnames en resourcemanagers) vanuit de herstelinformatie die zich in de logboekstroom bevindt. Dit begint bij het laatste herstartgebied dat KTM heeft gemaakt en loopt tot het einde van de stroom.

Als u wilt herstellen van het laatste herstartgebied tot een opgegeven virtuele klokwaarde, kan de resourcemanager ZwRollforwardTransactionManager aanroepen in plaats van ZwRecoverTransactionManager.

Gegevens herstellen uit de logboekstream van Resource Manager

Direct nadat een resourcemanager ZwCreateResourceManager of ZwOpenResourceManager aanroept, moet zwRecoverResourceManager worden aangeroepen. De ZwRecoverResourceManager-routine probeert de transacties te herstellen die zijn gekoppeld aan elk van de lijst met resourcemanagers.

Wanneer een resourcemanager ZwRecoverResourceManager aanroept, verzendt KTM TRANSACTION_NOTIFY_RECOVER meldingen voor elk van de lijst met resourcemanagers. De resourcemanager moet ZwRecoverEnlistment telkens aanroepen wanneer een van de TRANSACTION_NOTIFY_RECOVER meldingen wordt ontvangen.

Wanneer de resourcemanager ZwRecoverEnlistment aanroept, verzendt KTM een van de volgende meldingen:

  • TRANSACTION_NOTIFY_COMMIT

    De resourcemanager moet informatie in de logboekstroom gebruiken om de transactie door te voeren en vervolgens ZwCommitComplete aan te roepen.

  • TRANSACTIE_MELDEN_TERUGDRAAIEN

    De resourcemanager moet informatie in de logboekstroom gebruiken om de transactie terug te draaien en vervolgens ZwRollbackComplete aan te roepen.

  • TRANSACTIE_MELDING_TWIJFELACHTIG

    KTM heeft de status van de transactie niet bepaald en stuurt later een melding over doorvoeren of terugdraaien.

Normaal gesproken verzendt KTM een TRANSACTION_NOTIFY_COMMIT melding als wordt bepaald dat voordat de TPS werd gestopt en opnieuw gestart, alle resourcemanagers ZwPrepareComplete hebben gebeld. KTM verzendt een TRANSACTION_NOTIFY_ROLLBACK melding als wordt vastgesteld dat een of meer resourcemanagers ZwPrepareComplete niet hebben aangeroepen.

Nadat KTM een TRANSACTION_NOTIFY_RECOVER melding voor elke aanhaling heeft verzonden, wordt er een TRANSACTION_NOTIFY_LAST_RECOVER melding verzonden.

Als uw resourcemanager ZwRollforwardTransactionManager in plaats van ZwRecoverTransactionManager heet, moet deze alleen de virtuele klokwaarde herstellen die is opgegeven voor ZwRollforwardTransactionManager.

Resourcemanagers kunnen ZwSetInformationEnlistment aanroepen om aangepaste herstelgegevens in te stellen. KTM slaat deze informatie op en schrijft deze naar de logboekstroom, maar KTM probeert de informatie niet te interpreteren. De resourcemanager kan de herstelgegevens op elk gewenst moment ophalen door ZwQueryInformationEnlistment aan te roepen.

Superieure transactiebeheerders ontvangen soms TRANSACTION_NOTIFY_RECOVER_QUERY meldingen tijdens een herstelbewerking.