Aplikacije u viekorisnikom okruenju Nikola Ajzenhamer Programiranje baza
Aplikacije u višekorisničkom okruženju Nikola Ajzenhamer Programiranje baza podataka Matematički fakultet 2019/2020
Višekorisničko okruženje
Zaključavanje Aplikacija 1 Aplikacija 2
Svojstva katanca • Režim • Tip pristupa koji je dozvoljen procesu • Primeri: za čitanje, za pisanje, za čitanje i pisanje, . . . • Objekat • Resurs nad kojim se postavlja katanac • Primeri: slog, tabela, prostor tabela, . . . • Trajanje • Dužina vremena tokom kojeg je proces držao katanac • Primeri: tokom tekuće transakcije, kroz više transakcija, . . .
Kompatibilnost katanaca
Mrtva petlja Aplikacija 2 Aplikacija 1 Tabela 1 A J L T E P A V Katanac u T 1: UPDATE Tabela 1 T 2: UPDATE Tabela 2 Katanac u T 2 T 1: UPDATE Tabela 2 T R M T 3: Čekaj na oslobađanje katanca od Aplikacije 2 Katanac u T 2: UPDATE Tabela 1 Tabela 2 Katanac u T 1 T 3: Čekaj na oslobađanje katanca od Aplikacije 1
Mrtva petlja Aplikacija 2 Aplikacija 1 Tabela 1 Katanac u T 2 T 1: UPDATE Tabela 1 T 1: UPDATE Tabela 2 T 2: UPDATE Tabela 1 T 3: Čekaj na oslobađanje katanca od Aplikacije 2 Tabela 2 Katanac u T 1 T 3: Čekaj na oslobađanje katanca od Aplikacije 1 TN: Nastavlja sa radom
Mrtva petlja Aplikacija 1 T 1: UPDATE Tabela 1 T 2: UPDATE Tabela 2 T 3: Čekaj na oslobađanje katanca od Aplikacije 2 • SUBP poništava sve izmene koje je odabrana aplikacija-žrtva izvršila nad BP u tekućoj transakciji • SUBP uništava sve katance koje je odabrana aplikacija-žrtva držala do tada • SUBP vraća kod -911 ili -913 koje je aplikacija-žrtva dužna da obradi
Čekanje na katanac • Inicijalno, vreme za čekanje aplikacije na katanac određeno je prilikom podešavanja BP (najčešće, beskonačno dugo) • SET CURRENT LOCK TIMEOUT • Postavljanje konkretnog broja sekundi: • SET CURRENT LOCK TIMEOUT 10 • Postavljanje podrazumevane vrednosti: • SET CURRENT LOCK TIMEOUT NULL
Zadatak 6. 1 Napisati C/SQL program koji za svaki smer pita korisnika da li želi da promeni broj bodova na tom smeru. Ukoliko korisnik odgovori potvrdno, aplikacija zahteva od korisnika da unese novi broj bodova nakon čega se vrši izmena podataka. Napisati program tako da može da radi u višekorisničkom okruženju. Postaviti istek vremena za zahtevanje katanaca na 5 sekundi. Pokrenuti dve instance aplikacije. Uveriti se da dok jedna aplikacija obrađuje tekući smer, druga aplikacija ne može da dobije katanac nad odgovarajućim slogom.
Obrada transakcija u višekorisničkom okruženju • Transakcija je cela obrada kursora • Problem • Ukoliko za jedan slog ne možemo dobiti katanac, biće poništene sve izmene koje su nastale obradom prethodnih slogova • Rešenje • Implementirati transakciju tako da predstavlja izmenu jednog sloga • Dopuniti implementaciju tako da aplikacija pamti obrađene slogove
Zadatak 6. 2 Napisati C/SQL program koji za svaki predmet omogućuje korisniku da poveća broj semestra u kome se taj predmet sluša za 1. Nakon svakog ažuriranja, proveriti da li je odgovarajuci red u tabeli izmenjen ponovnim dohvatanjem informacija. Napisati program tako da može da radi u višekorisničkom okruženju. Obrada jednog predmeta predstavlja jednu transakciju. Postaviti istek vremena za zahtevanje katanaca na 10 sekundi.
Zadatak za vežbu (1/2) Napisati C/SQL program koji za sve ispitne rokove pronalazi informacije o polaganjima za svaki položeni predmet u tom ispitnom roku i te podatke unosi u tabelu ISPITNI_ROKOVI_POLAGANJA. Nakon jednog unosa podataka ispisati unete podatke odvojene zapetom. Nakon svih unosa podataka, potrebno je odgovarajućom SQL naredbom izračunati broj unetih redova u tabeli ISPITNI_ROKOVI_POLAGANJA i ispisati rezultat na standardni izlaz. Napisati program tako da može da radi u višekorisničkom okruženju. Unos podataka za jedan ispitni rok i jedno polaganje predstavlja jednu transakciju. Postaviti istek vremena za zahtevanje katanaca na 5 sekundi.
Zadatak za vežbu (2/2) Napraviti tabelu ISPITNI_ROKOVI_POLAGANJA koja sadrži kolone sa podacima o: • godini roka • oznaci roka • identifikatoru predmeta • oceni • broju položenih ispita na tom predmetu sa tom ocenom • nazivu roka • nazivu predmeta Definisati primarni ključ na osnovu prvih 5 kolona i strane ključeve ka odgovarajućim tabelama.
Svojstva transakcija (ACID) • Atomičnost (Atomicity) • Ili se izvršava u celosti ili se ne izvršava • Konzistentnost (Consistency) • Održava konzistentnost BP • Izolacija (Isolation) • Ne utiče na izvršavanje drugih transakcija • Trajnost (Durability) • Izmene su trajno zapamćene u BP
Nivo izolovanosti • Stepen u kojem su slogovi koji se čitaju ili ažuriraju od strane procesa P dostupni drugim konkurentnim aplikacionim procesima • Stepen u kojem ažuriranja slogova od strane drugih konkurentnih aplikacionih procesa mogu da utiču na izvršavanje procesa P
Programersko podešavanje nivoa izolovanosti • Na nivou jedne naredbe • WITH (RR | RS | CS | UR) • Podešavanjem specijalnog registra • SET CURRENT ISOLATION (RR | RS | CS | UR | RESET) • Na nivou paketa • ISOLATION (RR | RS | CS | UR)
Ponovljeno čitanje (Repeatable Read) • Nijedna tabela čiji je slog pročitan od strane procesa P ne sme se menjati od strane drugih procesa sve do završetka obrade od strane procesa P • Nijedna tabela sloga promenjenog od strane drugog procesa ne može se čitati od strane procesa P dok se promene u okviru tog procesa na okončaju
Zadatak 6. 3 Napisati C/SQL program repeatable. Read koji dva puta ispisuje informacije o godini, oznaci, nazivu i periodu prijavljivanja za svaki ispitni rok u 2016. godini. Omogućiti da se prilikom oba ispisivanja dobijaju iste informacije. Napisati C/SQL program insert. Ispitni. Rok koji unosi novi ispitni rok za mesec mart u 2016. godini. Postaviti istek vremena za zahtevanje katanaca na 5 sekundi.
Stabilno čitanje (Read Stability) • Nijedan slog rezultujuće tabele koji je pročitan od strane procesa P ne sme se menjati od strane drugih procesa sve do završetka obrade od strane procesa P • Nijedan slog rezultujuće tabele promenjen od strane drugog procesa ne može se čitati od strane procesa P dok se promene u okviru tog procesa na okončaju • Problem fantomskih redova
Problem fantomskih redova Aplikacija 1 Aplikacija 2 Aplikacija 1 SELECT * FROM TABELA WHERE KOL 2 >= 10 INSERT INTO TABELA VALUES (4, 20, . . . ); SELECT * FROM TABELA WHERE KOL 2 >= 10 COMMIT WORK; Kol 1 Kol 2 . . . 1 10 . . . 2 15 . . . 3 10 . . . 4 20 . . . Fantomski red
Zadatak 6. 4 Napisati C/SQL program read. Stability koji dva puta ispisuje informacije o godini, oznaci, nazivu i periodu prijavljivanja za svaki ispitni rok u 2016. godini. Dozvoljeno je da se prilikom drugog ispisivanja pojave novi redovi, ali ne i da budu vidljive izmene pročitanih redova. Napisati C/SQL program insert. Ispitni. Rok koji unosi novi ispitni rok za mesec mart u 2016. godini. Postaviti istek vremena za zahtevanje katanaca na 5 sekundi. Napisati C/SQL program update. Ispitni. Rok koji za svaki ispitni rok u 2016. godini produžava period prijavljivanja za 3 dana. Postaviti istek vremena za zahtevanje katanaca na 5 sekundi.
Stabilni kursor (Cursor Stability) • Nijedan slog koji se trenutno obrađuje od strane procesa P ne sme se menjati od strane drugih procesa sve do završetka obrade od strane procesa P • Nijedan slog promenjen od strane drugog procesa ne može se čitati od strane procesa P dok se promene u okviru tog procesa na okončaju • Podrazumevan nivo izolovanosti u Db 2 SUBP • Problem fantomskih redova • Problem neponovljivih čitanja
Problem neponovljivih čitanja Aplikacija 1 SELECT * FROM TABELA WHERE KOL 1 = 2 Kol 1 Kol 2 . . . 2 15 . . . Aplikacija 2 UPDATE TABELA SET KOL 2 = 100 WHERE KOL 1 = 2; COMMIT WORK; Neponovljivo čitanje Aplikacija 1 SELECT * FROM TABELA WHERE KOL 1 = 2 Kol 1 Kol 2 . . . 2 100 . . .
Zadatak 6. 5 Napisati C/SQL program cursor. Stability koji dva puta ispisuje informacije o godini, oznaci, nazivu i periodu prijavljivanja za svaki ispitni rok u 2016. godini. Dozvoljeno je da se prilikom drugog ispisivanja pojave novi redovi, kao i da budu vidljive izmene pročitanih redova. Napisati C/SQL program insert. Ispitni. Rok koji unosi novi ispitni rok za mesec mart u 2016. godini. Postaviti istek vremena za zahtevanje katanaca na 5 sekundi. Napisati C/SQL program update. Ispitni. Rok koji za svaki ispitni rok u 2016. godini produžava period prijavljivanja za 3 dana. Postaviti istek vremena za zahtevanje katanaca na 5 sekundi.
Nepotvrđeno čitanje (Uncommitted Read) • Proces P može da pristupi nepotvrđenim izmenama od strane drugih procesa • Svi procesi mogu da pristupaju nepotvrđenim izmenama od strane procesa P osim ukoliko ti drugi procesi ne menjaju strukturu tabele ili je brišu • Problem fantomskih redova • Problem neponovljivih čitanja • Problem pristupa nepotvrđenim podacima
Problem pristupa nepotvrđenim podacima Aplikacija 1 SELECT * FROM TABELA WHERE KOL 1 = 2 Kol 1 Kol 2 . . . 2 15 . . . Aplikacija 1 Aplikacija 2 UPDATE TABELA SET KOL 2 = 100 WHERE KOL 1 = 2 Pristup nepotvrđenim podacima SELECT * FROM TABELA WHERE KOL 1 = 2 Kol 1 Kol 2 . . . 2 100 . . . Sve operacije se izvršavaju u transakcijama koje nisu potvrđene (za razliku od CS nivoa izolovanosti)
Zadatak za vežbu Napisati C/SQL programe koji u višekorisničkom okruženju simuliraju problem pristupa nepotvrđenim podacima.
Programersko zaključavanje tabela • Programeri mogu jedino zaključati tabele • Zaključavanje je moguće vršiti u dva režima • Deljeni • Ekskluzivni • LOCK TABLE <IME_TABELE> IN [SHARE|EXCLUSIVE] MODE
Deljeni režim zaključavanja tabela
Ekskluzivni režim zaključavanja tabela
Zadatak 6. 6 Napisati C/SQL program share. Mode koji ispisuje identifikator, oznaku, naziv, broj semestara i bodove za svaki smer u bazi podataka. Omogućiti da ostale aplikacije ne mogu da menjaju ove podatke tokom ispisivanja podataka. Napisati C/SQL program exclusive. Mode koji ispisuje identifikator, oznaku, naziv, broj semestara i bodove za svaki smer u bazi podataka. Omogućiti da ostale aplikacije ne mogu da menjaju ove podatke tokom ispisivanja podataka, kao ni da ih čitaju. Isprobati sve kombinacije redosleda izvršavanja programa exclusive. Mode i share. Mode i uveriti se da jedino kombinacija (share. Mode, share. Mode) može raditi konkurentno.
- Slides: 32