SYNCHRONIZACJA TRANSAKCJI

advertisement
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)
Download