Wykład XI Przetwarzanie transakcyjne Transakcja Transakcja

Komentarze

Transkrypt

Wykład XI Przetwarzanie transakcyjne Transakcja Transakcja
Wykład XI
Przetwarzanie transakcyjne
Transakcja
zestaw operacji pod szczególną kontrolą
• transakcja to sekwencja operacji, która musi zakończyć się sukcesem w całości - w
przeciwnym wypadku musi powrócić stan początkowy (wyjściowy )
• pojęcie transakcji jest podstawą wszelkich mechanizmów odpowiedzialnych za niezawodne
działanie systemu z wieloma użytkownikami
• zmiany zachodzące w świecie rzeczywistym, a zmiany w bazie danych
przykłady problemów; realizacja dostaw części od producenta do klienta:
" pobrano " zamówioną liczbę części ze stanów magazynowych producenta, po czym
nastąpiła awaria systemu
" wstawiono " do zamówień klienta odpowiednią liczbę zamówionych części, po czym
nastąpiła awaria
prowadzono jednocześnie sprzedaż tej samej części dla kilku innych klientów
Transakcja
jest sekwencją logicznie powiązanych operacji na bazie danych, która przeprowadza bazę
danych z jednego stanu spójnego w inny stan spójny.
Typy operacji na bazie danych obejmują odczyt i zapis danych oraz zakończenie połączone z
akceptacją ( zatwierdzeniem ) lub wycofaniem transakcji.
przykład:
BEGIN TRANSACTION
INSERT INTO Zamowienia (id_zamowienia, l_sztuk, id_czesci )
VALUES (351, 100, ' XY_231');
UPDATE Stany_magazynowe SET l_sztuk = l_sztuk -100
WHERE id_czesci=”XY_231';
COMMIT:
Transakcja to grupa operacji w bazie danych, które jako całość charakteryzuje się
zbiorem gwarantowanych właściwości - znanych jako ACID
•
•
•
•
niepodzielność ( z ang. Atomicity ) - wykonują się wszystkie
operacje, albo żadna
spójność ( z ang. Consistency ) - wszystkie operacje składające
się na transakcję działają na spójnym zbiorze danych, a po jej
zakończeniu baza danych pozostaje w spójnym stanie
izolacyjność ( z ang. Isolation ) - transakcje są od siebie logicznie
odseperowane, oddziałują na siebie poprzez dane. Mimo współbieżnego
wykonywania, transakcje widzą stan bazy danych tak, jak gdyby były
wykonywane w sposób sekwencyjny .
trwałość ( z ang. Durability ) - po zatwierdzeniu transakcji zmiany dokonane
w jej wyniku są trwałe, nawet w przypadku awarii systemu
Wykład XI
Użytkownik realizuje swoje transakcje poprzez
• polecenia języka SQL kierowane bezpośrednio,
• albo pośrednio przy użyciu wcześniej przygotowanych aplikacji
bazodanowych.
Rozpoczęcie transakcji
niejawne:
•
•
pierwsza poprawna instrukcja w sesji użytkownika
koniec poprzedniej transakcji
jawne:
•
w niektórych systemach bazodanowych polecenie
• BEGIN TRANSACTION
• lub START TRANSACTION
Zakończenie transakcji
jawne:
•
•
polecenie COMMIT – zatwierdzenie zmian
polecenie ROLLBACK – wycofanie zmian
niejawne:
•
•
•
poprawne zamknięcie sesji użytkownika ( wylogowanie ) - zatwierdzenie zmian
polecenia z grupy DDL lub DCL – zatwierdzenie zmian
awaria systemu – wycofanie zmian
Skutki zatwierdzenia transakcji:
•
•
•
•
•
zwolnienie blokad
usunięcie punktów bezpieczeństwa
sprawdzenie odroczonych ograniczeń integralnościowych
trwały zapis danych
widoczność zmian dla innych transakcji
Skutki wycofania transakcji:
•
•
zwolnienie blokad
anulowanie zmian – stan bazy sprzed transakcji
Wykład XI
Punkty bezpieczeństwa
tworzenie punktu bezpieczeństwa
SAVEPOINT < nazwa_punktu >;
usuwanie punktu bezpieczeństwa
RELEASE SAVEPOINT < nazwa_punktu >;
wycofanie do danego punktu bezpieczeństwa
ROLLBACK TO SAVEPOINT < nazwa_punktu >;
przykłady:
UPDATE pracownicy SET placa = placa + 350 WHERE nr_akt = 8901;
SAVEPOINT punkt_sb1;
UPDATE pracownicy SET dod_funkcyjny= 1.15*dod_funkcyjny WHERE nr_akt = 8902;
SAVEPOINT punkt_sb2;
CREATE TABLE robo
( kol NUMBER ):
DELETE FROM pracownicy WHERE nr_akt =9120;
ROLLBACK TO SAVEPOINT punkt_sb1;
ROLLBACK;
SQL Error: ORA-01086: punkt zapisywania "PUNKT_SB1" nigdy nie został w tej sesji ustanowiony lub jest niepoprawny
Poziomy spójności w bazie danych
•
•
spójność polecenia – wszystkie dane odczytywane przez pojedyncze polecenie, pochodzą z
tego samego momentu w czasie – momentu rozpoczęcia wykonania polecenia
spójność transakcji – wszystkie polecenia odczytujące w ramach pojedynczej transakcji
dane z bazy danych, będą odczytywały stan z momentu rozpoczęcia transakcji
Zagrożenia spójności:
awarie, działania użytkowników, współbieżny dostęp do danych
Współbieżność
równoczesny dostęp wielu transakcji do jednych i tych samych danych
anomalie związane ze współbieżnym dostępem do danych:
•
•
•
•
brudny odczyt
utracona modyfikacja
niepowtarzalny odczyt
fantomy
Brudny odczyt ( ang. dirty read ) - system pozwala widzieć jednej transakcji niezatwierdzone
zmiany wprowadzone przez drugą transakcję, które mogą zostać wycofane.
Wykład XI
Utracona modyfikacja ( ang. lost update ) - dwie transakcje równolegle przystępują do
aktualizacji tych samych danych i zmiany, wprowadzone przez jedną transakcji, zostają nadpisane
przez zmiany z drugiej transakcji.
Niepowtarzalny odczyt ( ang. nonrepeatable read/fuzzy read) – wynik tego samego zapytania
przeprowadzonego wielokrotnie w trakcie trwania transakcji jest różny (transakcja widzi zmiany
wprowadzone przez drugą transakcję ).
Fatomy (ang. phantom read ) - wynik tego samego zapytania przeprowadzonego wielokrotnie w
trakcie trwania transakcji jest różny- powiększa się ( transakcja widzi wiersze wprowadzane przez
drugą transakcję)
Zadanie
uruchom dwie sesje tego samego użytkownika. W pierwszej sesji wykonaj polecenie UPDATE . .
zwiększające wynagrodzenie pracownika o nazwisku SKALSKI o 10%.
w drugiej sesji temu samemu pracownikowi zwiększ wynagrodzenie o 15%.
sprawdź wynagrodzenia w obu sesjach, zatwierdź zmiany i ponownie „ przekonaj się „ o
wartościach wynagrodzenia pracownika .
Standard języka SQL
•
•
•
•
– definiuje różne poziomy izolacji dla transakcji
SERIALIZABLE ( uszeregowany )
READ COMMITTED ( odczyt zatwierdzonych danych )
REPEATABLE READ ( powtarzalny odczyt )
READ UNCOMMITTED ( odczyt niezatwierdzonych danych )
odczyt danych niezatwierdzonych - zmiany, wprowadzone przez operacje w ramach aktywnej
transakcji ( jeszcze nie zatwierdzonej) są widoczne dla innych, równolegle realizowanych
transakcji.
odczyt zatwierdzonych danych - zmiany, wprowadzone przez operacje w ramach transakcji, są
widoczne dla innych transakcji dopiero po zatwierdzeniu transakcji.
powtarzalny odczyt - zapobiega anomalii niepowtarzalnego odczytu.
odczyt uszeregowany - serializacja na poziomie całej transakcji. Transakcja nie widzi zmian
( zatwierdzonych i niezatwierdzonych ) dokonywanych przez inne transakcje. Zmiany te są
widoczne dopiero po jej zakończeniu.
Możliwe błędy występujące na danym poziomie izolacji
brudne odczyty
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
tak
nie
nie
nie
niepowtarzalne
odczyty
tak
tak
nie
nie
fantomy
tak
tak
tak
nie
Wykład XI
Zasadniczo domyślnym poziomem izolacji powinien być SERIALIZABLE
ale niektóre systemy używają READ COMMITTED
Ustawienie poziomu izolacji transakcji dla:
transakcji
SET TRANSACTION ISOLATION LEVEL
{READ COMMITTED | SERIALIZABLE };
sesji
ALTER SESSION SET ISOLATION_LEVEL =
{READ COMMITTED | SERIALIZABLE };
określenie trybu dostępu
SET TRANSACTION { READ WRITE | READ ONLY }
Zarządzanie współbieżnością
System zarządzania bazą danych stosuje odpowiednie algorytmy zarządzania
współbieżnym zbiorem transakcji.
Algorytmy synchronizacji współbieżnych transakcji:
•
•
blokowania dostępu do danych – uszeregowanie wynika z kolejności
uzyskiwanych blokad
znaczników czasowych
Blokada
( ang. lock ) - technika kontroli współbieżnego dostępu do danych polegająca
na nałożeniu blokady na obiekt, który jest modyfikowany przez transakcję ( w
szczególności inne transakcje nie mogą go zmieniać ). Blokady zakładane są
automatycznie w momencie wydawania przez użytkownika poleceń modyfikacji danych
lub ręcznie poprzez odpowiednie polecenie.
Wyróżniamy blokady:
• wyłączne ( ang. exclusive lock )
• współdzielone ( ang. shared lock )
Ziarnistość blokad
Rodzaj blokowanego zasobu jest określany jako „ziarnistość - granulacja „
elementów danych :
Wykład XI
•
•
•
•
pojedynczy atrybut
wiersz tabeli
blok danych
tabela a nawet cała baza
Nakładanie blokad
blokowanie wierszy
SELECT < lista_wyrażeń> FROM < tabela >
WHERE < warunek_logiczny >
FOR UPDATE [ OF < lista_atrybutów > ] [NOWAIT ];
blokowanie tabel
LOCK TABLE < tabela > IN < tryb_blokowania > MODE [NOWAIT ];
gdzie tryby blokowania:
ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE
Zakleszczenia
( ang. deadlock ) - stan, w którym dwie lub więcej równoległych transakcji
znajduje się w stanie wzajemnego oczekiwania na uwolnienie blokady z potrzebnych
zasobów, aby móc kontynuować działanie.
System powinien wykryć blokadę i ją zlikwidować wyszukując cykl w grafie oczekiwań
(ang. wait-for-graph) i wycofując jedną z należących do cyklu transakcji.
Szeregowalność
( ang. serializability) – kryterium poprawności kontroli współbieżności,
mówiące, że transakcje realizowane równolegle są szeregowalne jeżeli wynik ich działania
jest taki sam, jak w wypadku działania sekwencyjnego.
Założenia
•
pojedyncze, sekwencyjne transakcje są poprawne
•
wykonywanie sekwencyjne pojedynczych transakcji w dowolnej kolejności daje
poprawny i identyczny wynik
•
realizacja współbieżna równoważna realizacji sekwencyjnej, dla tego samego
zbioru transakcji, jest również poprawna i daje taki sam wynik.
Protokół dwufazowego blokowania
•
zanim transakcja rozpocznie działanie na jakimś obiekcie zakłada na niego blokadę
•
po zwolnieniu blokady transakcja nie może już nakładać nowych blokad.
Twierdzenie dwufazowego blokowania
jeżeli wszystkie transakcje wypełniają protokół dwufazowego blokowania to wszystkie ich
współbieżne realizacje są szeregowalne.
Przygotowano na podstawie wykładów dr inż. Olga Siedlecka-Lamch; Bazy Danych