BD-1st-2.4-lab9.tresc-1.1-Slajd18
Blokady w SZBD Oracle (2)
Bieżący i następny slajd przedstawiają polecenia, pozwalające na ręczne zakładanie blokad na rekordach i relacjach.
Jeśli do zapytania SQL dołączymy klauzulę FOR UPDATE, na rekordach, które zostaną zwrócone przez zapytanie, system spróbuje założyć blokady, oczywiście o ile rekordy nie są już zablokowane przez inną transakcję. W przypadku uzyskania blokad rekordy zostają przydzielone w trybie wyłącznym do transakcji, dodatkowo na relacji zostaje założona blokada ROW SHARE. Jeśli rekordy zostały wcześniej zablokowane przez inną transakcję, polecenie jest wstrzymywane do czasu, aż blokady na rekordach zostaną zwolnione. Jeśli do polecenia dodamy klauzulę NOWAIT, wówczas w przypadku niemożności zablokowania rekordów polecenie jest przerywane a na konsoli zostaje wypisany komunikat o wystąpieniu błędu. Rozszerzonej postaci zlecenia FOR UPDATE z dodatkową częścią OF <lista_atrybutów> używa się w przypadku, gdy zapytanie odwołuje się do wielu relacji a zablokowane mają zostać rekordy tylko wybranych relacji. W takim przypadku na liście atrybutów po słowie OF należy podać po jednym, dowolnym atrybucie z każdej relacji, której rekordy mają zostać zablokowane. Jeśli klauzula OF z listą atrybutów zostanie pominięta, zablokowane zostaną rekordy wszystkich relacji, biorących udział w zapytaniu.
W zaprezentowanym na slajdzie przykładzie zapytanie łączy rekordy relacji PRACOWNICY i ZESPOLY. Blokady zostaną założone tylko na tych rekordach relacji PRACOWNICY, które wejdą w skład zbioru wynikowego zapytania.