Architektúra softwaru pre transakčné spracovanie
Návrat podtransakcie do pôvodného stavu, je len akcia riadená logikou aplikácie v konkrétnom uzle!
V takomto prípade majú podtransakcie pre transakciu T navonok len stavy A, C, AB.
Z uvedeného vyplýva, že je potrebný nejaký ďalší stav v ktorom sa môže distribuovaná transakcia nachádzať.
Taký stav navrhnutý pre distribuované transakcie nazvime potvrdený (P). Ide vlastne o obdobu stavu PC pre nedistribuované transakcie.
Do stavu P sa dostane podtransakcia, ak koordinátor distribuovanej transakcie vydal požiadavku na pripravenosť, vykonali sa všetky operácie podtransakcie a bol o tom vykonaný zápis do žurnálu.
Zo stavu P sa môže podtransakcia dostať do stavu AB alebo C, v prípade havárie ju možno opäť priviesť do stavu pripravenosti.
Stav P sa tiež niekedy označuje ako RC (Ready to Commit).
Samozrejmosťou je stav F (nemožnosť nornálneho ukončenia), ako pri nedistribuovanej transakcii.
Dvojfázový potvrdzovací protokol možno popísať takto:
1. Fáza: Koordinátor pošle správu všetkých uzlom, kde sa vykonávajú podtransakcie s požiadavkou na pripravenosť. Ak je niektorá z odpovedí neuspešná, koordinátor vykoná ROOLBACK na transakciu vo svojom uzle a vyšle správu uzlom – požiadavku na zrušenie podtransakcií(ABORT).
2. Fáza: Ak všetky požiadavky na pripravenosť hlásia úspešnosť, koordinátor potvrdí transakciu na svojom uzle a odošle správu s požiadavkou potvrdenia (COMMIT) všetkých podtransakcií.
Problém čo robiť, ak je jedna transakcia potvrdená a druhá zhavaruje je vyriešený. Ak zhavaruje potvrdená podtransakcie je možné ju v danom uzle zrekonštruovať. Ak zhavaruje koordinačný uzol, tiež môže byť zrekonštruovaná transakcia a požiadavky na COMMIT sú zaslané len neskôr. Toto odloženie môže byť dlhé, riešením môže byť decentralizácia pri ukončovaní transakcie. Uzly na ktorých sa vykonávajú podtransakcie sú o sebe vzájomne informované (v požiadavke o pripravenosť môže byť uvedené ktoré uzly sú žiadané), ak uzol zistí, že niektorý z uzlov už prešiel do stavu AB, alebo C, môže do neho prejsť tiež.