BD-1st-2.4-lab9.tresc-1.1-Slajd20

Z Studia Informatyczne
Wersja z dnia 07:33, 10 sie 2006 autorstwa PKrzyzagorski (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Zakleszczenie w bazie danych

Zakleszczenie w bazie danych


Poważnym problemem, występującym w bazach danych ze zbiorem współbieżnych transakcji, jest możliwość wystąpienia zakleszczenia. Zakleszczenie to sytuacja, w której aktywne transakcje nie mogą zakończyć swojego działania, gdyż nawzajem blokują sobie zasoby (rekordy i relacje). Zanalizujmy zaprezentowany przykład. Zakładamy, że użytkownicy ALA i OLEK przyznali sobie nawzajem prawa odczytu, modyfikacji i usuwania rekordów ze swoich relacji PRACOWNICY i ZESPOLY.

Użytkownik OLEK rozpoczął swoją transakcję, oznaczmy ją jako transakcja 1, w niej wykonuje pierwsze polecenie, które modyfikuje wartość płacy podstawowej w rekordzie relacji PRACOWNICY ze schematy użytkownika ALA, opisującym pracownika o identyfikatorze 200. Przed modyfikacją rekord zostaje zablokowany w trybie wyłącznym przez transakcję 1. W międzyczasie użytkownik ALA rozpoczął swoją transakcję, oznaczmy ją jako transakcja 2, w pierwszym poleceniu zmodyfikował wartość atrybutu ADRES relacji ZESPOLY ze schematu użytkownika OLEK w rekordzie opisującym zespół o nazwie ALGORYTMY. Rekord zostaje zablokowany przez transakcję 2. Użytkownik OLEK w swojej transakcji 1 kontynuuje pracę i próbuje zmodyfikować adres zespołu o nazwie ALGORYTMY w swojej własnej relacji ZESPOLY. Jednak transakcja nie może uzyskać blokady – rekord został wcześniej zablokowany przez transakcję 2. Transakcja 1 zostaje zawieszona, czekając na zwolnienie blokady.

Ciąg dalszy na następnym slajdzie.


<< Poprzedni slajd | Spis treści | Następny slajd >>