Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Er zijn twee typen doorvoerbewerkingen: doorvoeren in één fase en doorvoeren in meerdere fasen. Een doorvoerbewerking met één fase bestaat uit één melding waarop resourcemanagers moeten reageren, terwijl een doorvoerbewerking met meerdere fasen aanvullende meldingen bevat voor voorbereidingsstappen.
Een doorvoerbewerking met één fase is eenvoudiger te implementeren. Het is geschikt voor transactieverwerkingssystemen (TPSs) die een van de volgende kenmerken hebben:
Eén Resource Manager.
Meerdere resourcemanagers, waarvan allemaal behalve één het kenmerk Alleen-lezen hebben en niet deelnemen aan de committeringsbewerking.
Een doorvoerbewerking met meerdere fasen is nodig als meerdere resourcemanagers deelnemen aan de doorvoerbewerking.
doorvoerbewerkingen Single-Phase
Als u wilt dat uw TPS implementatiebewerkingen met één fase ondersteunt, moet één (en slechts één) resourcemanager zich registreren om TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT meldingen te ontvangen voor de opname in de lijst. Alle andere resourcebeheerders moeten uitsluitend-lezen zijn.
Een TPS die een superieure transactiebeheerder bevat, kan geen doorvoer met één fase gebruiken.
Als een resourcemanager is geregistreerd voor het ontvangen van TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT meldingen, verzendt KTM dit soort meldingen wanneer een transactionele client ZwCommitTransaction aanroept.
Wanneer de Resource Manager een TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT melding voor een transactie ontvangt, kan deze de transactie doorvoeren of doorvoeren met één fase weigeren.
Als u de transactie wilt doorvoeren, moet de Resource Manager het volgende doen:
Maak alle gegevens die in een niet-permanente cache (in-memory opslag) worden vastgehouden, zoals het marshalling-gebied van CLFS voor een CLFS-logstream, vrij.
De resourcemanager moet de gegevens van de cache verplaatsen naar een duurzaam opslagmedium. Een resourcemanager die CLFS gebruikt, kan bijvoorbeeld ClfsFlushBuffers aanroepen.
Breng alle gegevenswijzigingen permanent en openbaar aan (dat wil gezegd, zichtbaar buiten het bereik van de resourcemanager).
Bel ZwCommitComplete.
Nadat ZwCommitComplete is aangeroepen, moet de resourcemanager ZwClose aanroepen om de aanmeldgreep te sluiten.
Als u een doorvoerbewerking met één fase voor de transactie wilt weigeren, kan de resourcemanager ZwSinglePhaseReject aanroepen. Als de resourcemanager ZwSinglePhaseReject aanroept, wijzigt KTM onmiddellijk de doorvoerbewerking van één fase in meerdere fasen.
Als andere bronnenbeheerders deelnemen aan dezelfde transactie, moeten ze alleen-lezen zijn. Ze moeten zich echter registreren om de TRANSACTION_NOTIFY_RM_DISCONNECTED melding te ontvangen, die ze ontvangen als de Resource Manager die de doorvoerbewerking met één fase verwerkt, de aanmeldingsgreep sluit zonder aan te geven dat de transactie is doorgevoerd of teruggedraaid.
Doorvoerbewerkingen met meerdere fasen
Een doorvoerbewerking met meerdere fasen begint wanneer een van de volgende gebeurtenissen plaatsvindt:
Een transactionele client roept ZwCommitTransaction aan en er zijn geen resourcebeheerders geregistreerd om TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT meldingen te ontvangen.
Een resourcemanager roept ZwSinglePhaseReject aan nadat deze een TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT melding heeft ontvangen.
Een superieure transactiemanager roept ZwPrePrepareEnlistment aan.
Doorvoerbewerkingen met meerdere fasen bestaan uit drie opeenvolgende fasen: vooraf voorbereiden, voorbereiden en doorvoeren.
Fase vooraf voorbereiden
De voorbereidingsfase (ook wel fase nul genoemd) van de doorvoerbewerking begint wanneer KTM een TRANSACTION_NOTIFY_PREPREPARE melding naar alle resourcemanagers verzendt. KTM verzendt deze melding als er geen resourcemanagers ondersteuning bieden voor een doorvoerbewerking met één fase voor de transactie, of als een superieure transactiemanager ZwPrePrepareEnlistment aanroept.
Wanneer elke Resource Manager de melding TRANSACTION_NOTIFY_PREPREPARE ontvangt, moet deze het volgende doen:
Maak alle gegevens leeg die zijn opgeslagen in een niet-permanente cache (in-memory opslag), zoals het CLFS-marshalling-gebied voor een CLFS-logboekstream.
De resourcemanager moet de gegevens van de cache verplaatsen naar een duurzaam opslagmedium. Een resourcemanager die CLFS gebruikt, kan bijvoorbeeld ClfsFlushBuffers aanroepen.
Roep ZwPrePrepareComplete aan.
Nadat een Resource Manager ZwPreprepareComplete heeft aangeroepen, kan deze clientaanvragen blijven ontvangen en onderhouden. Maar de Resource Manager moet alle gegevenswijzigingen behandelen als passthrough-bewerkingen in de cache die onmiddellijk naar een duurzaam opslagmedium worden geschreven.
Als een resourcemanager een fout tegenkomt tijdens het verwerken van een TRANSACTION_NOTIFY_PREPREPARE melding, moet zwRollbackEnlistment worden aangeroepen om de transactie terug te draaien.
Fase voorbereiden
De voorbereidingsfase (ook wel fase één genoemd) van de doorvoerbewerking begint wanneer KTM een TRANSACTION_NOTIFY_PREPARE melding naar alle resourcemanagers verzendt. KTM verzendt deze melding na TRANSACTION_NOTIFY_PREPREPARE als er geen resourcemanagers ondersteuning bieden voor doorvoeren in één fase of als een superieure transactiemanager ZwPrepareEnlistment aanroept.
Wanneer elke Resource Manager de melding TRANSACTION_NOTIFY_PREPARE ontvangt, moet deze het volgende doen:
Stop de serviceclientaanvragen en rapporteer eventuele volgende aanvragen van clients als clientfouten.
Zorg ervoor dat alle gegevens zijn verplaatst naar duurzame opslag.
Roep ZwPrepareComplete aan.
Als een resourcemanager een fout tegenkomt tijdens het verwerken van een TRANSACTION_NOTIFY_PREPARE melding, moet zwRollbackEnlistment worden aangeroepen om de transactie terug te draaien. Resource Manager kan de transactie echter niet terugdraaien nadat zwPrepareComplete is aangeroepen.
Doorvoerfase
De doorvoeringsfase (ook wel fase twee genoemd) van de doorvoerbewerking begint wanneer KTM een TRANSACTION_NOTIFY_COMMIT melding naar alle resourcemanagers verzendt. KTM verzendt deze melding na TRANSACTION_NOTIFY_PREPARE als er geen resourcemanagers ondersteuning bieden voor doorvoeren in één fase of als een superieure transactiemanager ZwCommitEnlistment aanroept.
Wanneer elke Resource Manager de melding TRANSACTION_NOTIFY_COMMIT ontvangt, moet deze het volgende doen:
Breng alle gegevenswijzigingen permanent en openbaar aan (dat wil gezegd, zichtbaar voor andere transacties).
Normaal gesproken brengt een resourcemanager wijzigingen permanent en openbaar aan door de opgeslagen gegevens van de transactie uit de logboekstroom te kopiëren naar de openbare, permanente opslag van de database. Zie Logboekstreams gebruiken met KTM voor meer informatie over het gebruik van logboekstreams.
Bel ZwCommitComplete.
Nadat de resourcemanager ZwCommitComplete heeft aangeroepen, moet zwClose worden aangeroepen om de aanmeldgreep te sluiten.
Als een Resource Manager een fout tegenkomt tijdens het verwerken van een TRANSACTION_NOTIFY_COMMIT melding, moet deze zichzelf afsluiten. De volgende keer dat het besturingssysteem de resource manager opnieuw laadt, moet het herstelproces van de resourcemanager de transactie herstellen naar een status die bekend was goed voordat de fout optrad.