Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Sperren für Datenbankobjekte  Dokument im Navigationsbaum lokalisieren

Verwendung

Mehrere Transaktionen können gleichzeitig auf das gleiche Datenbankobjekt, z. B. eine Tabelle, zugreifen. Um die Transaktionen voneinander zu isolieren, setzt das Datenbanksystem Sperren für Datenbankobjekte.

Arten von Sperren

Name

Objekte, die gesperrt werden können

Lesesperre (SHARE LOCK)

Tabellen, Zeilen, Datenbankkatalog

Schreibsperre (EXCLUSIVE LOCK)

Tabellen, Zeilen, Datenbankkatalog

optimistische Sperre

Zeilen

Aktivitäten

Sperren anfordern

Sperren können folgendermaßen angefordert werden:

      Sperren für Zeilen oder Tabellen können implizit vom Datenbanksystem angefordert/freigeben oder explizit von einem Benutzer angefordert/freigegeben werden (siehe SQL-Referenzhandbuch, LOCK-Anweisung und LOCK-Option (lock_option)).

      Sperren auf dem Datenbankkatalog werden immer implizit vom Datenbanksystem angefordert und freigeben.

Mit dem Isolation-Level legen Sie fest, wann das Datenbanksystem welche Art von Sperre setzt. Damit bestimmen Sie den Grad der Parallelität von Transaktionen und die Phänomene, die auftreten können. Sie können das Isolation-Level beim Eröffnen einer Datenbanksitzung angeben. Wenn Sie kein Isolation-Level angeben, dann verwendet das Datenbanksystem den Vorschlagswert.

In Abhängigkeit vom Isolation-Level fordert das Datenbanksystem dann während der Abarbeitung der SQL-Anweisungen die erforderlichen Sperren an. Alle ändernden SQL-Anweisungen (z. B. INSERT, UPDATE, DELETE) fordern stets eine Schreibsperre an.

Um für eine Transaktion explizit Sperren anzufordern, können Sie die LOCK-Anweisung verwenden.

Um einzelne Zeilen einer Tabelle zu sperren, können Sie die LOCK-Option innerhalb einer SQL-Anweisung verwenden. Dies ist in jedem Isolation-Level möglich. Mit der LOCK-Option können Sie auch für einzelne SQL-Anweisungen den Isolation-Level zeitweilig übersteuern.

Wenn in einer Tabelle von einer Transaktion zu viele Zeilensperren angefordert werden, dann versucht das Datenbanksystem, dafür eine Tabellensperre zu setzen. Die Grenze, ab der das Datenbanksystem versucht, Zeilensperren in eine Tabellensperre zu verwandeln, konfigurieren Sie mit dem allgemeinen Datenbankparameter MAXLOCKS.

Sperren freigeben

Art der Sperre

Freigabe

explizit vom Benutzer mit der LOCK-Anweisung angefordert

Das Datenbanksystem gibt die Sperre nach dem Ende der Transaktion frei.

Ausnahmen: Wenn die COMMIT-Anweisung oder die ROLLBACK-Anweisung eine LOCK-Anweisung enthalten, gibt das Datenbanksystem die Sperren am Ende der Transaktion nicht frei.

implizit gesetzte Lesesperre

abhängig vom Isolation-Level

implizit gesetzte Schreibsperre

Schreibsperre für geänderte Zeilen

Schreibsperren, die durch eine ändernde SQL-Anweisung angefordert wurden

Tabellensperren

Das Datenbanksystem gibt die Sperre erst nach dem Ende der gesamten Transaktion frei.

Schreibsperre für noch nicht geänderte Zeilen

Lesesperren für Zeilen

Sie können diese Sperren mit einer UNLOCK-Anweisung freigeben.

Siehe SQL-Referenzhandbuch, UNLOCK-Anweisung (unlock_statement).

Mit dem speziellen Datenbankparameter REQUEST_TIMEOUT begrenzen Sie, wieviel Zeit maximal vergehen darf, bis das Datenbanksystem eine Sperre aufhebt (Timeout).

Anzeigen von Informationen zu Sperren

Sie können sich Informationen zu Sperren folgendermaßen anzeigen lassen:

      Database Manager GUI, Datenbankaktivitäten anzeigen

      In SAP-Systemen verwenden Sie das CCMS, siehe Datenbankverwaltung im CCMS, SQL-Sperren

Die Systemtabelle LOCKS enthält Informationen zu Sperren, die Systemtabelle LOCK_WAITS Informationen zu den Sperranforderungen.

Siehe auch:

Transaktionen

Das Datenbanksystem im Überblick

Ende des Inhaltsbereichs