7. Transaktionsverwaltung Motivation § Transaktionen erlauben „Bündelung“ von Operationen und gelten als wichtigster Beitrag des Bereichs Datenbanken zur Informatik; sie werden heute auch außerhalb von Datenbanksystemen z.B. in Betriebssystemen eingesetzt § Jim Gray hat 1998 u.a. für seine Beiträge zur Transaktionsverwaltung den A. M. Turing Award gewonnen Quelle: http://research.microsoft.com Datenbanken / Kapitel 7: Transaktionsverwaltung 2 Inhalt § 7.1 Transaktionsbegriff § 7.2 Transaktionen in SQL § 7.3 Fehlerbehandlung § 7.4 Mehrbenutzerbetrieb Datenbanken / Kapitel 7: Transaktionsverwaltung 3 7.1 Transaktionsbegriff § Transaktion ist eine logisch zusammenhängende Folge von Operationen, die ohne Einflüsse anderer zeitgleich verarbeiteter Transaktionen und ohne Fehler ausgeführt werden soll Datenbanken / Kapitel 7: Transaktionsverwaltung 4 Banküberweisung als Beispiel § Beispiel: Überweisung von 50€ von Konto A nach Konto B 1 2 3 UPDATE Konten SET KontoStand = KontoStand - 50 WHERE KontoName = ’A ’ 4 5 6 7 UPDATE Konten SET KontoStand = KontoStand + 50 WHERE KontoName = ’B ’ Datenbanken / Kapitel 7: Transaktionsverwaltung 5 Banküberweisung als Beispiel § Beispiel: Überweisung von 50€ von Konto A nach Konto B 1) a = read(A) Lese Kontostand von Konto A in Variable a 2) a = a – 50 Reduziere den Wert von a um 50 3) write(A,a) Schreibe neuen Kontostand von A 4) b = read(B) Lese Kontostand von Konto B in Variable b 5) b = b + 50 Erhöhe den Wert von b um 50 6) write(B,b) Schreibe neuen Kontostand von B § Was passiert, wenn der Strom ausfällt? Datenbanken / Kapitel 7: Transaktionsverwaltung 6 Transaktionsanfang und Transaktionsende § Wie können wir mehrere Operationen zusammenfassen? § begin of transaction (bot) markiert den Anfang einer Transaktion § commit markiert das Ende einer erfolgreichen Transaktion, deren Änderungen festgeschrieben werden sollen § rollback markiert das Ende einer erfolglosen Transaktion, deren Änderungen rückgängig zu machen sind Datenbanken / Kapitel 7: Transaktionsverwaltung 7 Banküberweisung als Beispiel § Beispiel: Überweisung von 50€ von Konto A nach Konto B 1) begin of transaction 2) a = read(A) Lese Kontostand von Konto A in Variable a 3) a = a – 50 Reduziere den Wert von a um 50 4) write(A,a) Schreibe neuen Kontostand von A 5) b = read(B) Lese Kontostand von Konto B in Variable b 6) b = b + 50 Erhöhe den Wert von b um 50 7) write(B,b) Schreibe neuen Kontostand von B 8) commit Datenbanken / Kapitel 7: Transaktionsverwaltung 8 Eigenschaften von Transaktionen § Transaktionen sollen die folgenden Eigenschaften haben § Atomicity (Atomarität) § Consistency (Konsistenz/Integrität) § Isolation (Isolation) § Durability (Dauerhaftigkeit) § Datenbanksysteme müssen so implementiert werden, dass diese sogenannten ACID-Eigenschaften sichergestellt werden Datenbanken / Kapitel 7: Transaktionsverwaltung 9 Eigenschaften von Transaktionen § Atomicity (Atomarität): Entweder werden alle Änderungen der Transaktion in der Datenbank festgeschrieben oder gar keine („ganz oder gar nicht“) § Beispiel: Werden die 50€ von Konto A abgebucht, so müssen sie auch Konto B gutgeschrieben werden; ein „Verlust“ der 50€ ist ausgeschlossen. Fällt bspw. der Strom zwischen den beiden Buchungsvorgängen aus, so muss bei Wiederanlauf des RDBMS die Abbuchung von Konto A automatisch rückgängig gemacht werden. Datenbanken / Kapitel 7: Transaktionsverwaltung 10 Eigenschaften von Transaktionen § Consistency (Konsistenz): Die Transaktion hinterlässt die Datenbank in einem konsistenten Zustand gemäß der definierten Integritätsbedingungen; andernfalls muss die Transaktion zurückgesetzt werden § Beispiel: Eine Integritätsbedingung könnte sein, dass kein Konto seinen Kreditrahmen überschreiten darf; wird diese Konsistenzbedingung für A verletzt, darf die Überweisung nicht durchgeführt werden Datenbanken / Kapitel 7: Transaktionsverwaltung 11 Eigenschaften von Transaktionen § Isolation (Isolation): Die Transaktion muss so auf der Datenbank ausgeführt werden, als wäre sie die einzige Transaktion, d.h. es darf keine Wechselwirkungen mit anderen zeitgleich ausgeführten Transaktionen geben § Beispiel: Kontostand von Konto A darf nicht geschrieben werden, wenn er zwischenzeitlich durch eine andere Transaktion verändert wurde Datenbanken / Kapitel 7: Transaktionsverwaltung 12 Eigenschaften von Transaktionen § Durability (Dauerhaftigkeit): Wird eine Transaktion erfolgreich abgeschlossen, so müssen ihre Änderungen dauerhaft in der Datenbank festgeschrieben sein, d.h. auch nach einem Fehler noch vorhanden sein § Beispiel: Fällt der Strom in der Bank aus, kurz nachdem unsere Überweisung durchgeführt wurde, müssen sich die 50€ noch immer auf Konto B befinden Datenbanken / Kapitel 7: Transaktionsverwaltung 13 Speicherarten in einem Datenbanksystem Kapazität GBytes TBytes PBytes Zugriffszeit Primärspeicher (RAM) 10-9 s (ns) Sekundärspeicher (HDD/SSD) Tertiärspeicher (Tape) Datenbanken / Kapitel 7: Transaktionsverwaltung 10-3 s (ms) >> s 14 Speicherarten in einem Datenbanksystem § Primärspeicher (RAM) § hält nur die momentan benötigten Daten § ist volatil, d.h. Inhalt nach Neustart verloren § Sekundärspeicher (HDD/SSD) § hält Daten und Verlaufsprotokoll § ist nicht-volatil, d.h. Inhalt nach Neustart noch vorhanden § Tertiärspeicher (Band) § hält Archivkopie der Daten und Verlaufsprotokoll § ist nicht-volatil und langfristig haltbar Datenbanken / Kapitel 7: Transaktionsverwaltung 15 Fehlerarten § Datenbanksystem muss ACID-Eigenschaften bei verschiedenen Arten von Fehlern sicherstellen § Fehler ohne Primärspeicherverlust (z.B. durch Fehler in der Anwendung) § Fehler mit Primärspeicherverlust (z.B. durch Stromausfall) § Fehler mit Sekundärspeicherverlust (z.B. durch technischen Defekt der Festplatte) Datenbanken / Kapitel 7: Transaktionsverwaltung 16 Fehlerbehandlung T1 T2 Zeit Fehler § Fehlerbehandlung muss sicherstellen, dass die Wirkungen § der erfolgreich abgeschlossenen Transaktion T1 dauerhaft in übernommen sind § der erfolglosen Transaktion T2 rückgängig gemacht werden Datenbanken / Kapitel 7: Transaktionsverwaltung 17 Fehlerbehandlung § Fehlerbehandlung (recovery) stellt einen konsistenten Zustand der Datenbank nach einem Fehler wieder her § Fehler ohne Primärspeicherverlust können relativ einfach behoben werden § Fehler mit Primärspeicherverlust erfordern die Wiederherstellung eines konsistenten Zustands aus den gespeicherten Daten und dem Verlaufsprotokoll § Fehler mit Hintergrundspeicherverlust erfordern die Wiederherstellung eines konsistenten Zustands aus Archivkopie der Daten und dem Verlaufsprotokoll Datenbanken / Kapitel 7: Transaktionsverwaltung 18 Mehrbenutzerbetrieb § Datenbankoperationen greifen meist auf langsame Ressourcen (z.B. Sekundärspeicher) zu § Parallele Ausführung mehrerer Transaktionen führt zu besserer Auslastung schneller Ressourcen (z.B. CPU) und insgesamt höherer Leistung des Datenbanksystems T1 T2 Zeit Zeit Datenbanken / Kapitel 7: Transaktionsverwaltung 19 Mehrbenutzerbetrieb § Mehrbenutzerbetrieb, d.h. parallele Ausführung mehrerer Transaktionen, ist wünschenswert, um die Leistung zu steigern, führt aber zu Problemen: § Abhängigkeit von nicht festgeschriebenen Änderungen z.B. von anderen nebenläufigen Transaktionen (dirty read) § Verlust von Änderungen an den Daten (lost update) § Gelesene Daten zwischenzeitlich verändert (non-repeatable read & phantom read) Datenbanken / Kapitel 7: Transaktionsverwaltung 20 Dirty Read § Abhängigkeit von nicht festgeschriebenen Änderungen § Überweisung von 30€ von Konto A nach Konto B § Verzinsung von Konto A mit 1% T1 1 2 3 4 5 6 7 8 a1 = read(A) a1 = a1 ≠ 30 write(A, a1 ) b1 = read(B) rollback T2 a2 = read(A) a2 = a2 ú 1.01 write(A, a2 ) § T2 liest geänderten („dreckigen“) Kontostand von A Datenbanken / Kapitel 7: Transaktionsverwaltung 21 Lost Update § Verlust von Änderungen an den Daten § Überweisung von 30€ von Konto A nach Konto B § Verzinsung von Konto A mit 1% T1 1 2 3 4 5 6 7 8 9 a1 = read(A) a1 = a1 ≠ 30 write(A, a1 ) b1 = read(B) b1 = b + 30 write(B, b1 ) T2 a2 = read(A) a2 = a2 ú 1.01 write(A, a2 ) § T1 überschreibt zwischenzeitliche Änderung durch T2 Datenbanken / Kapitel 7: Transaktionsverwaltung 22 Non-Repeatable Read § Nichtwiederholbares Lesen von Zeilen § Kontostand von Konto A § Überweisung von Lottogewinn auf Konto A § Kontostand von Konto A (zwischenzeitlich verändert) T1 1 2 3 SELECT * FROM Konten WHERE Konto = ’A’ SELECT * FROM Konten WHERE Konto = ’A’ Datenbanken / Kapitel 7: Transaktionsverwaltung T2 UPDATE Konten SET KontoStand = KontoStand + 100.000 WHERE Konto = ’A’ 23 Phantom Read § Nichtwiederholbares Ergebnis (d.h. Zeilenmenge) durch (eingefügte/gelöschte) Phantomdaten § Liste aller überzogenen Konten (Konto A sei überzogen) § Konto A wird überzogen § Liste aller überzogenen Konten (enthält A nicht mehr) T1 1 2 3 SELECT * FROM Konten WHERE KontoStand < 0 SELECT * FROM Konten WHERE KontoStand < 0 Datenbanken / Kapitel 7: Transaktionsverwaltung T2 UPDATE Konten SET KontoStand = KontoStand - 100.000 WHERE Konto = ’A’ 24 Synchronisation § Datenbanksysteme stellen Isolation von Transaktionen im Mehrbenutzerbetrieb durch Sperrmechanismen sicher § Unterschiedliche Arten von Sperren (z.B. Lesesperre) und Sperrgranulaten (z.B. Datensatz oder Tabelle) § Transaktionen werden derart verschachtelt, dass dies nicht von serieller Ausführung zu unterscheiden ist § RDBMSs unterstützen verschiedene Isolationsstufen zur Auflockerung der Anforderungen bzgl. Isolation Datenbanken / Kapitel 7: Transaktionsverwaltung 25 7.2 Transaktionen in SQL § Transaction Control Language (TCL) als Bestandteil von SQL stellt Kommandos für Transaktionen bereit § BEGIN TRANSACTION <Name der Transaktion> markiert den Anfang einer benannten Transaktion (Benennung wird eher selten verwendet) § COMMIT <Name der Transaktion> schreibt die Änderung der Transaktion fest § ROLLBACK <Name der Transaktion> macht Änderungen der Transaktion rückgängig Datenbanken / Kapitel 7: Transaktionsverwaltung 26 Transaktionen in SQL § Transaktionen in SQL enden entweder erfolgreich mit einem COMMIT oder erfolglos mit einem ROLLBACK § Transaktionsanfang ist meist implizit, d.h. eine Transaktion beginnt mit dem ersten Kommando bzw. dem ersten Kommando nach einem COMMIT oder ROLLBACK § RDBMSs unterstützen AUTOCOMMIT (ON/OFF), dann wird jedes Kommando als eigene Transaktion behandelt Datenbanken / Kapitel 7: Transaktionsverwaltung 27 Savepoints § Einige RDBMSs (z.B. MS SQL Server) erlauben zusätzlich die Markierung sogenannter Savepoints innerhalb einer Transaktion mittels 1 SAVE TRANSACTION < Name des Savepoints > § Transaktion kann dann bis zu einem definierten Savepoint mittels ROLLBACK zurückgefahren werden Datenbanken / Kapitel 7: Transaktionsverwaltung 28 Zusammenfassung § Transaktionen als logisch zusammenhängende Folge von Operationen, die ganz oder gar nicht ausgeführt wird § ACID-Eigenschaften von Transaktionen § Atomicity (Atomarität) § Consistency (Integrität/Konsistenz) § Isolation (Isolation) § Durability (Dauerhaftigkeit) § Fehlerbehandlung & Synchronisation zur Wahrung der ACID-Eigenschaften bei Fehlern und Mehrbenutzerbetrieb Datenbanken / Kapitel 7: Transaktionsverwaltung 29 Literatur [1] A. Kemper und A. Eickler: Datenbanksysteme – Eine Einführung, De Gruyter Oldenbourg, 2015 (Kapitel 9) [2] G. Saake, K.-U. Sattler und A. Heuer: Datenbanken - Konzepte und Sprachen, mitp Professional, 2013 (Kapitel 12) Datenbanken / Kapitel 7: Transaktionsverwaltung 30