## Sperren für Datenbankobjekte

### 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: MaxDB, SQL-Sperren

○ Datenbankverwaltung im CCMS: SAP liveCache-Technologie, 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