Atomicity (Atomaritaet)
Eine Transaktion wird nach dem Prinzip Alles oder Nichts ausgefuehrt. Entweder werden alle enthaltenen Operationen erfolgreich festgeschrieben (commit) oder keine einzige wird wirksam (abort bzw. rollback). Bei einem Fehler oder Systemabsturz waehrend einer Transaktion muss das DBMS bereits ausgefuehrte Teilaenderungen komplett zuruecknehmen. Ohne Atomaritaet koennten halbausgefuehrte Ueberweisungen dazu fuehren, dass Geld vom Konto A abgebucht, aber nicht auf Konto B gutgeschrieben wird. Realisiert wird das durch Undo-Logs und ein zentrales Log Manager Modul.
Alles oder Nichts, halbe Sachen gibt es nicht.
Consistency (Konsistenz)
Die Datenbank befindet sich vor Beginn und nach Ende jeder Transaktion in einem konsistenten Zustand. Alle Integritaetsbedingungen des Schemas wie Primaerschluessel, Fremdschluessel, CHECK-Constraints, NOT NULL und Trigger muessen erfuellt sein. Waehrend der Transaktion darf die Konsistenz voruebergehend verletzt sein. Wird die Konsistenzbedingung durch die Transaktion final verletzt, muss das DBMS die Transaktion abbrechen. Konsistenz ist die Zusicherung an die Anwendung, dass unerlaubte Zustaende niemals sichtbar werden.
Konsistenter Zustand rein, konsistenter Zustand raus.
Isolation
Jede Transaktion hat den Eindruck, allein auf der Datenbank zu arbeiten, auch wenn viele Transaktionen parallel laufen. Andere gleichzeitig laufende Transaktionen duerfen keine unerwarteten Effekte auf die eigenen Leseergebnisse haben. Wird Isolation verletzt, entstehen die klassischen Mehrbenutzer-Anomalien Dirty Read, Nonrepeatable Read, Phantom Read und Lost Update. Technisch wird Isolation durch Sperren (Locks, 2PL), Timestamps oder Multi-Version Concurrency Control umgesetzt. SQL erlaubt eine feine Abstufung ueber Isolationslevel von Read Uncommitted bis Serializable.
Jede Transaktion glaubt, sie sei allein im Raum.
Durability (Dauerhaftigkeit)
Nach einem erfolgreichen commit sind die Aenderungen einer Transaktion dauerhaft in der Datenbank gespeichert und ueberleben jeden nachfolgenden Systemabsturz, Stromausfall oder Softwarefehler. Das wird durch persistente Speicherung im Log-File (Write-Ahead Logging) sichergestellt, bevor der commit dem Client bestaetigt wird. Nach einem Crash kann das Recovery-Modul aus dem Log alle committeten Transaktionen wiederholen (Redo) und alle nicht committeten zuruecknehmen (Undo). Durability ist die Grundlage dafuer, dass ein bestaetigter Buchungsvorgang wirklich verbindlich ist.
Was commit gesagt hat, bleibt fuer immer.
Transaktion als ACID-Klammer
Eine Transaktion ist eine Folge von Operationen, die die Datenbank von einem konsistenten Zustand in einen konsistenten (eventuell veraenderten) Zustand ueberfuehrt, wobei das ACID-Prinzip eingehalten werden muss. Sie startet mit begin of transaction (BOT bzw. START TRANSACTION in SQL) und endet entweder mit commit (dauerhaft) oder abort bzw. rollback (Rueckabwicklung). ACID sind die vier Bedingungen, die das DBMS an jeder Transaktion garantiert.
Eine Transaktion ist die logische Einheit, in der ACID gilt.
Isolationslevel als Aufweichung von I
SET TRANSACTION ISOLATION LEVEL erlaubt vier Stufen: Read Uncommitted, Read Committed, Repeatable Read und Serializable. Je niedriger die Stufe, desto mehr Parallelitaet und Durchsatz, aber desto mehr Anomalien sind moeglich. Serializable ist die strengste Stufe und entspricht dem idealen ACID-I. Read Uncommitted erlaubt sogar Dirty Reads. In der Klausur muss man aus einer Tabelle ableiten koennen, welches Level welche Probleme noch zulaesst.
Niedriges Level = mehr Speed, mehr Risiko.
Serialisierbarkeit
Eine parallel (verzahnt) ausgefuehrte Historie mehrerer Transaktionen ist korrekt, wenn sie das gleiche Ergebnis liefert wie eine serielle Ausfuehrung derselben Transaktionen in irgendeiner Reihenfolge. Serialisierbarkeit ist die formale Definition der Isolation. Nicht jede parallele Historie ist serialisierbar, deshalb muss der Scheduler des DBMS ueber Sperrverfahren wie 2PL nur serialisierbare Historien zulassen.
Korrekt = aequivalent zu einer seriellen Ausfuehrung.
Recovery als Umsetzung von A und D
Atomicity und Durability werden gemeinsam durch das Recovery-Subsystem realisiert. Ein Log-File (Redo-Log, Undo-Log) protokolliert jede Aenderung vor dem eigentlichen Schreibvorgang auf die Datenbasis. Nach einem Crash setzt Recovery alle nicht committeten Transaktionen zurueck (Undo, sichert A) und wiederholt alle committeten (Redo, sichert D). Zustandsuebergaenge einer Transaktion sind aktiv, wartend, gescheitert, wiederholbar, abgeschlossen, persistent oder aufgegeben.
Log first, write later. Redo committed, Undo aborted.