![[7-TM.pdf]] Wie macht ein DBMS aus mehreren Operationen eine verlässliche Arbeitseinheit? **Concurrency Control** für parallelismus **Recovery** für fehlerbehebung durch revert **Transaktion** ist eine Folge von Operationen die als logische Einheit behandelt wird Nach außen zählen keine Zwischenschritte! Entweder gelingt Transaktion oder sie wird verworfen! #### ACID Eigenschaften ##### A - Atomicity Transaktion wird vollständig durchgeführt oder verworfen ##### C - Consistency Transaktion führt von konsistentem Zustand wieder in konsistenten Zustand! ##### I - Isolation Jede Transaktion erscheint als laufe sie alleine im System ##### D - Durability Commit speichert dauerhaft und ist resistent gegen Systemfehler ### Anomalien #### Lost update ![[Pasted image 20260723182328.png]] #### Dirty Read ![[Pasted image 20260723182339.png]] #### Non-Repeatable Read ![[Pasted image 20260723182355.png]] #### Phantom Read ![[Pasted image 20260723182412.png]] ## Schedules und Serialisierbarkeit **Schedule** ist globale Reihenfolge von Read, Write, Commit, Abort **Serialisierbar** ist wenn eine Schedule äquivalent zu einer seriellen (hintereinanderausführung) ist. Serialisierbarkeit fragt, ob ein möglicherweise verzahnter Schedule dieselbe Wirkung hat wie einer der seriellen Referenzabläufe. ![[Pasted image 20260723183028.png]] ## Konfliktserialisierbarkeit Kritische Operationen heißen Konflikte Operationen pi(x) und qj(y) stehen in Konflikt wenn: 1. i $\not =$ j 2. x = y 3. mindestens eine Operation schreibt ![[Pasted image 20260723183301.png]] ![[Pasted image 20260723183353.png]] ![[Pasted image 20260723183402.png]] ![[Pasted image 20260723183537.png]] ## Fehlersicherheit und Recoverability Eine Transaktion soll nicht committen, solange sie von noch unbestätigten Daten abhängt! ### RC - Recoverable Wenn Ti von Tj liest und Ti committed, MUSS Tj vorher committen! ### ACA - Avoiding Cascading Aborts Die Quelle eines gelesenen Werts MUSS VOR DEM LESEN bereits committed haben. ### ST - Striktheit Nach einem Schreibzugriff von Tj darf Ti erst lesen oder schreiben, wenn Tj beendet ist! ## Scheduler & Sperrprotokolle ![[Pasted image 20260723185054.png]] ### Sperren ![[Pasted image 20260723185118.png]] ![[Pasted image 20260723185131.png]] #### 2-Phasen-Sperrprotokoll 2PL Nach der ersten Freigabe dürfen KEINE NEUEN Sperren angefordert werden!!! #### C2PL Konservatives 2PL Alle benötigten Sperren müssen VOR der ersten Operation auf Daten angefordert werden! #### S2PL / SS2PL Strenges 2PL - S2PL = Alle SCHREIBSPERREN erst NACH Commit/Abort freigeben!!! - SS2PL = ALLE SPERREN erst NACH Commit/Abort freigeben!!! ### SQL - Isolationsebene ![[Pasted image 20260723185542.png]] ![[Pasted image 20260723185549.png]] ![[Pasted image 20260723185557.png]] ## Recovery Grundlagen Recovery-relevante Aktion sequentiell append-only auf stabilem Speicher protokollieren!! Committed vor dem Crash: REDO subaruuuuuuu Noch aktiv beim Crash: UNDO ![[Pasted image 20260723185939.png]] Das Log muss FRÜHER dauerhaft speichern als Datenbank Checkpoints im Log um suche zu verkürzen! #### ARIES Algorithm for Recovery and Isolation Exploiting Semantics 1. Analyse - Scanne ab checkpoint - aktive Transaktionen = loser - REDO start bestimmen 2. REDO - Scanne Log - Wende After Images an - Wiederhole auch loser Effekte 3. UNDO - Scanne rückwärts nach losern - Updates rückgängig machen - UNDO protokollieren