Metody usuwania impasu.
Sytuacja, w której każdy element zbioru S dwóch lub większej ilości transakcji czeka na blokadę jednostki właśnie zablokowanej przez pewną transakcję ze zbioru S nazywa się impasem (deadlock). Istnieje kilka sposobów na pokonanie tego problemu:
Każda transakcja zgłasza od razu swoje żądania blokowania zaś system albo przydzielała je wszystkie albo w przypadku gdy jedna lub więcej blokad cząstkowych jest już nałożona przez inne transakcje, nie przydziela takiej blokady i powoduje, że cała taka transakcja oczekuje na blokadę.
Przypisuje się jednostkom pewne arbitralne uporządkowanie i wymaga się by wszystkie żądały blokad w tej kolejności.
Nie robi się nic by zapobiegać impasom. Bada się za to okresowo żądania blokowania i sprawdza, czy impas występuje. Stosuje się tu zazwyczaj metodę opartą na rysowaniu grafu oczekiwań. Wierzchołkami takiego grafu są transakcje, a jego krawędzie oznaczają, że transakcja T1 czeka na zablokowanie jednostki która jest zablokowana przez T2
Jeżeli taki graf oczekiwań zostanie utworzony i w grafie tym będą występowały cykle to mamy wówczas dowód na istnienie impasu. Jeżeli taki impas został wykryty, to trzeba zacząć ponownie wykonywać jedną z powodujących ten impas transakcję, a wyniki dotychczasowego działania tej transakcji muszą być usunięte z BD. Taki proces ponownego startu przy impasie może być i często jest skomplikowany jeśli nie opracowano specjalnego sposobu zapisu zmian w BD.
Strategia dwufazowego wypełniania.
Przy tworzeniu zabezpieczeń antyawaryjnych dla rozproszonych BD istotną rolę odgrywa m.in. proces badania czy dana transakcja została wypełniona. Stąd wniosek, że akcja wypełnienia transakcji powinna być zapisana w dzienniku BD. Jeśli zachodzi potrzeba usunięcia skutków awarii, to badając dziennik można dowiedzieć się które transakcje zostały wypełnione. Do określenia czy dana transakcja została wypełniona, czy nie, przyjmuje się często tzw. strategię dwufazowego wypełniania, którą definiujemy następująco:
Transakcja nie może zapisywać danych do BD dopóty, dopóki nie zostanie wypełniona.
Transakcja nie może być wypełniona dopóty, dopóki nie zapisze w dzienniku wszystkich dokonywanych przez siebie zmian elementarnych.
Z powyższych uwarunkowań wynika, ze pierwsza faza wypełnienia, to zapis danych do dziennika, a faza druga to zapis danych do BD. Jeżeli dodatkowo transakcje przestrzegają protokołu dwufazowego i odblokowanie odbywa się po wypełnieniu (zapis do dziennika i zapis do BD) to żadna transakcja nie może odczytywać z BD wartości zapisanej przez transakcję nie wypełnioną. Gdy w systemie wystąpi awaria, to możliwe jest badanie dziennika i powtórzenie wszystkich wypełnionych transakcji zapisanych w dzienniku, które nie mogły zapisać zmian do BD.
T1
T2