Upload
raven-dejesus
View
26
Download
2
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
1
Distribuirane i objektne baze podatakavežbe, školska 2009/10
Univerzitet u Beogradu, Matematički fakultet
Biljana Stojanović
2
Povezivanje sa više baza Dvofazni COMMIT
čas 05
novembar 2009, Matematički fakultet, Biljana Stojanović
3
Naredba CONNECT
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
4
Remote unit of work
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
5
CONNECT (tip 1) (omogućeno je implicitno povezivanje)
novembar 2009, Matematički fakultet, Biljana Stojanović
6
CONNECT (tip 1) (nije omogućeno implicitno povezivanje)
novembar 2009, Matematički fakultet, Biljana Stojanović
7
1. Implicitly connectable
novembar 2009, Matematički fakultet, Biljana Stojanović
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
8
2. Connectable and connected
novembar 2009, Matematički fakultet, Biljana Stojanović
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
9
3. Unconnectable and connected
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
10
4. Connectable and unconnected
novembar 2009, Matematički fakultet, Biljana Stojanović
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
11
Zaključak
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
12
Distributed unit of work
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
13
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).
14
CONNECT (tip 2) (pregled promena stanja)
novembar 2009, Matematički fakultet, Biljana Stojanović
15
Pravila za izvršavanje naredbe CONNECT
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
16
Promene stanja procesa
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
17
Tipovi stanja konekcije
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
18
Stanja held i release-pending
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
19
Stanja current i dormant
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
20
Opcije preprocesora koje se koriste sa naredbom CONNECT tipa 2
novembar 2009, Matematički fakultet, Biljana Stojanović
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
21
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).
22
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.
23
sqleqryc - Query client connection settings
novembar 2009, Matematički fakultet, Biljana Stojanović
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);
24
Parametri pri pozivu sqlecryc API-ja
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
25
sqleqryc
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
26
sqlesetc - Set client connection settings
novembar 2009, Matematički fakultet, Biljana Stojanović
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, struct sqlca * pSqlca);
pConnectionSettings – ulazni parametar. Pokazivač na strukturu sqle_conn_settings. Alocira se niz od NumSettings sqle_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.
27
sqlesetc
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
28
Struktura sql_conn_setting
novembar 2009, Matematički fakultet, Biljana Stojanović
Ova struktura se koristi za specifikaciju tipova i vrednosti parametara podešavanja konekcije za sqleqryc i sqlesetc API-je.
Polja u strukturi: type SMALLINT tip parametra podešavanja value SMALLINT vrednost parametra
podešavanja
29
Dozvoljene vrednosti za polja type i value:
novembar 2009, Matematički fakultet, Biljana Stojanović
Type Value Opis
SQL_CONNECT_TYPE SQL_CONNECT_1SQL_CONNECT_2
CONNECT tipa 1 daje mogućnost rada sa jednom bazom u okviru jedne transakcije (RUOW).CONNETCT tipa 2 podržava rad sa više baza u okviru jedne transakcije (DUOW).
SQL_RULES SQL_RULES_DB2SQL_RULES_STD
Omogućuje se da se naredbom CONNECT tekuća konekcija može prebaciti u stanje dormant....
SQL_DISCONNECT SQL_DISCONNECT_EXPLSQL_DISCONNECT_CONDSQL_DISCONNECT_AUTO
SQL_SYNCPOINT SQL_SYNC_TWOPHASESQL_SYNC_ONEPHASESQL_SYNC_NONE
SQL_DEFERRED_PREPARE SQL_DEFERRED_PREPARE_NOSQL_DEFERRED_PREPARE_YESSQL_DEFERRED_PREPARE_ALL
SQL_CONNECT_NODE Između 0 i 999 ili ključna reč SQL_CONN_CATALOG_NODE
Čvor sa kojim se uspostavlja konekcija. Vrednost environment-promenljive DB2NODE se postavlja na datu vrednost.
SQL_ATTACH_NODE Između 0 i 999 Čvor sa kojim se vrši povezivanje. Vrednost environment-promenljive DB2NODE se postavlja na datu vrednost.
30
Ažuriranje jedne baze podataka u okviru transakcije koja obuhvata rad sa više baza
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
31
Ažuriranje više baza podataka u okviru jedne transakcije
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
32
Upravljač transakcijama (TM)
novembar 2009, Matematički fakultet, Biljana Stojanović
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.
33
Dvofazni COMMIT
novembar 2009, Matematički fakultet, Biljana Stojanović
34
novembar 2009, Matematički fakultet, Biljana Stojanović
0 - aplikacija je pripremljena za dvofazni commit. To se može postići preko opcija preprocesora.
1 - klijent želi da se poveže sa bazom SAVINGS_DB. Prvo se interno povezuje sa bazom upravljača transakcija. Baza upravljača transakcija vraća potvrdu klijentu.Ako je konfiguracioni parameter SUBP-a tm_database postavljen na 1ST_CONN, SAVINGS_DB postaje baza upravljača transakcijama dok traje proces aplikacije.
2 - uspostavlja se konekcija sa bazom SAVINGS_DB i dobija se potvrda.
3 - update tabele SAVINGS_ACCOUT, čime počinje transakcija. Baza upravljača transakcijama odgovara klijentu prosleđujući ID za datu transakciju.
Napomena: registracija transakcije se vrši kada se pokrene prva SQL naredba u transakciji, ne za vreme uspostavljanja konekcije.
35
novembar 2009, Matematički fakultet, Biljana Stojanović
5 - izvršavanje SQL naredbi nad bazom SAVINGS_DB. 6 - registracija ID-a transakcije nad bazom FEE_DB koja
sadrži tabelu TRANSACTION_FEE, kada se vrši prvi pristup bazi u okviru transakcije.
7 - izvršavanje SQL naredbi nad bazom FEE_DB 8 - mogu se dodatne SQL naredbe izvršiti nad bazom
SAVINGS_DB aktiviranjem konekcije. Kako je transakcija već registrovana u koraku 4, nema potrebe vršiti registraciju ponovo.
9 - povezivanje i rad sa bazom CHECKING_DB vrši se na isti način kao u koracima 6 i 7.
10 - kada klijent zahteva commit transakcije, prepare poruka se šalje svim bazama koje učestvuju u transakciji. Svaka baza upisuje "PREPARED" slog u svoj log fajl i šalje odgovor klijentu.
36
novembar 2009, Matematički fakultet, Biljana Stojanović
11 - nakon što klijent primi pozitivne odgovore od svih baza, on šalje poruku bazi upravljača transakcijama, infomrišući je da je transakcija spremna za commit (PREPARED). Baza upravljača transakcijama upisuje "PREPARED" slog u svoj log fajl i šalje odgovor klijentu da druga faza commit operacije može da počne.
12 - tokom druge faze commit-a, klijent šalje poruku svim bazama da treba da izvrše commit. Svaka baza upisuje "COMMITTED" slog u svoj log fajl i oslobađa ključeve koji su bili postavaljeni tokom transakcije. Kada baza završi potvrđivanje promena, šalje odgovor klijentu.
13 - nakon što klijent dobije pozitivan odgovor od svih baza, on šalje poruku bazi upravljača transakcijama, informišući je da je transakcija završena. Baza upravljača transakcijama upisuje "COMMITTED" slog u svoj log fajl, čime se naglašava da je transakcija završena i obaveštava klijenta o završetku.
37
Korišćena literatura
novembar 2009, Matematički fakultet, Biljana Stojanović
DB2 9.7 documentation: Database Administration Concepts and
Configuration Reference (pdf) Administrative API Reference (pdf) SQL Reference Vol.2 (pdf)