Datenintegrität

Zur Wahrung der Datenintegrität stehen Transaktions- und Sperrmechanismen zur Verfügung. Eine Transaktion ist eine logische Einheit von einer oder mehreren SQL-Anweisungen. Werden alle SQL- Anweisungen innerhalb einer Transaktion fehlerfrei verarbeitet, kann die Transaktion in der Datenbank festgeschrieben (COMMIT) werden. Schlägt eine Datenbankoperation innerhalb einer Transaktion fehl, kann die gesamte Transaktion rückgängig gemacht werden (ROLLBACK). Zusätzlich kann über die Definition von Savepoints ein teilweises Zurücksetzen einer Transaktion ermöglicht werden (ROLLBACK TO SAVEPOINT). Um konkurrierende Zugriffe zwischen zwei oder mehr Transaktionen zu regeln, stehen vier Sperrstufen zur Verfügung. Diese Sperren werden durch den SQL-Server automatisch in Abhängigkeit von der ausgeführten Operation gesetzt. Im einzelnen sind dies

Diese Sperren können auf Tabellen-, Seiten- und Satzebene vergeben werden. Die Seiten- und Satzsperren bei INSERT, UPDATE und DELETE Anweisungen werden durch den SQL-Server gesetzt. Dabei ist es von der Definition der jeweiligen Tabelle abhängig, ob Seiten- oder Satzsperren verwendet werden. Neben den Sperren, die durch den SQL-Server vergeben werden, können explizit Sperren auf Tabellenebene (LOCK TABLE) und auch auf Satzebene (LOCK ROW) vergeben werden.

Um die Wahrung der Datenintegrität flexibel verwalten zu können, stehen vier verschiedene Isolation Level zur Verfügung, über die festgelegt werden kann, welche gesperrten Datenelemente gelesen werden können, bzw. wie gelesene Datenelemente gesperrt werden.

Die Isolation Level haben die folgenden Wirkungen:

DIRTY READ
Gelesene Datensätze werden nicht gesperrt und es können gesperrte Datensätze anderer Benutzer gelesen werden.
COMMITTED READ
Gelesene Datensätze werden nicht gesperrt und es können nur Sätze gelesen werden, die nicht von einem anderen Benutzer exklusiv gesperrt sind.
CURSOR STABILITY
Der jeweils aktuelle Satz einer Ergebnismenge wird gesperrt, damit kein anderer Benutzer ihn verändern kann. Es können nur Sätze gelesen werden, die nicht mit einem Exclusive- oder Update-Lock versehen sind.
REPEATABLE READ
Alle innerhalb einer Transaktion gelesenen Sätze werden mit einem Shared-Lock versehen, wodurch anderen Benutzern ein ändern dieser Sätze unmöglich gemacht wird. Es können nur Sätze gelesen werden, die nicht mit einem Update- oder Exclusive-Lock versehen sind.

Bei jedem Isolation Level läßt sich ein Constant-Locking aktivieren, bei dem alle gelesenen Datensätze mit einem Constant-Lock gesperrt werden. Diese Sperre erlaubt das parallele Bearbeiten von Datensätzen durch mehere Benutzer, ohne daß es zu einem "Lost Update" Problem kommen kann.