Die Grundidee des Locking ist es, alle Objekte, welche von einer Transaktion benötigt werden, mit einer entsprechenden Marke (diese wird als Lock bzw. Sperre bezeichnet) zu versehen, welche anderen Transaktionen anzeigt, daß dieses Objekt derzeit nicht verfügbar ist.
2 Arten von Locks werden unterschieden:
X LOCK (EXCLUSIVE LOCKS): Wird durch eine Transaktion A ein Datensatz verändert, so wird dieser für alle anderen Transaktionen gesperrt, bis die Transaktion den Datensatz wieder freigibt. Diese Sperre verhindert, daß andere Transaktionen den Datensatz lesen oder verändern.
S LOCK: (SHARE LOCKS): Wird durch eine Transaktion ein Datensatz abgefragt, so wird dieser Datensatz für X-Locks gesperrt d.h. daß andere Transaktionen den Datensatz nicht ändern dürfen, Lesezugriffe sind jedoch ohne weiteres erlaubt.
Aus diesen zwei Aussagen ergibt sich folgende Wertetabelle
gefordertes Lock gesetztes Lock von Transaktion A
von Transaktion B X S kein
X wait B wait B OK
S wait B OK OK
Bsp.: Angenommen Transaktion A hat einen Datensatz R für ein Änderung (X Lock) gesperrt, so wird eine Anfrage von Transaktion B für einen Lock auf denselben Datensatz (egal welchen Typs) diese in einen Wartezustand führen.
Bsp.: Hat aber die Transaktion A ein S Lock auf den Datensatz R, so muß man bei einer Anfrage eines Locks von Transaktion B auf R zwei Fälle unterscheiden:
a) bei Anfrage von Transaktion B für ein X Lock auf R gelangt diese in einen Wartezustand bis der Datensatz wieder freigegeben wird.
b) eine Anfrage von Transaktion B für ein S Lock auf R wird erlaubt.
|