Wenn mindestens zwei Prozesse zum Schreiben oder Lesen auf die gleichen Daten zugreifen wollen, müssen diese Prozesse zur Fehlervermeidung einer Isolierung unterworfen werden. Das gilt insbesondere auch für Datenbanken, die zur korrekten Verwaltung größerer Datenmengen vorgesehen sind.

Was ist eine Datenbank?

Daten wurden ursprünglich in einzelnen Dateien auf Computern gespeichert. Mit immer umfangreicheren Datenmengen wurde der Aufwand zur direkten Verwaltung dieser Dateien zu groß. Änderungen an den Daten wurden fehleranfällig und es wurde immer schwieriger, auf die gerade benötigten Daten zuzugreifen.

Eine Datenbank dient der Verwaltung von auf einem Computer gespeicherten Daten. Im engeren Sinn bezeichnet das Wort die gespeicherten Daten selbst. Diese hängen logisch zusammen und sind für Änderung durch Schreibzugriffe auf der einen und Abfrage und Auswertung auf der anderen Seite vorgesehen.

Im weiteren Sinn gehört zu einer Datenbank auch das Datenbankmanagementsystem oder DBMS. Es organisiert die Art der Speicherung der Daten und und kontrolliert die schreibenden und lesenden Zugriffe.

Notwendige Eigenschaften von Datenbanken

Im Zentrum steht der Grundsatz, dass die Daten in einer Datenbank verfügbar, vollständig und korrekt sein müssen. Aus diesem Grund ist die Kontrolle aller Zugriffe durch das DBMS erforderlich.

Ein wesentlicher Teil dieses DBMS ist die Datenbankprogrammiersprache SQL, die in vielen Datenbanken zum Einsatz kommt. SQL dient der Definition von relationalen Datenbanken. Datenbanken dieses Typs stellen digital gespeicherte Tabellen dar, in denen die Daten strukturiert gespeichert sind. In SQL werden auch die Funktionen zum Bearbeiten und Auswerten der Daten bereitgestellt.

Ein Beispiel für eine solche relationale Datenbank ist eine Tabelle eines Unternehmens mit Kundennummern, den zugehörigen Namen und dem Datum der letzten Bestellung. Eine mögliche Anfrage an diese Datenbank stellt das Auslesen aller Kunden dar, die im letzten Monat mindestens eine Bestellung aufgegeben haben.

Wozu braucht es Isolation in der Verwaltung?

Eine Datenbank muss mit Zugriffen durch viele Nutzer zurechtkommen, die unabhängig voneinander auf die Daten zugreifen wollen. In der Organisation der Datenbank können Sie also nicht davon ausgehen, dass ein Schreibzugriff abgeschlossen ist, bevor ein anderer Nutzer einen Lesezugriff durchführt. Der Begriff der Isolation bezieht sich auf die Trennung der verschiedenen Zugriffe zur Vermeidung von falsch ausgelesenen Daten.

Wesentlich ist hier, dass ein Zugriff aus mehreren Teilen bestehen kann und ein anderer Zugriff zwischen diesen Teilen Fehler verursachen könnte. Diese zwei Teile sind beispielsweise das Prüfen des Vorhandenseins eines Datensatzes und das Einfügen, wenn dieser Datensatz noch nicht vorhanden ist. Nimmt ein anderer Benutzer denselben Zugriff vor, können zwei statt einem eingefügten Datensatz die Folge sein. Dieser Fehler ist ein Beispiel für den vierten Typ in der folgenden Liste.

Mehr zum Thema:
Was ist ein IP-Telefon?

Mögliche Probleme durch fehlende Isolation

Die vier typischen Fehler werden auch im Deutschen mit einem englischen Begriff bezeichnet.

  1. Dirty Read

Ein Zugriff auf die Datenbank hat Daten noch nicht vollständig verändert, ein lesender Zugriff liest diese noch unkorrekten Daten.

  1. Lost Updates

Zwei Zugriffe werden zum Zweck der Änderung von Daten durchgeführt, nur ein Zugriff wird tatsächlich verarbeitet.

  1. Non-repeatable Read

Ein Lesezugriff ist nicht wiederholbar, das heißt, wiederholte Lesezugriffe liefern verschiedene Ergebnisse.

  1. Phantom Read

Ein Zugriff verändert Daten. Durch diesen Zugriff treffen Suchkriterien während eines anderen Zugriffs auf verschiedene Daten zu.

Lösungen dieser Probleme durch Isolation

Die Datenbankprogrammiersprache SQL sieht vier verschiedene Ebenen für unterschiedlich starke Isolation vor, die wiederum englische Bezeichnungen führen.

– Read uncommitted

In der Definition von SQL sind auf dieser Ebene keine Maßnahmen für Isolation vorgesehen. Alle vier Probleme können daher auftreten. Die meisten DBMS setzen mehr Isolation als vom Standard gefordert um, sodass auf dieser Ebene wenigstens keine Lost updates möglich sind.

– Read committed

Werden Daten verändert, erfolgt auf dieser Ebene eine Sperre für die gesamte Transaktion. Non-repeatable reads und Phantom reads sind immer noch möglich, weil die Lesesperren nur kurzfristig gesetzt werden.

– Repeated Read

Auf dieser Ebene wird die ganze Transaktion sowohl bei Schreib- als auch bei Leseoperationen gesperrt. Damit sind als einziger Fehler noch Phantom reads möglich.

– Serializable

Der Begriff bedeutet, dass alle Transaktionen in beliebiger Reihenfolge ausgeführt der seriellen Ausführung entsprechen und das gleiche Ergebnis liefern. Es kann allerdings sein, dass eine Transaktion abgebrochen werden muss, wenn diese Bedingung nicht eingehalten werden kann. Der entsprechende Nutzer muss dann seine Anfrage an die Datenbank nochmals wiederholen.

Warum wird nicht immer die maximale Isolation angewendet?

Der Grund dafür liegt darin, dass diese Isolationsmaßnahmen mit einigem Aufwand verbunden sind. Die notwendigen Sperren vermindern die Reaktionsfähigkeit der Datenbank. Die Entwickler überlegen sich also, welche Ebene der Isolation für eine bestimmte Anwendung notwendig und ausreichend ist.

Sie sollten darauf achten, dass diese Anforderungen während der Verwendung einer bestimmten Datenbank Änderungen unterworfen sein können. Werden neue Funktionen zum DBMS hinzugefügt oder ändert sich die Art der Verwendung der Datenbank, können Anpassungen des Isolationsgrads erforderlich werden.

Letzte Artikel von Daniel Faust (Alle anzeigen)