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.
Existují dva typy operací potvrzení: jednofázové potvrzení a vícefázové potvrzení. Operace jednofázového potvrzení se skládá z jediného oznámení, na které musí správci prostředků reagovat, zatímco operace s vícefázovým potvrzením obsahuje další oznámení o krocích přípravy.
Implementace operace jednofázového potvrzení je jednodušší. Je vhodné pro systémy zpracování transakcí (TPS), které mají jednu z následujících charakteristik:
Jeden správce prostředků.
Několik správců prostředků, z nichž všechny jsou jen pro čtení a nejsou součástí operace potvrzení.
Operace s vícefázovým potvrzením je nutná, pokud se operace potvrzení účastní více správců prostředků.
Operace commitu Single-Phase
Pokud chcete, aby TPS podporoval operace s jednofázovým potvrzením, musí se jeden (a pouze jeden) správce prostředků zaregistrovat, aby dostával oznámení TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT pro svá zařazení. Všichni ostatní správci prostředků musí být jen pro čtení.
TPS, který obsahuje vyspělejšího správce transakcí, nemůže použít jednofázové potvrzení.
Když se správa prostředků zaregistruje k přijímání oznámení TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, KTM odešle tento typ oznámení, když transakční klient volá ZwCommitTransaction.
Když správce prostředků obdrží TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT oznámení o transakci, může buď potvrdit transakci, nebo odmítnout jednofázové potvrzení.
Pokud chcete transakci potvrdit, správce prostředků musí provést následující:
Vyprázdněte všechna data, která se uchovávají v neperzistentní mezipaměti (v úložišti v paměti), jako je oblast zařazování CLFS pro stream protokolů CLFS.
Správce prostředků musí přesunout data z mezipaměti na trvalé médium úložiště. Například správce prostředků, který používá CLFS, může volat ClfsFlushBuffers.
Proveďte všechny změny dat jako trvalé a veřejné (to znamená viditelné mimo obor Resource Manageru).
Zavolejte ZwCommitComplete.
Po volání ZwCommitComplete by správce prostředků měl zavolat ZwClose zavřít popisovač zařazení.
Chcete-li odmítnout operaci jednofázového potvrzení transakce, správce prostředků může volat ZwSinglePhaseReject. Pokud správce prostředků zavolá ZwSinglePhaseReject, KTM okamžitě změní operaci potvrzení z jedné fáze na vícefázovou.
Pokud se jiní správci prostředků zapojí do stejné transakce, musí být jen pro čtení. Musí se však zaregistrovat, aby obdrželi oznámení TRANSACTION_NOTIFY_RM_DISCONNECTED, které obdrží, pokud správce prostředků, který zpracovává operaci jednofázového potvrzení, zavře popisovač zařazení bez toho, aby indikoval, že transakce byla potvrzena nebo vrácena.
Vícefázové potvrzovací operace
Operace vícefázového potvrzení začíná, když dojde k jedné z následujících událostí:
Transakční klient volá ZwCommitTransaction, a žádní správci prostředků se nezaregistrovali pro příjem notifikací TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT.
Správce prostředků zavolá ZwSinglePhaseReject poté, co obdrží oznámení TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT.
Operace s vícefázovým potvrzením se skládají ze tří sekvenčních fází: předběžné přípravy, přípravy a potvrzení.
Fáze předběžné přípravy
Fáze předběžné přípravy (označovaná také jako fáze nula) operace potvrzení začíná, když KTM pošle TRANSACTION_NOTIFY_PREPREPARE oznámení všem správcům prostředků. KTM odešle toto oznámení, pokud žádní správci prostředků nepodporují operaci jednofázového potvrzení pro transakci nebo pokud nadřízený správce transakcí volá ZwPrePrepareEnlistment.
Když každý správce prostředků obdrží oznámení TRANSACTION_NOTIFY_PREPREPARE, musí provést následující:
Vyprázdněte všechna data, která se uchovávají v neudržované mezipaměti (v úložišti v paměti), jako je například oblast zařazování CLFS pro stream protokolů CLFS.
Správce prostředků musí přesunout data z mezipaměti na trvalé médium úložiště. Například správce prostředků, který používá CLFS, může volat ClfsFlushBuffers.
Zavolejte ZwPrePrepareComplete.
Jakmile správce prostředků zavolá ZwPreprepareComplete, může dál přijímat a obsluhovat požadavky klientů. Správce prostředků ale musí zacházet se všemi úpravami dat jako s průchozími operacemi mezipaměti, které se okamžitě zapisují do odolného úložného média.
Pokud správce prostředků při zpracování oznámení TRANSACTION_NOTIFY_PREPREPARE narazí na chybu, měl by zavolat ZwRollbackEnlistment pro vrácení transakce zpět.
Příprava fáze
Fáze přípravy (označovaná také jako fáze jedna) operace potvrzení začíná, když KTM odešle TRANSACTION_NOTIFY_PREPARE oznámení všem správcům prostředků. KTM odešle toto oznámení po TRANSACTION_NOTIFY_PREPREPARE, pokud žádní správci prostředků nepodporují jednofázové potvrzení nebo pokud nadřazený správce transakcí volá ZwPrepareEnlistment.
Když každý správce prostředků obdrží oznámení TRANSACTION_NOTIFY_PREPARE, musí provést následující:
Ukončete servisní požadavky klientů a nahlašujte všechny následné požadavky klienta jako chyby klienta.
Ujistěte se, že se všechna data přesunula do odolného úložiště.
Zavolejte ZwPrepareComplete.
Pokud správce prostředků při zpracování oznámení TRANSACTION_NOTIFY_PREPARE narazí na chybu, měl by zavolat ZwRollbackEnlistment pro vrácení transakce zpět. Správce prostředků však nemůže zrušit transakci poté, co zavolá ZwPrepareComplete.
Fáze potvrzení
Fáze potvrzení (označovaná také jako fáze dvě) operace potvrzení začíná, když KTM odešle TRANSACTION_NOTIFY_COMMIT oznámení všem správcům prostředků. KTM odešle toto oznámení po TRANSACTION_NOTIFY_PREPARE, pokud žádní správci prostředků nepodporují jednofázové potvrzení nebo pokud nadřízený správce transakcí volá ZwCommitEnlistment.
Když každý správce prostředků obdrží oznámení TRANSACTION_NOTIFY_COMMIT, musí udělat toto:
Proveďte všechny změny dat jako trvalé a veřejné (to znamená viditelné pro ostatní transakce).
Správce prostředků obvykle provádí změny trvale a veřejně zkopírováním uložených dat transakce z datového proudu protokolu do veřejného a trvalého úložiště databáze. Další informace o tom, jak používat protokolové streamy, najdete v sekci Použití protokolových streamů s KTM.
Zavolejte ZwCommitComplete.
Jakmile správce prostředků zavolá ZwCommitComplete, měl by zavolat ZwClose zavřít popisovač zařazení.
Pokud správce prostředků při zpracování oznámení TRANSACTION_NOTIFY_COMMIT narazí na chybu, měl by se vypnout. Při příštím opětovném načtení správce prostředků operačního systému by proces obnovení resource manageru měl obnovit transakci do stavu, o kterém bylo známo, že je dobré předtím, než došlo k chybě.