380 likes | 492 Views
Distribuirane i objektne baze podataka vežbe, školska 2009/10. Univerzitet u Beogradu, Matematički fakultet Biljana Stojanović. Povezivanje sa više baza Dvofazni COMMIT. čas 05. Naredba CONNECT.
E N D
Distribuirane i objektne baze podatakavežbe, školska 2009/10 Univerzitet u Beogradu, Matematički fakultet Biljana Stojanović
Povezivanje sa više baza Dvofazni COMMIT čas 05 novembar 2009, Matematički fakultet, Biljana Stojanović
Naredba CONNECT • Za uspostavljanje konekcije između procesa aplikacije i baze koriste se dva tipa naredbe CONNECT: • CONNECT (tip 1) – povezivanje sa jednom bazom u okviru jedne transakcije (Remote Unit Of Work - RUOW) • CONNECT (tip 2) – povezivanje sa više baza u okviru jedne transakcije (Application-Directed Distributed Unit Of Work - DUOW) • Ugrađeni SQL podržava konkurentne transakcije, što omogućava višestruke konekcije, pri čemu je svaka od njih nezavisna transakcija. • Jedna aplikacija može imati više konkurentnih konekcija sa istom bazom. novembar 2009, Matematički fakultet, Biljana Stojanović
Remote unit of work • Primer: • Proces aplikacije na računarskom sistemu A može da se poveže sa bazom na istom ili nekom drugom sistemu B. • U okviru jedne ili više transakcija vrši se proizvoljan broj SQL naredbi nad objektima baze. • Nakon završetka transakcije, proces može da se poveže sa bazom na istom ili nekom drugom sistemu C itd. • Restrikcije u odnosu na SQL naredbe: • svi objekti referisani u jednoj SQL naredbi moraju biti pod upravom jednom servera aplikacije. • sve SQL naredbe u okviru transakcije moraju biti izvršene od strane jednog servera aplikacije. novembar 2009, Matematički fakultet, Biljana Stojanović
CONNECT (tip 1) (omogućeno je implicitno povezivanje) novembar 2009, Matematički fakultet, Biljana Stojanović
CONNECT (tip 1) (nije omogućeno implicitno povezivanje) novembar 2009, Matematički fakultet, Biljana Stojanović
1. Implicitly connectable • Ako je omogućeno implicitno povezivanje, ovo je inicijalno stanje procesa aplikacije. • Prelazak u ovo stanje prouzrokuju: • CONNECT RESET naredba • COMMIT ili ROLLBACK u stanju unconnectable and connected praćeni naredbom CONNECT RESET u stanju connectable and connected novembar 2009, Matematički fakultet, Biljana Stojanović
2. Connectable and connected • Proces je povezan sa serverom (connected) i CONNECT naredbe mogu biti izvršene u nastavku (connectable). • Ako je omogućen implicitni CONNECT, u ovo stanje se dolazi: • iz stanja connectable and unconnected nakon CONNECT TO ili CONNECT • iz stanja implicitly connectable nakon bilo koje naredbe različite od: CONNECT RESET, DISCONNECT, SET CONNECTION ili RELEASE. • Bilo da je omogućeno implicitno povezivanje ili ne, u ovo stanje se prelazi: • iz stanja connectable and unconnected nakon CONNECT TO • nakon COMMIT ili ROLLBACK ili nakon prinudnog ROLLBACK-a u stanju connected and unconnectable novembar 2009, Matematički fakultet, Biljana Stojanović
3. Unconnectable and connected • Proces je povezan sa bazom, ali se ne može uspešno izvršiti naredba CONNECT kako bi se izvršilo povezivanje sa drugom bazom. • Proces dolazi u ovo stanje iz stanja connectable and connected ako se izvrši bilo koja naredba različita od: CONNECT TO, CONNECT, CONNECT RESET, DISCONNECT, SET CONNECTION, RELEASE, COMMIT ili ROLLBACK. novembar 2009, Matematički fakultet, Biljana Stojanović
4. Connectable and unconnected • Proces nije povezan sa bazom. • Jedina SQL naredba koja može da se izvrši je CONNECT TO, u suprotnom se generiše greška. • Bilo da je omogućeno implicitno povezivanje ili ne, u ovo stanje proces dolazi ako se pojavi greška kada se izvrši naredba CONNECT TO ili se pojavi greška tokom transakcije, što dovodi do raskida konekcije i poništenja transakcije. • Ako nije omogućeno implicitno povezivanje: • proces je inicijalno u ovom stanju • CONNECT RESET i DISCONNECT dovode do prelaska u ovo stanje novembar 2009, Matematički fakultet, Biljana Stojanović
Zaključak • Izvršavanje uzastopnih CONNECT naredbi ne predstavlja grešku, jer naredba CONNECT ne uklanja proces iz stanja connectable. • Greška je, međutim, izvršavanje više uzastopnih CONNECT RESET naredbi. • Takođe, CONNECT RESET (kojoj prethodi COMMIT ili ROLLBACK), COMMIT ili ROLLBACK treba da se izvršavaju pre CONNECT TO naredbe. • Svaka transakcija može da uspostavi konekciju samo sa jednom bazom. Tekuća transakcija mora biti potvrđena ili poništena pre nego što se dopusti povezivanje sa drugom bazom. novembar 2009, Matematički fakultet, Biljana Stojanović
Distributed unit of work • Primer: • Proces aplikacije na računarskom sistemu A može da se poveže sa bazom na istom ili nekom drugom sistemu B naredbama CONNECT ili SET CONNECTION. • Proces može da izvrši proizvoljan broj SQL naredbi nad objektima baze pre kraja transakcije. • Svim objektima koji se referišu u jednoj SQL naredbi mora da upravlja isti server. • Bilo koji broj servera aplikacije može da učestvuje u transakciji. • COMMIT ili ROLLBACK završavaju transakciju. novembar 2009, Matematički fakultet, Biljana Stojanović
Ovakve transakcije koriste CONNECT tipa 2. • Procesi koji koriste konekcije tipa 2: • su uvek connectable • ili su u stanju connected ili u stanju unconnected • imaju nula ili više konekcija • Svaka konekcija je jednoznačno identifikovana. • Proces je inicijalno u stanju unconnected i nema ni jednu konekciju. • Konekcija je inicijalno u current and held stanju (videti narednu stranu). novembar 2009, Matematički fakultet, Biljana Stojanović
CONNECT (tip 2) (pregled promena stanja) novembar 2009, Matematički fakultet, Biljana Stojanović
Pravila za izvršavanje naredbe CONNECT • Kontekst ne može da obuhvata više od jedne konekcije sa istom bazom u isto vreme. • Kada proces izvrši SET CONNECTION naredbu, navedeno ime lokacije mora da se odnosi na postojeću konekciju za dati proces. • Kada proces izvrši CONNECT naredbu i opcija SQLRULES(STD) je uključena, navedeno ime ne sme biti neka od postojećih konekcija za taj proces. novembar 2009, Matematički fakultet, Biljana Stojanović
Promene stanja procesa • Ako proces ima konekciju u stanju current, nalazi se u stanju connected. • Iz unconnected stanja proces prelazi u connected stanje naredbom CONNECT ili SET CONNECTION. • Ako nema konekcije, ali je SQL naredba izvršena, kreira se implicitna konekcija (environment promenljiva DB2DBDFT sadrži ime podrazumevane baze). • Ako proces nema konekciju u stanju current, nalazi se u stanju unconnected. • Iz stanja connected prelazi se u stanje unconnected kada se tekuća konekcija sa namerom raskine ili ako se neka SQL naredba ne izvrši uspešno, čime se operacija poništava i konekcija se raskida. novembar 2009, Matematički fakultet, Biljana Stojanović
Tipovi stanja konekcije • held and release-pending • current and dormant • Ako proces izvrši naredbu CONNECT, a ime baze nije u skupu postojećih konekcija: • tekuća konekcija prelazi u stanje dormant, ime baze se dodaje skupu konekcija, dok nova konekcija prelazi u stanje current i u stanje held. • Ako je ime baze već u skupu postojećih konekcija i opcija preprocesora SQLRULES(STD) je uključena, generiše se greška. novembar 2009, Matematički fakultet, Biljana Stojanović
Stanja held i release-pending • Release-pending znači da će se u narednoj uspešno potvrđenoj operaciji javiti DISCONNECT (rollback nema uticaja na konekciju). • Held znači da se u narednoj uspešno potvrđenoj operaciji neće javiti DISCONNECT. • Sve konekcije su inicijalno u held stanju. • Naredbom RELEASE prelazi se u stanje release-pending. • Iz stanja release-pending ne može se vratiti u stanje held. • Konekcija ostaje u release-pending stanju tokom transakcije ako se izvrši ROLLBACK ili ako se usled neuspešne COMMIT operacije, zapravo izvrši ROLLBACK. novembar 2009, Matematički fakultet, Biljana Stojanović
Stanja current i dormant • Konekcija koja je u held ili release-pending stanju može biti i u stanju current ili dormant. • Current konekcija je konekcija koja se koristi za izvršenje SQL naredbi dok je u ovom stanju. • Konekcija u dormant stanju nije tekuća (current). • Za dormant konekcije dozvoljene su naredbe: COMMIT, ROLLBACK, DISCONNECT ili RELEASE. • SET CONNECTION ili CONNECT – konekcija sa navedenom bazom prelazi u stanje current, ostale konekcije prelaze ili ostaju u stanju dormant. • U svakom trenutku, samo jedna konekcija može biti tekuća. novembar 2009, Matematički fakultet, Biljana Stojanović
Opcije preprocesora koje se koriste sa naredbom CONNECT tipa 2 • Podrazumevane vrednosti opcija su podvučene. • CONNECT (1| 2) • SQLRULES(DB2 | STD) • DB2 – connect tipa 2 se vrši po DB2 pravilima koja omogućavaju prelazak konekcije u stanje dormant • STD – connect tipa 2 se vrši po pravilima SQL92 Standarda koji ne dopušta prelazak konekcije u stanje dormant • DISCONNECT (EXPLICIT| CONDITIONAL | AUTOMATIC) • EXPLICIT – raskidaju se one konekcije koje su eksplicitno obeležene za oslobađanje komandom SQL RELEASE • CONDITIONAL – raskidaju se one konekcije koje nemaju otvorene WITH HOLD kursore i one koje su selektovane za oslobađanje • AUTOMATIC – raskidaju se sve konekcije novembar 2009, Matematički fakultet, Biljana Stojanović
SYNCPOINT (ONEPHASE| TWOPHASE | NONE) • Specifikuje kako se vrši koordinacija COMMIT ili ROLLBACK naredbi kada postoje višestruke konekcije. • Samo se jedna baza u okviru transakcije može ažurirati, sve ostale mogu samo da se čitaju (ONEPHASE). Bilo koji pokušaj menjanja neke druge baze generiše grešku. • Upravljač transakcijama (TM) u vreme izvršavanja vrši koordinaciju dvofaznih COMMIT naredbi između onih baza koje podržavaju ovaj protokol (TWOPHASE). • Ne koristiti TM za izvršenje dvofaznih COMMIT naredbi i ne primenjivati ažuriranje jedne, a čitanje više baza (single updater, multiple reader) (NONE). novembar 2009, Matematički fakultet, Biljana Stojanović
Pojedinačne COMMIT (ROLLBACK) naredbe se prosleđuju svim bazama. • Ako jedna ili više ROLLBACK naredbi ne uspe, generiše se greška, slično za COMMIT. • Da bi se u vreme izvršavanja postavile neke druge vrednosti parametara, koristi se komanda SET CLIENT ili sqlesetc API. • Komanda QUERY CLIENT (ili sqleqryc API) vraća tekuće vrednosti opcija preprocesora. novembar 2009, Matematički fakultet, Biljana Stojanović
sqleqryc - Query client connection settings • Vraća parametre podešavanja tekuće konekcije procesa aplikacije. • Struktura sqle_conn_setting sadrži tipove i vrednosti parametara podešavanja konekcije. • Neophodno je uključiti API zaglavlje sqlenv.h • sqleqryc (struct sqle_conn_setting * pConnectionSettings, unsigned short NumSettings, struct sqlca * pSqlca); novembar 2009, Matematički fakultet, Biljana Stojanović
Parametri pri pozivu sqlecryc API-ja • pConnectionSettings – ulazno/izlazni parameter. Pokazivač na sqle_conn_setting strukturu, koja specifikuje tipove i vrednosti parametara podešavanja koja se odnose na konekciju. Korisnik definiše niz od numSettings elemenata tipa sqle_conn_settings. Polje type se postavlja na jednu od 5 mogućih opcija za podešavanje parametara konekcije. Nakon poziva API-ja, polje value svakog elementa sadrži tekuće podešavanje navedene opcije. • numSettings – ulazni parametar. Bilo koji ceo broj (od 0 do 7) koji predstavlja broj vrednosti opcija konekcije koje se vraćaju. • pSqlca – izlazni parametar. Pokazivač na sqlca strukturu. novembar 2009, Matematički fakultet, Biljana Stojanović
sqleqryc • U bilo kom trenutku izvršavanja procesa aplikacije može se zatražiti informacija o tekućim parametrima podešavanjima konekcije. • Ukoliko QUERY CLIENT prođe uspešno, polja u sqle_conn_setting strukturi će sadržati tekuće parametre podešavanja konekcije. • Ako do tada nije pozivana naredba SET CLIENT, ova struktura će sadržati podešavanja iz faze preprocesiranja, samo ako je već procesirana bar jedna SQL naredba; inače, sadržaće podrazumevane vrednosti opcija preprocesora. novembar 2009, Matematički fakultet, Biljana Stojanović
sqlesetc - Set client connection settings • Postavljaju se parametri podešavanja konekcije, koristeći strukturu sqle_conn_setting. • Neophodno je uključiti zaglavlje sqlenv.h • sqlesetc ( struct sqle_conn_setting * pConnectionSettings, unsigned short NumSettings, structsqlca * pSqlca); • pConnectionSettings – ulazni parametar. Pokazivač na strukturu sqle_conn_settings. Alocira se niz od NumSettingssqle_conn_setting struktura. Polje type svake strukture se postavlja na odgovarajuću opciju konekcije. Polje value se postavlja na željenu vrednost te opcije. • NumSetting – ceo broj (od 0 do 7) koji predstavlja broj opcija konekcije koje treba da se postave na odgovarajuće vrednosti • pSqlca – izlazni parametar. Pokazivač na strukturu sqlca. novembar 2009, Matematički fakultet, Biljana Stojanović
sqlesetc • Ako se ovaj API uspešno izvrši, konekcije u transakcijama koje budu sledile koristiće parametre konekcije koji su njime specifikovani, u suprotnom, parametri konekcije ostaju nepromenjeni. • Parametri konekcije za neku aplikaciju se mogu promeniti samo ako nema postojećih konekcija (npr. pre nego što se uspostavi bilo koja konekcija, ili posle naredbi RELEASE ALL ili COMMIT). • Jednom kada se SET CLIENT uspešno izvrši, podešavanja konekcije postaju fiksna i mogu se promeniti jedino ponovnim pozivom SET CLIENT API-ja. • Sve opcije preprocesora koje se odnose na aplikaciju će biti poništene. novembar 2009, Matematički fakultet, Biljana Stojanović
Struktura sql_conn_setting • Ova struktura se koristi za specifikaciju tipova i vrednosti parametara podešavanja konekcije za sqleqryci sqlesetcAPI-je. • Polja u strukturi: • type SMALLINT tip parametra podešavanja • value SMALLINT vrednost parametra podešavanja novembar 2009, Matematički fakultet, Biljana Stojanović
Dozvoljene vrednosti za polja type i value: novembar 2009, Matematički fakultet, Biljana Stojanović
Ažuriranje jedne baze podataka u okviru transakcije koja obuhvata rad sa više baza • U situacijama kada se radi sa više baza, može se javiti potreba da se za vreme dok se jedna ili više baza čitaju, neka druga baza menja. Ovakav vid pristupa bazama može da se realizuje u okviru jedne transakcije. • U ovom slučaju se za povezivanje sa bazom koriste naredba CONNECT tipa 2 i jednofazni COMMIT. novembar 2009, Matematički fakultet, Biljana Stojanović
Ažuriranje više baza podataka u okviru jedne transakcije • Kada se u okviru iste transakcije čita i menja više baza, takav vid pristupa bazi se zove multisite update. • Ako se koristi DB2 upravljač transakcijama: • za povezivanje sa bazom koristi se CONNECT tipa 2 i dvofazni COMMIT. Eventualno treba konfigurisati DB2 upravljač transakcijama. novembar 2009, Matematički fakultet, Biljana Stojanović
Upravljač transakcijama (TM) • Upravljač transakcijama dodeljuje identifikatore transakcijama, kontroliše njihov rad i preuzima odgovornost za uspešan završetak rada transakcija ili pojavu problema. Upravljač transakcijama čuva informacije o transakcijama u posebnoj bazi (baza upravljača transakcijama). • SUBP obezbeđuje funkcionalnost upravljača transakcijama koja može da obezbedi koordinaciju promena na više baza unutar jedne transakcije. • Klijentska aplikacija koristi bazu upravljača transakcijama za registrovanje svake transakcije i praćenje njihovog izvršavanja. novembar 2009, Matematički fakultet, Biljana Stojanović
Dvofazni COMMIT novembar 2009, Matematički fakultet, Biljana Stojanović
0 - aplikacija je pripremljenazadvofazni commit. To se možepostićiprekoopcijapreprocesora. • 1 - klijentželida se povežesabazom SAVINGS_DB. Prvo se internopovezujesabazomupravljačatransakcija. Bazaupravljačatransakcijavraćapotvrduklijentu. Ako je konfiguracioni parameter SUBP-a tm_databasepostavljenna1ST_CONN, SAVINGS_DB postajebazaupravljačatransakcijamadoktrajeprocesaplikacije. • 2 - uspostavlja se konekcijasabazom SAVINGS_DB idobija se potvrda. • 3 - updatetabele SAVINGS_ACCOUT, čimepočinjetransakcija. Bazaupravljačatransakcijamaodgovaraklijentuprosleđujući ID zadatutransakciju. • Napomena: registracijatransakcije se vršikada se pokreneprva SQL naredba u transakciji, ne zavremeuspostavljanjakonekcije. novembar 2009, Matematički fakultet, Biljana Stojanović
5 - izvršavanje SQL naredbinadbazom SAVINGS_DB. • 6 - registracija ID-a transakcijenadbazom FEE_DB kojasadržitabelu TRANSACTION_FEE, kada se vršiprvipristupbazi u okvirutransakcije. • 7 - izvršavanje SQL naredbinadbazom FEE_DB • 8 - mogu se dodatne SQL naredbeizvršitinadbazom SAVINGS_DB aktiviranjemkonekcije. Kako je transakcijavećregistrovana u koraku 4, nemapotrebevršitiregistracijuponovo. • 9 - povezivanjeiradsabazom CHECKING_DB vrši se naistinačinkao u koracima 6 i 7. • 10 - kadaklijentzahteva commit transakcije, prepareporuka se šaljesvimbazamakojeučestvuju u transakciji. Svakabazaupisuje "PREPARED" slog u svoj log fajlišaljeodgovorklijentu. novembar 2009, Matematički fakultet, Biljana Stojanović
11 - nakonštoklijentprimipozitivneodgovoreodsvihbaza, on šaljeporukubaziupravljačatransakcijama, infomrišući je da je transakcijaspremnaza commit (PREPARED). Bazaupravljačatransakcijamaupisuje "PREPARED" slog u svoj log fajlišaljeodgovorklijentudadrugafaza commit operacijemožedapočne. • 12 - tokomdruge faze commit-a, klijentšaljeporukusvimbazamadatrebadaizvrše commit. Svakabazaupisuje "COMMITTED" slog u svoj log fajlioslobađaključevekojisubilipostavaljenitokomtransakcije. Kadabazazavršipotvrđivanjepromena, šaljeodgovorklijentu. • 13 - nakonštoklijentdobijepozitivanodgovorodsvihbaza, on šaljeporukubaziupravljačatransakcijama, informišući je daje transakcijazavršena. Bazaupravljačatransakcijamaupisuje "COMMITTED" slog u svoj log fajl, čime se naglašavada je transakcijazavršenaiobaveštavaklijenta o završetku. novembar 2009, Matematički fakultet, Biljana Stojanović
Korišćena literatura • DB2 9.7 documentation: • Database Administration Concepts and Configuration Reference (pdf) • Administrative API Reference (pdf) • SQL Reference Vol.2 (pdf) novembar 2009, Matematički fakultet, Biljana Stojanović