1. Transaktion erstellen | Als erstes wird eine neue Transaktion mit einer eindeutigen Transaktions-ID erstellt. |
2. Log-Speicher reservieren | Ist die Transaktion erstelt muss für diese Transaktion Speicher im Log reserviert werden,
um sicherzustellen, dass das Ende des Log nicht überschritten wird.
Da jede Transaktion vor Beginn sicherstellt dass genugt Speicher im Log vorhanden
ist, werden Deadlocks vermieden. Würde eine Transaktion den Rahmen des Logs sprengen,
so könnten keine Daten mehr ins Log geschrieben werden, allerdings kann auch kein
Speicher freigegeben werde, da die Transaktion noch nicht abgeschlossen wurde. Ist für eine Transaktion kein ausreichender Speicherplatz verfügbar, so wird diese schlafend gelegt, bis der Speicher frei ist. Der Speicher wird wieder freigegeben sobald die Transaktion komplett ausgeführt wurde. |
3. Resourcen reservieren | Dieser Schritt vermischt sich etwas mit dem nächsten. Hier werden das Lesen und Blockieren (lock) der zu ändernden Resourcen durchgeführt. hierbei ist zu bemerken, dass keine inerhalb einer Transaktion blockierte Resource freigegeben (unlock) werden kann, solange nicht alle benötigten Resourcen blockiert wurden. Eine Reihenfolge wie ..., lock A, unlock A, lock B, ... ist also nicht zulässig. |
4. Bearbeiten der Resource | Wenn eine Resource blockiert ist kann sie bearbeitet werden. Im Log weden die Teile der Resource, die geändert werden, protokoliiert. |
5. Commit Transaktion | Sind alle Änderungen durchgeführt, kann die Transaktion abgeschlossen werden.
Alle Änderungen und die entsprechenden Operationen werden in das Log geschrieben.
Da dieses Log (in-core log) sich im Hauptspeicher befindet sind diese Änderungen noch nicht
permanent. Dies ist erst dann der Fall, wenn dieses Log auf die Platte
geschrieben wird. Da es längere Aktionen gibt, die auf mehrere Transaktionen aufgeteilt werden, kann bestimmt werden, ob die Resourcen nach dem Commit einer Transaktion wieder freigegeben werden, oder ob sie für die nächste Transaktion weiter reserviert bleiben soll. |
6. Log-Inhalt speichern | In gewissen Abständen wird das in-core-Log auf die Platte geschrieben. An
dieser Stelle wird dann eine Transaktion permanent. Die Transaktion wird
erst danach wieder gelöscht und ist somit komplett abgearbeitet. Die geänderten Resourcen werden in einer Liste, der Active Items List (AIL) vermerkt. Hierdurch wird festgehalten, dass die resource geändert wurde, und dass sich der neue Inhalt im Log auf der Platte befindet. |
7. Inhalt auf Platte schreiben | Zum Schluss wird der geänderte Inhalt an die entsprechende Stelle auf der Platte zurückgeschrieben. Die Resource wird aus der AIL gelöscht. |