Das 2 Phasen Commit wird eingesetzt, wenn mehrere Systeme (z.B.: hierarchisches und relationales DB System) gemeinsam synchronisiert werden müssen. Hier tritt das Problem auf, daß zwischen dem Commit für System1 und dem Commit für System2 ein Fehler auftritt. Beim automatischen Recovery würde in diesem Fall System2 zurückgesetzt werden, die Daten für System1 bleiben bestätigt. Dadurch stimmen die beiden Systeme nicht mehr überein.
1. System befindet sich in einem konsistenten Zustand
2. Eine Applikation beginnt mit Änderungsanforderungen. Diese Änderungen werden an den Koordinator geschickt. Dieser leitet sie zeitverzögert an die jeweilige Datenbank.
3. Applikation hat Änderungen abgeschlossen und setzt einen Synchpoint.
4. Darauf leitet der Koordinator Phase 1 von Commit ein. Dazu schickt er eine entsprechende Anforderung an alle Datenbanksysteme.
5. Die einzelnen Datenbanksysteme markieren die Commit Anforderung in ihrem Logfile und bestätigen anschließend dem Koordinator das Commit.
6. Nach Eintreffen aller Commit Bestätigungen protokolliert der Koordinator dies in seinem Logfile und leitet anschließend Commit Phase 2 ein.
7. Auch Phase 2 muß von den einzelnen Datenbanksystemen bestätigt werden.
8. Nach Erhalt aller Bestätigungen und einem entsprechenden Protokolleintrag meldet der Koordinator einen neuen konsistenten Zustand der Datenbank.
Treten bis zum Zeitpunkt des ersten Logeintrags des Koordinators Fehler auf oder meldet ein Datenbanksystem einen nicht erfolgreichen Abschluß, so fordert der Koordinator alle Datenbanksysteme zu einem Rollback auf. Tritt hingegen nach diesem Zeitpunkt ein Fehler auf, so werden automatisch alle noch ausständigen Phase 2 Commits durchgeführt.
3 Fragen
Wie lauten die zwei Locks, und welche gleichzeitigen Transaktionen sind erlaubt?
X LOCK (EXCLUSIVE LOCKS): Wird durch eine Transaktion A ein Datensatz verändert, so wird dieser für alle anderen Transaktionen gesperrt, bis die Transaktion den Datensatz wieder freigibt. Diese Sperre verhindert, daß andere Transaktionen den Datensatz lesen oder verändern.
S LOCK: (SHARE LOCKS): Wird durch eine Transaktion ein Datensatz abgefragt, so wird dieser Datensatz für X-Locks gesperrt d.h. daß andere Transaktionen den Datensatz nicht ändern dürfen, Lesezugriffe sind jedoch ohne weiteres erlaubt.
Was ist ein Deadlock, und wie kann er gelöst werden?
Durch das gegenseitige Locking, warten zwei Transaktionen auf die gegenseitige Freigabe eines Datensatzes, was sich dadurch bemerkbar macht, daß keine Transaktion weiter arbeitet.
Dieses Problem kann nur dann gelöst werden, wenn eine der beiden Transaktionen zurückgenommen wird. Dadurch kann die andere Transaktion ihre Arbeit beenden, worauf die abgebrochene Transaktion neu gestartet wird.
|