Wenn mehrere Transaktionen gleichzeitig auf dasselbe Datenbankobjekt, z. B. eine Tabelle, zugreifen, dann kann es zu Inkonsistenzen bei den Ergebnissen kommen. Folgende Phänomene können auftreten:
· Dirty Read
Transaktion T1 ändert eine Zeile. Transaktion T2 liest diese Zeile, bevor T1 die Transaktion mit COMMIT beendet. T1 führt dann ein ROLLBACK durch.
T2 hat in diesem Fall eine Zeile gelesen, die eigentlich nie existierte.
· Non Repeatable Read
Transaktion T1 liest eine Zeile. Transaktion T2 verändert oder löscht dann diese Zeile und schließt die Transaktion mit COMMIT ab. Wenn T1 anschließend die Zeile nochmals liest, dann erhält T1 entweder die geänderte Zeile oder die Meldung, dass die Zeile nicht mehr existiert.
· Phantom
Transaktion T1 führt eine SQL-Anweisung S mit einer Suchbedingung aus, die eine Ergebnismenge M von Zeilen liefert. Transaktion T2 erzeugt dann, z. B. durch das Einfügen oder Ändern von Daten, mindestens eine weitere Zeile, die diese Suchbedingung erfüllt. Wenn T1 anschließend nochmals S ausführt, dann unterscheidet sich die neue Ergebnismenge von M.
Mit dem Isolation-Level können Sie konfigurieren, welche Phänomene möglich sind.
Zusammenhang zwischen Isolation-Level und Phänomenen
Phänomen |
Isolation Level |
|||
0 |
1 oder 10 |
2 oder 20 |
3 oder 30 |
|
Dirty Read |
ja |
nein |
nein |
nein |
Non Repeatable Read |
ja |
ja |
nein |
nein |
Phantom |
ja |
ja |
ja |
nein |
Siehe auch: