Isolationsgrade
aus www.iwiki.de, der freien Wissensdatenbank
Beginnend mit dem niedrigsten Isolationsgrad:
| Dirty Read | Non-Repeatable Read | Phantom Read | |
|---|---|---|---|
| Read Uncommitted | ja | ja | ja |
| Read Committed | verhindert | ja | ja |
| Repeatable Read | verhindert | verhindert | ja |
| Serializable | verhindert | verhindert | verhindert |
Inhaltsverzeichnis |
Read Uncommitted
Bei diesem Isolationsgrad ist die Performance am Besten, aber er lässt Dirty Reads zu, welche einen inkonsistenten Zustand darstellen können und somit die Datenintegrität verletzten. Als Dirty Read bezeichnet man, wenn in einer Transaktion Datensätze gelesen werden, die von einer anderen Transaktion noch nicht festgeschrieben (committed) sind.
Verwendung bei Langzeitaktionen, zum Beispiel einer Flugbuchung im Reisebüro, kann eine Tabelle einer Datenbank nicht eine halbe Stunde gesperrt sein.
Read Committed
Dieser Isolationsgrad verhindert Dirty Reads, da Datensätze erst gelesen werden können, wenn sie von der anderen Transaktion committed sind. Allerdings können hier Non-Repeatable Reads auftreten. Diese stellen einen nicht wiederholbarer Lesevorgang dar, der Auftritt, wenn während des Ablaufs einer Transaktion ein bereits gelesener Datensatz nicht noch einmal mit den gleichen Werten gelesen werden kann, da zwischenzeitlich eine andere Transaktion den Datensatz geändert hat. Das ist eine Verletzung der Integritätsbedingungen, da jeder Datensatz während einer Transaktion beim Lesen immer die gleichen Werte haben muss!
Repeatable Read
Integritätsverletzungen durch Non-Repeatable Reads werden durch diesen Isolationsgrad verhindert, doch auch hier können die Integritätsbedingungen verletzt werden durch das auftreten eines Phantom Reads oder auch Phantom Datensatzes. Diese Phantom Datensätze entstehen durch Insert-Anwendungen anderer Transaktionen und bewirken, dass man innerhalb einer Transaktion auf die gleiche Select-Anfrage bei zweiter Ausführung zusätzliche Datensätze erhält. Um dies zu vermeiden, bietet die JDBC-Schnittstelle einen weiteren Isolationsgrad:
Serializable
Dies ist der höchste Isolationsgrad, bei dem Transaktionen getrennt voneinander ablaufen. Phantom Reads können nicht auftreten.
