Delen via


Virtuele klokwaarden gebruiken

KTM biedt een virtuele klok voor elk transactiebeheerobject. Wanneer een resourcemanager ZwCreateTransactionManager aanroept, stelt KTM de virtuele klokwaarde van het object in op 1. KTM verhoogt de waarde van de virtuele klok elke keer als een doorvoerbewerking begint. Wanneer KTM naar de logboekstroom schrijft, bevat deze de huidige virtuele klokwaarde in de logboekrecord.

Wanneer een resourcemanager ZwRecoverTransactionManager aanroept, leest KTM logboekstreamrecords tot het einde van de stream en stelt het de virtuele klokwaarde van het transactiebeheerobject in op de laatste waarde die in de logboekstroom van het object wordt gevonden.

Wanneer een resourcemanager ZwRollforwardTransactionManager aanroept, leest KTM logboekstreamrecords tot aan de opgegeven klokwaarde en wordt de virtuele klokwaarde van het transactiebeheerobject ingesteld op de opgegeven klokwaarde.

Met KTM kunnen resourcemanagers en superieure transactiebeheerders de virtuele klokwaarde van een transactiemanagerobject wijzigen, maar ze hoeven doorgaans niet de klokwaarde te wijzigen.

Wanneer virtuele klokwaarden wijzigen

Normaal gesproken hoeft uw transactieverwerkingssysteem (TPS) geen virtuele klokwaarden te wijzigen, tenzij de onderdelen in uw TPS meerdere logboekstreams proberen te synchroniseren.

Stel dat uw TPS meerdere resourcemanagers bevat die met elkaar communiceren tijdens pre-prepare/prepare/commit-reeksen. Stel ook dat elke Resource Manager een transaction manager-object maakt dat een unieke logboekstroom heeft. Om ervoor te zorgen dat KTM de status van alle resourcemanagers herstelt naar hetzelfde tijdstip tijdens een herstelbewerking, kunnen deze resourcemanagers de volgende stappen gebruiken:

  • Wanneer een resourcemanager met een andere communiceert, wordt de meest recente virtuele klokwaarde doorgegeven die deze heeft ontvangen van KTM of nog een andere resourcemanager.

  • Wanneer een Resource Manager een KTM-routine aanroept die een virtuele klokwaarde accepteert (zie de volgende sectie in dit onderwerp), wordt de hoogste klokwaarde doorgegeven die deze heeft ontvangen van KTM of een andere resourcemanager.

  • Elke Resource Manager schrijft virtuele klokwaarden naar de logboekstroom en gebruikt deze waarden wanneer er terugdraaibewerkingen of herstelbewerkingen worden uitgevoerd.

Deze stappen zorgen ervoor dat de virtuele klokwaarden die door KTM worden opgeslagen voor elk transaction manager-object bijna of exact overeenkomen. Wanneer een herstelbewerking ervoor zorgt dat KTM de logboekstreams leest of wanneer een terugdraaibewerking ervoor zorgt dat de resourcemanagers hun logboekstreams lezen, is het herstel of terugdraaien gebaseerd op gesynchroniseerde logboekstreams.

Virtuele klokwaarden wijzigen

Resourcebeheerders kunnen de virtuele klokwaarde wijzigen door een nieuwe waarde door te geven aan ZwPrePrepareComplete, ZwPrepareComplete, ZwCommitComplete, ZwRollbackComplete, ZwReadOnlyEnlistment of ZwSinglePhaseReject.

Superieure transactiebeheerders kunnen de virtuele klokwaarde wijzigen door een nieuwe waarde door te geven aan ZwPrePrepareEnlistment, ZwPrepareEnlistment, ZwCommitEnlistment of ZwReadOnlyEnlistment.

Bovendien kan een resourcemanager of superieure transactiebeheerder die gebruikmaakt van een ResourceManagerNotification-callbackroutine de virtuele klokwaarde wijzigen die de callback-routine ontvangt. KTM slaat vervolgens de bijgewerkte waarde op.

Als een resourcemanager of superieure transactiemanager een nieuwe klokwaarde doorgeeft aan KTM, slaat KTM de nieuwe waarde alleen op als deze groter is dan de huidige klokwaarde. Anders behoudt KTM de huidige klokwaarde.

Resourcemanagers en superieure transactiebeheerders kunnen de virtuele klokwaarde van een transactiemanagerobject verkrijgen door de ZwQueryInformationTransactionManager-routine aan te roepen.