Wykład XI Przetwarzanie transakcyjne Transakcja Transakcja
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