Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
KTM tillhandahåller en virtuell klocka för varje transaktionshanterarobjekt. När en resurshanterare anropar ZwCreateTransactionManager anger KTM objektets virtuella klockvärde till 1. KTM ökar det virtuella klockvärdet varje gång en transaktionsåtgärd påbörjas. När KTM skriver till sin loggström, inkluderar den det aktuella virtuella klockvärdet i loggposten.
När en resurshanterare anropar ZwRecoverTransactionManager läser KTM loggströmsposter upp till slutet av strömmen och anger transaktionshanterarens objekts virtuella klockvärde till det sista värde som hittas i objektets loggström.
När en resurshanterare anropar ZwRollforwardTransactionManager läser KTM loggströmsposter upp till det angivna klockvärdet och anger transaktionshanterarens objekts virtuella klockvärde till det angivna klockvärdet.
Med KTM kan resurshanterare och överlägsna transaktionshanterare ändra ett transaktionshanterarobjekts virtuella klockvärde, men de behöver vanligtvis inte ändra klockvärdet.
När du ska ändra värden för virtuell klocka
Vanligtvis behöver ditt transaktionsbearbetningssystem (TPS) inte ändra värden för virtuell klocka om inte komponenterna i TPS försöker synkronisera flera loggströmmar.
Anta till exempel att din TPS innehåller flera resurshanterare som kommunicerar med varandra under föreberedelse-, förberedelse-, kommittsekvenser. Anta också att varje resurshanterare skapar ett transaktionshanterarobjekt som har en unik loggström. För att säkerställa att KTM återställer tillståndet för alla resurshanterare till samma tidpunkt under en återställningsåtgärd kan dessa resurshanterare använda följande steg:
När en resurshanterare kommunicerar med en annan skickar den det senaste virtuella klockvärdet som den har tagit emot från antingen KTM eller ännu en resurshanterare.
När en resurshanterare anropar en KTM-rutin som accepterar ett virtuellt klockvärde (se följande avsnitt i det här avsnittet) skickar den det högsta klockvärdet som den har fått från KTM eller en annan resurshanterare.
Varje resurshanterare skriver värden för virtuella klockor i loggströmmen och använder dessa värden när de utför rollback- eller återställningsåtgärder.
De här stegen gör att de virtuella klockvärden som KTM lagrar för varje transaktionshanterarens objekt nästan eller exakt matchar. När en återställningsåtgärd gör att KTM läser sina loggströmmar, eller när en återställningsåtgärd gör att resurshanterarna läser sina loggströmmar, baseras återställningen eller återställningen därför på synkroniserade loggströmmar.
Ändra värden för virtuell klocka
Resurshanterare kan ändra det virtuella klockvärdet genom att skicka ett nytt värde till ZwPrePrepareComplete, ZwPrepareComplete, ZwCommitComplete, ZwRollbackComplete, ZwReadOnlyEnlistment eller ZwSinglePhaseReject.
Överlägsna transaktionshanterare kan ändra värdet för den virtuella klockan genom att skicka ett nytt värde till ZwPrepareEnlistment, ZwPrepareEnlistment, ZwCommitEnlistment eller ZwReadOnlyEnlistment.
Dessutom kan en resurshanterare eller överlägsen transaktionshanterare som använder en ResourceManagerNotification-återanropsrutin ändra det virtuella klockvärde som återanropsrutinen tar emot. KTM sparar sedan det uppdaterade värdet.
Om en resurshanterare eller överlägsen transaktionshanterare skickar ett nytt klockvärde till KTM sparar KTM endast det nya värdet om det är större än det aktuella klockvärdet. Annars behåller KTM det aktuella klockvärdet.
Resurshanterare och överlägsna transaktionshanterare kan hämta ett transaktionshanterarobjekts virtuella klockvärde genom att anropa rutinen ZwQueryInformationTransactionManager .