## Parallelität von Sperren

Die folgende Tabelle zeigt, welche Lesesperren (SHARE LOCKS) und Schreibsperren (EXCLUSIVE LOCKS) parallel existieren können.

| Eine Transaktion hat..
| auf einer Tabelle | auf einer Zeile | auf dem Datenbankkatalog
Eine andere Transaktion kann... | Schreibsperre | Lesesperre | Schreibsperre | Lesesperre | Schreibsperre | Lesesperre
für die Tabelle eine Schreibsperre anfordern | nein | nein | nein | nein | nein | ja
für die Tabelle eine Lesesperre anfordern | nein | ja | nein | ja | nein | ja
für irgendeine Zeile der Tabelle eine Schreibsperre anfordern | nein | nein | - | - | nein | ja
für die gesperrte Zeile eine Schreibsperre anfordern | - | - | nein | nein | - | -
für eine andere Zeile eine Schreibsperre anfordern | - | - | ja | ja | - | -
für irgendeine Zeile der Tabelle eine Lesesperre anfordern | nein | ja | - | - | nein | ja
für die gesperrte Zeile eine Lesesperre anfordern | - | - | nein | ja | - | -
für eine andere Zeile eine Lesesperre anfordern | - | - | ja | ja | - | -
die Definition der Tabelle im Datenbankkatalog ändern | nein | nein | nein | nein | nein | nein
die Definition der Tabelle im Datenbankkatalog lesen | ja | ja | ja | ja | nein | ja

In Fällen, die mit „nein“ gekennzeichnet sind, liegt eine Sperrkollision vor. Wenn eine Sperre innerhalb einer Transaktion angefordert wird, dann muss auf die Freigabe einer Sperre gewartet werden, bis eine der in der Matrix mit „ja“ gekennzeichneten Situationen vorliegt.

Außerdem gilt Folgendes:

· Wenn für ein Datenbankobjekt keine Sperre gesetzt ist, dann kann eine Transaktion eine Lese- oder eine Schreibsperre anfordern, und das Datenbanksystem setzt die Sperre sofort.

· Wenn eine Transaktion T1 eine Lesesperre für ein Datenbankobjekt hält und keine andere Transaktion eine Sperre für dieses Datenbankobjekt hält, dann kann Transaktion T1 eine Schreibsperre für dieses Datenbankobjekt anfordern und erhält diese sofort.

· Wenn eine Transaktion eine Schreibsperre für ein Datenbankobjekt hält, dann kann diese Transaktion eine Lesesperre anfordern (dies ist aber nicht notwendig).

Siehe auch:

Sperren für Datenbankobjekte