Das Datenbanksystem unterscheidet folgende Sperren:
· Spezielle Sperren für die Metadaten des Datenbankkatalogs, die jedoch immer implizit vergeben werden.
Eine schematische Übersicht über die mögliche Parallelität von Lesesperren (L-Sperren) und Schreibsperren (S-Sperren) zeigt die folgende Tabelle.
|
Eine Transaktion habe |
|||||
|
auf einer Tabelle |
auf einer Zeile |
auf dem Datenbankkatalog |
|||
Kann eine andere Transaktion |
S-Sperre |
L-Sperre |
S-Sperre |
L-Sperre |
S-Sperre |
L-Sperre |
für die Tabelle eine S-Sperre anfordern? |
nein |
nein |
nein |
nein |
nein |
ja |
für die Tabelle eine L-Sperre anfordern? |
nein |
ja |
nein |
ja |
nein |
ja |
für irgendeine Zeile der Tabelle eine S-Sperre anfordern? |
nein |
nein |
- |
- |
nein |
ja |
für die gesperrte Zeile eine S-Sperre anfordern? |
- |
- |
nein |
nein |
- |
- |
für eine andere Zeile eine S-Sperre anfordern? |
- |
- |
ja |
ja |
- |
- |
für irgendeine Zeile der Tabelle eine L-Sperre anfordern? |
nein |
ja |
- |
- |
nein |
ja |
für die gesperrte Zeile eine L-Sperre anfordern? |
- |
- |
nein |
ja |
- |
- |
für eine andere Zeile eine L-Sperre 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, d. h. die Anforderung einer Sperre innerhalb einer Transaktion führt dazu, dass auf die Freigabe einer Sperre gewartet werden muss, bis eine der oben genannten oder eine der in der Matrix mit "ja" gekennzeichneten Situationen vorliegt.
Außerdem gilt folgendes:
· Wenn keine Sperre für ein Datenobjekt einer Transaktion zugeordnet ist, kann eine Lese- oder eine Schreibsperre innerhalb jeder Transaktion angefordert werden, und sie wird dieser Transaktion sofort zugeordnet.
· Wenn einer Transaktion T1 eine Lesesperre für ein Datenobjekt zugeordnet ist und keiner konkurrierenden Transaktion eine Sperre für dieses Datenobjekt zugeordnet ist, kann die Transaktion T1 eine Schreibsperre für dieses Datenobjekt anfordern und erhält sie sofort zugeordnet.
· Wenn einer Transaktion eine Schreibsperre für ein Datenobjekt zugeordnet ist, ist es für diese Transaktion möglich, aber nicht nötig, eine Lesesperre anzufordern.