Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
KTM poskytuje virtuální hodiny pro každý objekt správce transakcí. Když správce prostředků zavolá ZwCreateTransactionManager, KTM nastaví hodnotu virtuálního hodin objektu na 1. KTM zvýší hodnotu virtuálních hodin při každém zahájení operace potvrzení. Kdykoli KTM zapíše do svého logovacího proudu, zahrne do záznamu protokolu aktuální hodnotu virtuálních hodin.
Když správce prostředků zavolá ZwRecoverTransactionManager, KTM přečte záznamy log streamu až do konce streamu, a nastaví hodnotu virtuálních hodin objektu správce transakcí na poslední hodnotu, kterou najde v log streamu objektu.
Když správce prostředků volá ZwRollforwardTransactionManager, KTM přečte záznamy toku protokolu až do zadané hodnoty času a nastaví hodnotu virtuálního času objektu správce transakcí na tuto zadanou hodnotu.
KTM umožňuje správcům prostředků a nadřízeným správcům transakcí upravovat hodnotu virtuálních hodin objektu správce transakcí, ale obvykle nemusí měnit hodnotu hodin.
Kdy upravit hodnoty virtuálních hodin
Systém zpracování transakcí (TPS) obvykle nemusí měnit hodnoty virtuálních hodin, pokud se komponenty v tpS nepokouší synchronizovat více datových proudů protokolů.
Předpokládejme například, že vaše TPS obsahuje více správců prostředků, které spolu komunikují během sekvencí předpřípravy, přípravy/potvrzení. Předpokládejme také, že každý správce prostředků vytvoří objekt správce transakcí, který má jedinečný datový proud protokolu. Aby se zajistilo, že KTM obnoví stav všech správců prostředků do stejného bodu v čase během operace obnovení, můžou tito správci prostředků použít následující kroky:
Když jeden správce prostředků komunikuje s druhým, předá nejnovější hodnotu virtuálních hodin, kterou přijal z KTM nebo jiného správce prostředků.
Pokaždé, když správce prostředků volá rutinu KTM, která přijímá hodnotu virtuálních hodin (viz následující část tohoto tématu), předává nejvyšší hodnotu hodin, kterou přijala od KTM nebo jiného správce prostředků.
Každý správce prostředků zapíše do streamu protokolu hodnoty virtuálních hodin a tyto hodnoty použije při provádění operací vrácení zpět nebo obnovení.
Tyto kroky způsobují, že hodnoty virtuálních hodin, které KTM ukládá pro každý objekt správce transakcí téměř nebo přesně odpovídají. Proto když operace obnovení způsobí, že KTM přečte streamy protokolů nebo když operace vrácení zpět způsobí, že správci prostředků čtou streamy protokolů, obnovení nebo vrácení zpět je založené na synchronizovaných streamech protokolů.
Úprava hodnot virtuálních hodin
Správci prostředků mohou upravit hodnotu virtuálních hodin předáním nové hodnoty ZwPrePrepareComplete, ZwPrepareComplete, ZwCommitComplete, ZwRollbackComplete, ZwReadOnlyEnlistmentnebo ZwSinglePhaseReject.
správci transakcí Superior mohou upravit hodnotu virtuálních hodin předáním nové hodnoty ZwPrePrepareEnlistment, ZwPrepareEnlistment, ZwCommitEnlistmentnebo ZwReadOnlyEnlistment.
Správce prostředků nebo nadřízený správce transakcí, který používá ResourceManagerNotification rutinu zpětného volání, může upravit hodnotu virtuálního času, kterou rutina zpětného volání přijímá. KTM pak uloží aktualizovanou hodnotu.
Pokud správce prostředků nebo nadřízený správce transakcí předá KTM novou hodnotu hodin, nástroj KTM novou hodnotu uloží pouze v případě, že je větší než aktuální hodnota hodin. V opačném případě KTM zachová aktuální hodnotu hodin.
Správci prostředků a nadřízení správci transakcí mohou získat hodnotu virtuálních hodin objektu správce transakcí voláním rutiny ZwQueryInformationTransactionManager.