21 ■ WSPÓLBIEŻNOŚĆ W SYSTEMIE ORACLE -230-
Przyklad 21.4.2. Przykład o założonych blokadach.
Pierwsza sesja: |
Druga sesja: |
CONNECT hr/hr | |
CONNECT hr/hr | |
SET TRANSACTION NAME 'tl'; | |
SET TRANSACTION NAME 't2'; | |
SELECT * FROM regions FOR UPDATE; | |
SELECT * FROM regions FOR UPDATE; |
SQL> CONNECT system/test SQL> select z przykładu 21.4.1
Sesja administratora:
HR TM REGIONS
Zaletą metody blokowania danych jest zapewnienie synchronizacji zapisu w przypadku wielu transakcji
próbujących modyfikować te same dane.
i - 2007/2008 - Notatl
21 ■ WSPÓŁBIEŻNOŚĆ W SYSTEMIE ORACLE_-231 -
Metoda ta posiada jednak dwie wady:
• zmniejsza stopień współbieżności (transakcja, która próbuje założyć blokady niezgodne z blokadami już założonymi przez inną transakcję, musi czekać na zdjęcie blokad);
• wprowadza możliwość wystąpienia zakleszczenia (deadlock), kiedy dwie transakcje blokują sobie wzajemnie zasoby. Wówczas żadna z transakcji nie może kontynuować pracy.
System Oracle wykrywa zakleszczenie i rozwiązuje je wykorzystując pewien algorytm wyboru tej transakcji, która zostanie przerwana, tj. jej ostatnie polecenie zostanie przerwane, wycofane.
Przykład 21.5.1. Przykład wystąpienia zakleszczenia.
Pierwsza sesja: |
Druga sesja: |
CONNECT hr/hr | |
CONNECT hr/hr | |
SET TRANSACTION NAME 'Tl'; | |
SELECT * FROM REGIONS FOR UPDATE; | |
SET TRANSACTION NAME 'T2'; | |
SELECT * FROM REGIONS FOR UPDATE; | |
SELECT * FROM LOCATIONS FOR UPDATE; | |
SELECT * FROM LOCATIONS FOR UPDATE; | |
SELECT * FROM REGIONS FOR UPDATE; |