Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Kétféle véglegesítési művelet létezik: egyfázisú véglegesítés és többfázisú véglegesítés. Az egyfázisú véglegesítési művelet egyetlen értesítésből áll, amelyekre az erőforrás-kezelőknek válaszolniuk kell, míg a többfázisú véglegesítési művelet további értesítéseket tartalmaz az előkészítési lépésekhez.
Az egyfázisú véglegesítési művelet implementálása egyszerűbb. Olyan tranzakciófeldolgozó rendszerek (TPS-k) esetében célszerű, amelyek az alábbi jellemzők egyikével rendelkeznek:
Egyetlen erőforrás-kezelő.
Több erőforrás-kezelő van, amelyek közül csak egy nem írásvédett, és nem vesznek részt a véglegesítési műveletben.
Többfázisú véglegesítési műveletre van szükség, ha több erőforrás-kezelő is részt vesz a véglegesítési műveletben.
Single-Phase véglegesítési műveletek
Ha azt szeretné, hogy a TPS támogassa az egyfázisú véglegesítési műveleteket, egy (és csak egy) erőforrás-kezelőnek regisztrálnia kell, hogy TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT értesítéseket kapjon a regisztrációiról. Minden más erőforrás-kezelő csak olvasható lehet.
A felsőbb szintű tranzakciókezelőt tartalmazó TPS nem használhat egyfázisú véglegesítést.
Ha egy erőforrás-kezelő regisztrált TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT értesítések fogadására, a KTM ekkora értesítést küld, amikor egy tranzakciós ügyfél meghívja a ZwCommitTransactiont.
Amikor az erőforrás-kezelő TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT értesítést kap egy tranzakcióról, véglegesítheti a tranzakciót, vagy elutasíthatja az egyfázisú véglegesítést.
A tranzakció véglegesítéséhez az erőforrás-kezelőnek a következőket kell tennie:
Ürítse ki a nem állandó gyorsítótárban (memóriában) tárolt adatokat, például a CLFS-naplóstream CLFS-rendezési területét.
Az erőforrás-kezelőnek át kell helyeznie az adatokat a gyorsítótárból egy tartós tárolóeszközre. Egy CLFS-t használó erőforrás-kezelő például meghívhatja a ClfsFlushBufferst.
Az összes adatmódosítás véglegessé és nyilvánossá tétele (azaz az erőforrás-kezelő hatókörén kívül).
Hívja fel a ZwCommitComplete parancsot.
A ZwCommitComplete meghívása után az erőforrás-kezelőnek fel kell hívnia a ZwClose-t a beléptetési leíró bezárásához.
A tranzakció egyfázisú véglegesítési műveletének elutasításához az erőforrás-kezelő meghívhatja a ZwSinglePhaseReject parancsot. Ha az erőforrás-kezelő meghívja a ZwSinglePhaseRejectet, a KTM azonnal egyfázisosról többfázisúra módosítja a véglegesítési műveletet.
Ha más erőforrás-kezelők vesznek részt ugyanabban a tranzakcióban, azoknak csak olvashatónak kell lenniük. Regisztrálniuk kell azonban, hogy megkapják a TRANSACTION_NOTIFY_RM_DISCONNECTED értesítést, amelyet akkor kapnak, ha az egyfázisú véglegesítési műveletet kezelő erőforrás-kezelő bezárja a regisztrációs leírót anélkül, hogy azt jelezték volna, hogy véglegesített vagy visszaállította a tranzakciót.
Többfázisú véglegesítési műveletek
A többfázisú véglegesítési művelet akkor kezdődik, amikor az alábbi események egyike történik:
Egy tranzakciós ügyfél meghívja a ZwCommitTransactiont, és egyetlen erőforrás-kezelő sem regisztrált TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT értesítések fogadására.
Egy erőforrás-kezelő meghívja a ZwSinglePhaseRejectet , miután TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT értesítést kapott.
Egy kiváló tranzakciókezelőmeghívja a ZwPrePrepareEnlistmentet.
A többfázisú véglegesítési műveletek három egymást követő fázisból állnak: előkészület, előkészítés és véglegesítés.
Előkészítési fázis
A véglegesítési művelet előkészületi fázisa (más néven nulla fázis) akkor kezdődik, amikor a KTM TRANSACTION_NOTIFY_PREPREPARE értesítést küld az összes erőforrás-kezelőnek. A KTM akkor küldi el ezt az értesítést, ha egyetlen erőforrás-kezelő sem támogat egy egyfázisú véglegesítési műveletet a tranzakcióhoz, vagy ha egy kiváló tranzakciókezelő meghívja a ZwPrePrepareEnlistmentet.
Amikor minden erőforrás-kezelő megkapja a TRANSACTION_NOTIFY_PREPREPARE értesítést, a következőket kell tennie:
Ürítse ki a nem állandó gyorsítótárban (memóriában) tárolt adatokat, például a CLFS log streamhez tartozó CLFS rendezési terület adatait.
Az erőforrás-kezelőnek át kell helyeznie az adatokat a gyorsítótárból egy tartós tárolóeszközre. Egy CLFS-t használó erőforrás-kezelő például meghívhatja a ClfsFlushBufferst.
Hívja meg a ZwPrePrepareComplete parancsot.
Miután egy erőforrás-kezelő meghívta a ZwPreprepareComplete függvényt, továbbra is fogadhat és kiszolgálhat ügyfélkéréseket. Az erőforrás-kezelőnek azonban az összes adatmódosítást gyorsítótárazási műveletekként kell kezelnie, amelyeket a rendszer azonnal tartós tárolóeszközre ír.
Ha egy erőforrás-kezelő hibát tapasztal egy TRANSACTION_NOTIFY_PREPREPARE-értesítés feldolgozása közben, a ZwRollbackEnlistment meghívásával visszaállíthatja a tranzakciót.
Előkészítési fázis
A véglegesítési művelet előkészítési fázisa (más néven első fázis) akkor kezdődik, amikor a KTM TRANSACTION_NOTIFY_PREPARE értesítést küld az összes erőforrás-kezelőnek. A KTM TRANSACTION_NOTIFY_PREPREPARE után küldi el ezt az értesítést, ha egyetlen erőforrás-kezelő sem támogatja az egyfázisú véglegesítést, vagy ha egy kiváló tranzakciókezelő meghívja a ZwPrepareEnlistmentet.
Amikor minden erőforrás-kezelő megkapja a TRANSACTION_NOTIFY_PREPARE értesítést, a következőket kell tennie:
Állítsa le az ügyfélkérések karbantartását, és jelentse az ügyfél későbbi kéréseit ügyfélhibákként.
Győződjön meg arról, hogy az összes adat át lett helyezve a tartós tárolóba.
Ha egy erőforrás-kezelő hibát tapasztal egy TRANSACTION_NOTIFY_PREPARE-értesítés feldolgozása során, a ZwRollbackEnlistment meghívásával visszaállíthatja a tranzakciót. Az erőforrás-kezelő azonban nem tudja visszagörgetni a tranzakciót, miután meghívta a ZwPrepareComplete függvényt.
Véglegesítési fázis
A véglegesítési művelet véglegesítési fázisa (más néven második fázis) akkor kezdődik, amikor a KTM TRANSACTION_NOTIFY_COMMIT értesítést küld az összes erőforrás-kezelőnek. A KTM TRANSACTION_NOTIFY_PREPARE után küldi el ezt az értesítést, ha egyetlen erőforrás-kezelő sem támogatja az egyfázisú véglegesítést, vagy ha egy felsőbb szintű tranzakciókezelő meghívja a ZwCommitEnlistmentet.
Amikor minden erőforrás-kezelő megkapja a TRANSACTION_NOTIFY_COMMIT értesítést, a következőket kell tennie:
Az összes adatmódosítás véglegessé és nyilvánossá tétele (azaz más tranzakciók számára is láthatóvá tétele).
Az erőforrás-kezelők általában állandó és nyilvános módosításokat hajtanak végre a tranzakció mentett adatainak a naplóstreamből az adatbázis nyilvános, állandó tárolójába való másolásával. A naplóstreamek használatáról további információt a Naplóstreamek használata A KTM használatával című témakörben talál.
Hívja fel a ZwCommitComplete parancsot.
Miután az erőforrás-kezelő meghívja a ZwCommitComplete-t, a ZwClose-t kell meghívnia a beléptetési leíró bezárásához.
Ha egy erőforrás-kezelő hibát tapasztal egy TRANSACTION_NOTIFY_COMMIT-értesítés feldolgozása közben, akkor le kell állítania magát. Amikor az operációs rendszer legközelebb újra betölti az erőforrás-kezelőt, az erőforrás-kezelő helyreállítási folyamatának vissza kell állítania a tranzakciót egy olyan állapotba, amely a hiba bekövetkezése előtt jól ismert volt.