Untitled
unknown
plain_text
2 years ago
8.1 kB
4
Indexable
T1: SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED begin; T2: SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED begin; update pracownicy set nazwisko='XX' where nr_prac=38; T1:(A) Odczyt powinen pokazać zmodyfikowane dane poniewaz read uncommitted umozliwia odczyt bez zatwierdzenia przez inne sesje select * from pracownicy; T2: rollback; T1: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED T2: SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED T1: begin; T2: begin; update pracownicy set nazwisko='YY' where nr_prac=38; T1:(A) Odczyt powinen pokazac nieaktualne dane poniewaz read committed nie pozwala na odczyt bez commitu od innych sesji select * from pracownicy; T2: rollback; T1: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ T2: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ T1: begin; T2: begin; update pracownicy set nazwisko='OO' where nr_prac=38; T1:(A) Odczyt powinen pokazać nieaktualne dane, poniewaz repeatable read nie pozwala na odczyt zmodyfikowanych elementow do zakonczenia biezacej sesji (commit obu sesji) select * from pracownicy; T2: rollback; T1: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE begin; T2: begin; update pracownicy set nazwisko='OO' where nr_prac=38; T1:(A) Serwer powinien nie pozwolic na odczyt, poniewaz SERIALIZABLE nie pozwala na odczyt elementow do zakonczenia biezacej sesji (commit) select * from pracownicy; //nie jest wykonalne wyswietlenie tablicy nawet tej nieaktualnej T2: rollback; T1: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted; T2: SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted; T1: begin; T2: begin; T1: select * from pracownicy; T2:(B) zmiana nazwiska update pracownicy set nazwisko='OO' where nr_prac=38; T1:(C) Serwer powinien pozwolic na odczyt i aktualizowac wszelkie zmiany select * from pracownicy; T2: commit; T1:(D) commit nic nie zmienia w tym przypadku select* from pracownicy; rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; T2: SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; T1: begin; T2: begin; T1: select * from pracownicy; T2:(B) Zmiana nazwiska update pracownicy set nazwisko='cc' where nr_prac=38; T1:(C) Serwer czeka na commit i nie aktualizuje zmian select * from pracownicy; T2: commit; T1:(D) commit zatwierdza zmiany select* from pracownicy; rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; T2: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; T1: begin; T2: begin; T1: select * from pracownicy; T2:(B) Zmiana nazwiska update pracownicy set nazwisko='bb' where nr_prac=38; T1:(C) Serwer czeka na commit obu tranzakcji i nie aktualizuje zmian w t1 select * from pracownicy; T2: commit; T1:(D) commit nie zmieni nazwiska t1 select* from pracownicy; rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; T2: SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; T1: begin; T2: begin; T1: select * from pracownicy; T2:(B) Mamy mozliwosc tak zwanego brudnego odczytu danych ktore mielismy zmienic ale nie zostaly zaakceptowane, ale dzieki rollback mozemy sie jakby do nich wrocic update pracownicy set nazwisko='aa' where nr_prac=38; T1:(C) Nie ma mozliwosci modyfikacji w t2, ale dzieki temu mozemy odczytac stare rekordy w t1 select * from pracownicy; T2: commit; T1:(D) commit nie zmieni nazwiska t1 select* from pracownicy; rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; T2: SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; T1: begin; T2: begin; T1: select * from pracownicy; T2:(E) Powinny zobaczyc to samo select * from pracownicy; T1:(F) Zmiana widoczna obustronnie update pracownicy set nazwisko='aa' where nr_prac=38; T2:(G) Nie jestem w stanie zmienic(lock wait timeout exceeded) potrzebny commit lub stworzenie indexu update pracownicy set nazwisko='ZZ2' where nr_prac=36; //(WILCZYNSKI) T1: rollback; T2: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; T2: SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; T1: begin; T2: begin; T1: select * from pracownicy; T2:(E) Powinny zobaczyc to samo select * from pracownicy; T1:(F) Zmiana widoczna tylko na t1 update pracownicy set nazwisko='aa' where nr_prac=38; T2:(G) udalo sie zmienic ale bez commita nie zostana zapisane update pracownicy set nazwisko='ZZ2' where nr_prac=36; T1: rollback; T2: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; T2: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; T1: begin; T2: begin; T1: select * from pracownicy; T2:(E) Powinny zobaczyc to samo select * from pracownicy; T1:(F) Zmiana widoczna tylko na t1 update pracownicy set nazwisko='aa' where nr_prac=38; T2:(G) Nie jestem w stanie zmienic(lock wait timeout exceeded) potrzebny commit lub stworzenie indexu update pracownicy set nazwisko='ZZ2' where nr_prac=36; T1: rollback; T2: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; T2: SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; T1: begin; T2: begin; T1: select * from pracownicy; T2:(E) Powinny zobaczyc to samo select * from pracownicy; T1:(F) Nie jestem w stanie zmienic(lock wait timeout exceeded) potrzebny commit lub stworzenie indexu update pracownicy set nazwisko='aa' where nr_prac=38; T2:(G) Nie jestem w stanie zmienic(lock wait timeout exceeded) potrzebny commit lub stworzenie indexu update pracownicy set nazwisko='ZZ2' where nr_prac=36; T1: rollback; T2: rollback; //T1: create index iPrac on pracownicy(nr_prac) T1: create index iPrac on pracownicy(nr_prac) SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted; T2: SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted; T1: begin; T2: begin; T1: select * from pracownicy; T2:(E) Powinny zobaczyc to samo select * from pracownicy; T1:(F) Zmiana obustronna update pracownicy set nazwisko='aa' where nr_prac=38; T2:(G) Teraz bez commitu dziala modyfikacja obustronna update pracownicy set nazwisko='ZZ2' where nr_prac=36; T1: rollback; T2: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL read committed; T2: SET SESSION TRANSACTION ISOLATION LEVEL read committed; T1: begin; T2: begin; T1: select * from pracownicy; T2:(E) Powinny zobaczyc to samo select * from pracownicy; T1:(F) Druga sesja czeka na commit update pracownicy set nazwisko='aa' where nr_prac=38; T2:(G) Bez commitu nie wstrzymuje pracy programu ale tez bez commitu nie zmodyfikuje trwale update pracownicy set nazwisko='ZZ2' where nr_prac=36; T1: rollback; T2: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; T2: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; T1: begin; T2: begin; T1: select * from pracownicy; T2:(E) Powinny zobaczyc to samo wiec mamy brudny odczyt select * from pracownicy; T1:(F) Druga sesja nie zaktualizuje dopoki nie bedzie commitu update pracownicy set nazwisko='aa' where nr_prac=38; T2:(G) Bez commitu nie wstrzymuje pracy programu ale tez bez commitu(ubustronny) nie zmodyfikuje trwale update pracownicy set nazwisko='ZZ2' where nr_prac=36; T1: rollback; T2: rollback; T1: SET SESSION TRANSACTION ISOLATION LEVEL serializable; T2: SET SESSION TRANSACTION ISOLATION LEVEL serializable; T1: begin; T2: begin; T1: select * from pracownicy; T2:(E) Powinny zobaczyc to samo wiec mamy brudny odczyt select * from pracownicy; T1:(F) Druga sesja nie zaktualizuje dopoki nie bedzie commitu update pracownicy set nazwisko='aa' where nr_prac=38; T2:(G) Deadlock found when tring to get lock czyli chyba nie mozna wykonywac dwoch operacji na raz w trybie izloacji serializable z indexem - caly program sie zawiesil update pracownicy set nazwisko='ZZ2' where nr_prac=36; T1: rollback; T2: rollback;
Editor is loading...
Leave a Comment