Transaktionsverwaltung Beispiel einer typischen Transaktion in einer Bankanwendung: Lese den Kontostand von A in die Variable a: read(A,a); Reduziere den Kontostand um 50.- Euro: a:= a – 50; Schreibe den neuen Kontostand in die Datenbasis: write(A,a); Lese den Kontostand von B in die Variable b: read(B,b); Erhöhe den Kontostand um 50,- Euro: b := b + 50; Schreibe den neuen Kontostand in die Datenbasis: write(B, b); Transaktionen - Intro
Operationen auf Transaktions-Ebene In den klassischen Transaktionssystemen: begin of transaction (BOT): Mit diesem Befehl wird der Beginn einer eine Transaktion darstellende Befehlsfolge gekennzeichnet. commit: Hierdurch wird die Beendigung der Transaktion eingeleitet. Alle Änderungen der Datenbasis werden durch diesen Befehl festgeschrieben, d.h. sie werden dauerhaft in die Datenbank eingebaut. abort / rollback: Dieser Befehl führt zu einem Selbstabbruch der Transaktion. Das Datenbanksystem muss sicherstellen, dass die Datenbasis wieder in den Zustand zurückgesetzt wird, der vor Beginn der Transaktionsausführung existierte. Transaktionen - Intro
Abschluss einer Transaktion Für den Abschluss einer Transaktion gibt es zwei Möglichkeiten: Den erfolgreichen Abschluss durch ein commit. Den erfolglosen Abschluss durch ein abort / rollback. Transaktionen - Intro
Eigenschaften von Transaktionen: ACID Atomicity (Atomarität) Alles oder nichts Consistency Konsistenter Zustand der DB konsistenter Zustand Isolation Jede Transaktion hat die DB „für sich allein“ Durability (Dauerhaftigkeit) Änderungen erfolgreicher Transaktionen dürfen nie verloren gehen Transaktionen - Intro
Transaktionsverwaltung in SQL commit: Die in der Transaktion vollzogenen Änderungen werden – falls keine Konsistenzverletzung oder andere Probleme aufgedeckt werden – festgeschrieben. rollback: Alle Änderungen sollen zurückgesetzt werden. Anders als der commit-Befehl muss das DBMS die „erfolgreiche“ Ausführung eines rollback-Befehls immer garantieren können. Transaktionen - Intro
Verschiedene Arten von Fehlern Computer-Fehler Hardware- oder Softwarefehler während der Transaktionsausführung. Plattenausfall Transaktions-Fehler Fehler durch Transaktions-Operation z.B. Division durch Null Lokale Fehler Zustände, die ein Beenden der Transaktion bewirken z.B. Von der Transaktion benötigte Daten werden nicht gefunden. Concurrency Fehler Abort der Transaktion aufgrund von Concurrency-Konflikten. Physikalische Probleme & Katastrophen Stromausfall, Feuer, Wasser, ... trotz all dieser Fehler soll das DBMS dafür sorgen, dass Daten konsistent bleiben und dauerhaft gespeichert bleiben. Transaktionen - Intro
Eigenschaften von Transaktionen Absturz T1 T2 t3 t1 t2 Zeitachse Abb.: Transaktionsbeginn und –ende relativ zu einem Systemabsturz Transaktionen - Intro
Sofortiges Transaktionsende Folgende SQL-Befehle bewirken ein sofortiges Transaktionsende (auch dann, wenn die Transaktion vorher aus vielen Anweisungen bestand) Es wird ein Commit-Befehl automatisch generiert mit: CREATE TABLE, CREATE INDEX, CREATE VIEW, CREATE TRIGGER ALTER TABLE, ALTER INDEX, ALTER VIEW DROP TABLE, DROP INDEX, DROP VIEW, DROP TRIGGER GRANT, REVOKE Transaktionen - Intro
Transaktionsverwaltung in SQL Beispiel: (set autocommit off) begin insert into Vorlesungen(VorlNr, Titel, SWS, gelesenvon) values (5275, `Physik`, 3, 2141); insert into Professoren(PersNr, Name, Rang, Raum) values (2141, `Curie`, `C4`, 205); commit / rollback Transaktionen - Intro
Check erst am Transaktions-Ende DEFERRED-Clause verschiebt die Prüfung des Constraints ans Ende der Transaktion CREATE TABLE bsp ( zahl NUMBER, CONSTRAINT unq_num UNIQUE (zahl) INITIALLY DEFERRED DEFERRABLE); Standardwert: INITIALLY IMMEDIATE Check des Constraints direkt nach Absetzen des SQL-Befehls NOT DEFERRABLE -> Check lässt sich nicht ans Ende der Transakton verschieben, auch nicht mit Session/Transaktions-Einstellungen SET CONSTRAINT ALL DEFERRED / IMMEDIATE in aktueller Transaktion alle Constraint-Prüfungen ans Ende schieben / sofort ausführen ALTER SESSION SET CONSTRAINTS=DEFERRED Einstellung für gesamte Session Transaktionen - Intro
Savepoints savepoint: definiert Sicherungspunkt, auf den sich die (noch aktive) Transaktion zurücksetzen lässt. Das DBMS muss sich dazu alle bis zu diesem Zeitpunkt ausgeführten Änderungen an der Datenbasis "merken". Diese Änderungen dürfen aber noch nicht in der Datenbasis festgeschrieben werden, da die Transaktion durch ein abort immer noch gänzlich aufgegeben werden kann. insert into R values (5, 6); savepoint my_sp_1; insert into R values (7, 8); savepoint my_sp_2; insert into R values (9, 10); rollback to my_sp_1; insert into R values (11, 12); commit; Transaktionen - Intro
Zustandsübergangs-Diagramm für Transaktionen verdrängen inkarnieren potentiell aktiv wartend einbringen beenden neustarten abbrechen wiederholbar gescheitert zurücksetzten abbrechen abbrechen aufgegeben abgeschlossen festschreiben persistent Transaktionen - Intro