SYNCHRONIZACJA TRANSAKCJI - BLOKOWANIE Użytkownik A nadaje prawa odczytu, wstawiania, modyfikowania i usuwania krotek z relacji pracownicy. Użytkownik B tworzy synonim pr do relacji A.pracownicy. 1. Współbieżny odczyt i modyfikowanie krotek tej samej relacji A. Użytkownik A Użytkownik B 1) odczytaj dane z relacji A.pracownicy 2) uaktualnij pracownikom płacę dodatkową 3) odczytaj dane z relacji A.pracownicy 4) zatwierdź transakcję 5) odczytaj dane z relacji A.pracownicy B. Użytkownik A Użytkownik B 1) odczytaj dane z relacji A.pracownicy 2) rozpocznij transakcję tylko do odczytu 3) uaktualnij pracownikom płacę dodatkową 4) odczytaj dane z relacji A.pracownicy 5) zatwierdź transakcję 6) odczytaj dane z relacji A.pracownicy 7) zatwierdź transakcję tylko do odczytu 8) odczytaj dane z relacji A.pracownicy 2. Współbieżne modyfikowanie różnych krotek tej samej relacji przez dwie transakcje Użytkownik A Użytkownik B 1) odczytaj płace pracowników o numerach 2) odczytaj płace pracowników o numerach 210 i 220 210 i 220 3) zwiększ płacę pracownikowi o numerze 210 4) zmniejsz płacę pracownikowi o numerze 220 5) zatwierdź transakcję 6) odczytaj płace pracowników o numerach 210 i 220 7) zatwierdź transakcję 8) odczytaj płace pracowników o numerach 210 i 220 3. Współbieżne modyfikowanie tej samej krotki przez dwie transakcje Użytkownik A Użytkownik B 1) zwiększ płacę pracownikowi o numerze 230 2) zwiększ płacę pracownikowi o numerze 230 3) odczytaj płacę pracownika o numerze 230 4) zatwierdź transakcję 5) odczytaj płacę pracownika o numerze 230 7) zatwierdź transakcję 8) odczytaj płacę pracownika o numerze 230 9) odczytaj płacę pracownika o numerze 230 4. Współbieżny zapis i odczyt z klauzulą for update tej samej krotki Użytkownik A 1) zmniejsz płacę pracownikowi o numerze 160 Użytkownik B 2) odczytaj w celu zmodyfikowania dane pracownika o numerze 120 3) odczytaj dane wszystkich pracowników 4) odczytaj w celu zmodyfikowania dane pracowników zespołu 20 5) zatwierdź transakcję 6) podnies o 10% płace pracowników zespołu 20 7) zatwierdź transakcję 5. Jawne blokowanie relacji w trybie SHARE (S) Użytkownik A Użytkownik B 1) wyświetl sumę zarobków pracowników 2) zwiększ płacę pracownikowi o numerze 160 3) zatwierdź transakcję 4) wyświetl sumę zarobków pracowników 5) zablokuj relację A.pracownicy w trybie SHARE 6) wyświetl sumę zarobków pracowników 7) odczytaj w celu zmodyfikowania krotkę pracownika o numerze 160 8) zwiększ płacę pracownikowi o numerze 140 9) wyświetl sumę zarobków pracowników 10) zatwierdź transakcję 6. Jawne blokowanie relacji w trybie SHARE ROW EXCLUSIVE (SRX) Użytkownik A 2) odczytaj zawartość relacji pracownicy 4) odczytaj w celu zmodyfikowania krotkę pracownika o numerze 110 Użytkownik B 1) zablokuj relację A.pracownicy w trybie SHARE ROW EXCLUSIVE 3) odczytaj zawartość relacji A.pracownicy 5) odczytaj w celu zmodyfikowania krotkę pracownika o numerze 120 6) zwiększ płacę pracownika o numerze 130 7) zablokuj relację pracownicy w trybie SHARE z klauzulą NO WAIT 8) zmniejsz o 10% płacę pracownika o numerze 150 9) zwiększ o 200 płacę pracownika o numerze 150 10) zatwierdź transakcję 11) zatwierdź transakcję 7. Jawne blokowanie relacji w trybie EXCLUSIVE (X) Użytkownik A 1) zablokuj relację pracownicy w trybie EXCLUSIVE 5) zwiększ płacę pracownika o numerze 160 7) zatwierdź transakcję Użytkownik B 2) odczytaj zawartość relacji A.pracownicy 3) zablokuj relację pracownicy w trybie SHARE z klauzulą NO WAIT 4) zablokuj relację pracownicy w trybie SHARE ROW EXCLUSIVE z klauzulą NO WAIT 6) odczytaj w celu zmodyfikowania krotkę pracownika o numerze 120 8) zatwierdź transakcję 8. Zakleszczenie (ang. deadlock) Użytkownik A 1) zwiększ płacę pracownika o numerze 210 Użytkownik B 2) zwiększ płacę pracownikowi o numerze 220 3) zmniejsz płace pracownikowi o numerze 220 4) zmniejsz płacę pracownikowi o numerze 210 9. Zasymulować zakleszczenie, w którym biorą udział trzy transakcje. 10. Spójność odczytu danych w modelu wielowersyjnym Użytkownik 1 1) Użytkownik 2 Użytkownik 3 commit; set transaction read only; select * from pracownicy; Użytkownik 4 commit; update pracownicy 2) set placa_pod = 510 where id_prac=230; commit; 3) select * from pracownicy; commit; set transaction read only; select * from pracownicy; update pracownicy set placa_pod = 600 where 4) id_prac=230; commit; 5) select * from pracownicy; select * from pracownicy; commit; set transaction read only; select * from pracownicy; select * from pracownicy; commit; select * from pracownicy; commit; select * from pracownicy; commit; delete pracownicy 6) where id_prac=230; commit; 7)