7.2 Commit-Behandlung
Wie Abb. 7-6 zeigt, kann das Basisprotokoll relativ einfach auf die hierarchische Struktur erweitert werden. Für den Wurzelknoten sowie die Blattknoten kommt das Basisprotokoll unverändert zur Anwendung. Eine neue Rolle nehmen dagegen die Zwischenknoten ein, da sie sowohl als Koordinator (gegenüber ihren Nachfolger-Agenten im Transaktionsbaum) als auch als untergeordneter Agent (gegenüber ihrem Vorgänger im Baum) fungieren. Wenn ein Zwischenknoten eine PREPARE-Nachricht erhält, wird diese Aufforderung an alle seine Nachfolger weiterpropagiert. Nach Eingang der lokalen Commit-Entscheidungen der Nachfolger, trifft der Zwischenknoten die Commit-Entscheidung für den gesamten Teilbaum, dessen Koordinator er ist, protokolliert sie in seine Log-Datei und gibt sie an seinen Vorgänger weiter. Im Fehler-Fall (Abort) kann der Zwischenknoten bereits zu diesem Zeitpunkt alle Nachfolger, die mit READY gestimmt haben, vom Scheitern der Transaktion informieren. In der zweiten Commit-Phase nehmen die Zwischenknoten das Commit-Ergebnis der gesamten Transaktion von ihrem Vorgänger entgegen und protokollieren es. Danach wird das Ergebnis an die Nachfolger weitergeleitet und der Erhalt des Ergebnisses an den Vorgänger quittiert. Zwischenknoten schreiben ebenfalls einen Ende-Satz, nachdem sie alle Quittierungen ihrer Nachfolger erhalten haben.
Diese Nachteile gelten auch für optimierte hierachische Commit-Protokolle, wie dem Presumed-Commit- oder dem Presumed-Abort-Ansatz [MLO86]. Eine große Bedeutung hat dabei vor allem das Presumed-Abort-Protokoll erlangt, daß in mehreren Produkten und auch Standards (ISO/OSI TP, X/Open DTP) verwendet wird [SBCM93]. Der Name "Presumed Abort" rührt daher, daß wenn in der Log-Datei des Koordinators keine Log-Sätze bezüglich des Commit-Zustandes einer globalen Transaktion vorliegen, auf Abort entschieden wird (während der Crash-Recovery oder bei einer Anfrage zum Transaktionsausgang). Ein Vorteil dieser Festlegung ist, daß der Koordinator den Abort-Satz nicht mehr synchron schreiben muß, sondern lediglich asynchron. Weiterhin können für eine gescheiterte Transaktionen die ACK-Nachrichten eingespart werden, und das Schreiben von Ende-Sätzen beim Koordinator und in den Zwischenknoten entfällt ebenfalls. Für erfolgreiche globale Transaktionen ergeben sich allerdings keine Einsparungen. Besonders effektiv ist eine weitere Optimierung für lesende Sub-Transaktionen, die im Presumed-Abort-Protokoll vorgenommen wird. Da diese Optimierung jedoch für andere Commit-Protokolle auch nutzbar ist, beschreiben wir sie im folgenden Kapitel (Kap. 8 ).