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.