Dirty Read (Schmutziges Lesen)
T2 liest einen von T1 geaenderten Wert, bevor T1 endgueltig festgeschrieben (commit) hat. Faellt T1 spaeter mit abort/rollback zurueck, hat T2 mit einem ungueltigen Wert weitergerechnet und ggf. eigene Werte darauf basierend geschrieben. Das Ergebnis ist eine Inkonsistenz, denn der ursprungliche Dirty-Wert existiert offiziell nie in der Datenbank. Erkennungsmerkmal in einer T1/T2-Tabelle: T2 fuehrt read(A) aus, nachdem T1 write(A) gemacht hat, aber bevor T1 commit oder abort ausgefuehrt hat.
Dirty Read = Lesen von noch nicht committeten Aenderungen einer anderen Transaktion.
Lost Update (Verlorengegangene Aenderung)
Zwei Transaktionen lesen denselben Wert, berechnen unabhaengig neue Werte und schreiben sie nacheinander zurueck. Die spaetere Schreiboperation ueberschreibt die fruehere ohne sie zu beruecksichtigen, sodass eine der Aenderungen verloren geht. Typisches Muster: T1 read(A) - T2 read(A) - T1 write(A) - T2 write(A). Der klassische Ablauf im Skript zeigt A=10, T1 macht x:=x+5 und T2 macht x:=x+1, am Ende steht 11 statt 16, da T1s Aenderung ueberschrieben wird.
Lost Update = Zwei write-Operationen auf demselben Datum, wobei die zweite die erste komplett ausloescht.
Non-Repeatable Read (Nicht-wiederholbares Lesen)
Innerhalb derselben Transaktion T2 wird zweimal dasselbe Objekt gelesen, liefert jedoch unterschiedliche Werte, weil eine andere Transaktion T1 zwischen den beiden Lesevorgaengen den Wert geaendert und committed hat. Anders als beim Dirty Read ist die Aenderung von T1 hier bereits gueltig, dennoch bricht die Lesekonsistenz innerhalb von T2. Beispiel: T2 macht zwei SELECT guthaben-Statements, zwischendrin fuehrt T1 ein UPDATE Konten aus. Erkennung: gleiches SELECT in einer Transaktion, unterschiedliche Ergebnisse.
Non-Repeatable Read = Zweimal lesen, zweimal anderer Wert, weil jemand zwischendrin geschrieben hat.
Phantom-Problem (Phantom Read)
T1 fuehrt eine mengenbasierte Abfrage aus, z.B. SELECT COUNT(*) FROM Mitarbeiter. Waehrend T1 noch laeuft, fuegt T2 mit INSERT einen neuen Datensatz ein und committed. Wenn T1 dann darauf basierend weiterarbeitet (z.B. UPDATE ... SET Gehalt = Gehalt + 10000/X), rechnet T1 mit einer falschen Grundgesamtheit. Das Phantom ist der neue Satz, der pluetzlich erscheint (oder verschwindet bei DELETE). Unterschied zum Non-Repeatable Read: hier veraendert sich die Menge der Datensaetze, nicht der Wert eines einzelnen Satzes.
Phantom = neuer Datensatz erscheint (Insert) oder verschwindet (Delete) zwischen zwei mengenbasierten Zugriffen.
Inconsistent Analysis (Inkonsistente Analyse)
Sammelbegriff fuer statistische bzw. aggregierende Auswertungen (z.B. Summen, Durchschnitte) einer Transaktion, waehrend eine andere Transaktion nebenlaeufig Werte auf denselben Daten aendert. Das Ergebnis der Analyse ist verfaelscht, obwohl jeder Einzelwert korrekt geschrieben wurde. Im DHBW-Skript unter Beispielszenarien als Statistische Datenbankoperationen genannt: Ergebnisse sind verfaelscht, wenn waehrend der Berechnung Daten geaendert werden. Kann durch Phantom oder Non-Repeatable Read entstehen.
Inconsistent Analysis = Aggregation liest Teilwerte aus verschiedenen Konsistenzzustaenden.
Isolation als ACID-Loesung
Isolation aus ACID besagt, dass jede Transaktion den Eindruck hat, allein auf der Datenbank zu arbeiten. Genau diese Eigenschaft wird durch die vier Anomalien verletzt. SQL definiert vier Isolationslevel: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ und SERIALIZABLE, die schrittweise mehr Probleme verhindern. SERIALIZABLE verhindert alle vier Anomalien, kostet aber Parallelitaet.
Isolation ist das I in ACID und der Gegenspieler zu allen Nebenlaeufigkeitsproblemen.
Zeitachsen-Notation T1/T2
In Klausuraufgaben werden die Probleme in einer zweispaltigen Tabelle mit T1 links und T2 rechts dargestellt, die Zeit laeuft von oben nach unten. Typische Operationen: read(A,x) laedt Wert A in Variable x, write(x,A) schreibt Variable x nach A, x:=x+5 rechnet, commit und abort/rollback beenden die Transaktion. Zur Erkennung eines Problems: Sequenz der read/write-Operationen genau nachverfolgen und pruefen, wer wann welchen Wert sieht und schreibt.
read/write auf denselben Daten in verzahnter Reihenfolge - dann Muster gegen die vier Anomalien pruefen.