12.07.2015 Views

Distribuirane i objektne baze podataka - Ncd.matf.bg.ac.rs

Distribuirane i objektne baze podataka - Ncd.matf.bg.ac.rs

Distribuirane i objektne baze podataka - Ncd.matf.bg.ac.rs

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>vežbe, školska 2010/11Univerzitet u Beogradu, Matematički fakultetBiljana Stojanović


Trigeri.Povezivanje sa više baza.Dvofazni COMMITčas 03


TrigeriTriger (okidač, engl. trigger) je mehanizam kojim se za određenu oper<strong>ac</strong>ijumodifikovanja <strong>podataka</strong> (insert, update ili delete), nad određenom tabelom,definiše skup akcija (SQL iskaza) koji se „aktivira“, odnosno izvrši svaki putkad se izvrši oper<strong>ac</strong>ija.Oper<strong>ac</strong>ija modifikovanja se često naziva triger oper<strong>ac</strong>ija, a skup akcijatriger procedura.Triger se može koristiti da bi se ojačala pravila koja se odnose na integritet<strong>podataka</strong>, za proveru validnosti ulaznih <strong>podataka</strong>, za čitanje iz drugih tabelaili upis u druge tabele i slično.Upotrebom trigera se omogućuje:globalno nametanje ograničenja (uslova integriteta) – ako se promeni neki uslov,potrebno je promeniti samo triger, a ne svaki aplikativni programbrži razvoj aplik<strong>ac</strong>ija (pošto je triger sačuvan u bazi, nema potrebe da se u svakojaplik<strong>ac</strong>iji posebno kodiraju akcije koje triger izvršava, tj. one se definišu samojednom, prilikom definicije trigera)lakše održavanje aplik<strong>ac</strong>ija i <strong>podataka</strong> (jednom kad je triger definisan, automatskise poziva kada se pristupi tabeli nad kojom je definisan).3<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Kreiranje trigeraTrigeri se kreiraju naredbom CREATE TRIGGER.Triger se definiše nad tačno jednom ciljnom tabelom i za tačno jednu trigeroper<strong>ac</strong>iju.Granularnost trigera označava da li se triger procedura aktivira jednom za celunaredbu ili jednom za svaki od redova.BEFORE trigeriTriger procedura se aktivira za svaki red iz skupa redova na koje triger oper<strong>ac</strong>ijautiče i to pre izvršavanja triger oper<strong>ac</strong>ije. Dakle, ciljna tabela će biti modifikovananakon što triger završi aktiviranje triger procedure za svaki red.Za aktiviranje triger procedure nad svakim redom koristi se klauzula FOR EACHROW.AFTER trigeriTriger procedura se aktivira za svaki red iz skupa redova na koje triger oper<strong>ac</strong>ijautiče (FOR EACH ROW) ili za naredbu (FOR EACH STATEMENT). Aktiviranjeprocedure se vrši nakon izvršavanja triger oper<strong>ac</strong>ije i nakon što SUBP proveri svaograničenja (constraints) na koje je oper<strong>ac</strong>ija mogla da utiče, uključujući i akcije kojese odnose na ograničenja referencijalnog integriteta.5<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Ako se nad nekom tabelom definišu i BEFORE i AFTER trigeri, najpre seaktiviraju svi BEFORE trigeri, po redu kako su definisani.Izlaz prvog BEFORE trigera je ulaz sledećeg itd.Kada svi aktivirani BEFORE trigeri izvrše svoje triger procedure za datidogađaj, rezultat modifik<strong>ac</strong>ije redova se upisuje u tabelu.Nakon toga se aktiviraju AFTER trigeri, koji mogu da modifikuju istu ili nekedruge tabele, ili da pokrenu neku akciju van same <strong>baze</strong>.6<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


BEFORE trigeri BEFORE trigeri predstavljaju proširenje podsistemaograničenja (constraints) SUBP-a. U opštem slučaju, koriste se za:valid<strong>ac</strong>iju ulaznih <strong>podataka</strong>automatsko generisanje vrednosti za nove unešene redovečitanje drugih tabela radi uspostavljanja međusobnih veza BEFORE trigeri se ne koriste za dalje modifik<strong>ac</strong>ije tabela ubazi, jer se aktiviraju pre nego što se triger oper<strong>ac</strong>ija(događaj) primeni nad baznom tabelom. Dakle, oni seaktiviraju pre nego što se izvrši provera uslova iograničenja koji se odnose na integritet.7<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


AFTER trigeri Napomena! Aktiviraju se nakon valid<strong>ac</strong>ije integriteta<strong>baze</strong>. Stoga, mogu se koristiti za izvođenje oper<strong>ac</strong>ija kojebilo koja aplik<strong>ac</strong>ija može da izvrši. Na primer: aktiviranje nakon modifik<strong>ac</strong>ije <strong>baze</strong> izvršavanje akcija van <strong>baze</strong>, npr. za podršku alarmiranja Napomena! Ako se izvrši ROLLBACK trigera, to nećeuticati na izvršenu akciju van <strong>baze</strong>, tj. ona neće bitiponištena.8<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Izvršni model BEFORE i AFTER trigera9<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Svaki triger ima tačno jednu triger oper<strong>ac</strong>iju, koja ima dvekomponente: opcioni uslov triger oper<strong>ac</strong>ije - klauzula WHEN niz SQL iskaza (triger procedura)Ako se izostavi klauzula WHEN, triger procedura se uvek izvršava.Ako se koristi FOR EACH ROW, uslov u klauzuli WHEN seproverava jednom za svaki red, a ako se koristi FOR EACHSTATEMENT, jednom za naredbu.U većini slučajeva, ako bilo koja naredba u okviru jednog SQL iskazatriger procedure vrati negativan SQLCODE, sam iskaz, uključujući isve ostale iskaze iz triger procedure se poništava (ROLLBACK).Iz tog razloga, ako triger procedura obuhvata više od jednog SQLiskaza, ili obuhvata poziv funkcije, neophodno je „zagraditi“ ihBEGIN ATOMIC – END konstrukcijom, koja ukazuje da se ili sviiskazi moraju izvršiti uspešno ili se nijedan neće izvršiti.10<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


PrimerRealizovati sledeći zahtev upotrebom trigera: pri promeni datuma početkaprijave za ispitni rok novi datum mora da prethodi starom datumu, a pripromeni datuma završetka prijave, novi datum mora da sledi stari datum.U suprotnom se promena ne izvršava i izdaje se poruka o grešci.CREATE TRIGGER N_DATUMNO CASCADEBEFORE UPDATE OF POCETAK_PRIJ, KRAJ_PRIJON ISPITNI_ROKREFERENCING NEW AS NIROK OLD AS OIROKFOR EACH ROWWHEN (DAYS(NIROK.POCETAK_PRIJ) >DAYS(OIROK.POCETAK_PRIJ)OR DAYS(NIROK.KRAJ_PRIJ) < DAYS(OIROK.KRAJ_PRIJ)SIGNAL SQLSTATE ’85000’ (’Novi datumi pocetka i krajaispitnog roka nisu validni’)11<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


ObjašnjenjeTriger oper<strong>ac</strong>ija je oper<strong>ac</strong>ija ažuriranja – UPDATEBEFORE – triger se aktivira pre izvršavanja triger oper<strong>ac</strong>ijeNO CASCADE – triger procedura ne proizvodi aktiviranje drugih trigeraFOR EACH ROW - triger se aktivira za svaki pokušaj ažuriranja pojedinačnog reda tabeleKod greške je string-konstanta ’85000’, koja se bira prema utvrđenim sintaksnim pravilimaKlauzulom REFERENCING može da se referiše na kolone reda koje treba da budupromenjene triger oper<strong>ac</strong>ijom, odnosno na kolone reda koje se koriste za promenuupotrebom:OLD AS ime – zadaje se ime kojim se referiše na originalno stanje reda tabele, dakle, pre nego štose trigger oper<strong>ac</strong>ija primeniNEW AS ime – zadaje se ime kojim se referiše na vrednosti koje se koriste za ažuriranje redatabele kada se primeni trigger oper<strong>ac</strong>ijaAko je triger oper<strong>ac</strong>ija UPDATE mogu da se koriste i OLD AS i NEW AS.U slučaju INSERT oper<strong>ac</strong>ije, može samo NEW AS, zato što pre aktiviranja INSERT oper<strong>ac</strong>ijered koji treba da se umetne ne postoji u tabeli, pa samim tim ne postoji ni originalno(prethodno) stanje reda kojim se definišu originalne vrednosti pre primene triger oper<strong>ac</strong>ije.U slučaju DELETE oper<strong>ac</strong>ije, može samo OLD AS, zato što nema spicificiranih novih vrednostiu delete oper<strong>ac</strong>iji.12<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Naredba CONNECT Za uspostavljanje konekcije između procesa aplik<strong>ac</strong>ije i<strong>baze</strong> koriste se dva tipa naredbe CONNECT: CONNECT (tip 1) – povezivanje sa jednom bazom u okvirujedne transakcije (Remote Unit Of Work - RUOW) CONNECT (tip 2) – povezivanje sa više baza u okviru jednetransakcije (Application-Directed Distributed Unit Of Work -DUOW)13<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Remote unit of work Primer: Proces aplik<strong>ac</strong>ije na računa<strong>rs</strong>kom sistemu A može da sepoveže sa bazom na istom ili nekom drugom sistemu B. U okviru jedne ili više transakcija vrši se proizvoljan brojSQL naredbi nad objektima <strong>baze</strong>. Nakon završetka transakcije, proces može da se povežesa bazom na istom ili nekom drugom sistemu C itd. Restrikcije u odnosu na SQL naredbe: svi objekti referisani u jednoj SQL naredbi moraju biti podupravom jednog servera aplik<strong>ac</strong>ije sve SQL naredbe u okviru transakcije moraju biti izvršene odstrane jednog servera aplik<strong>ac</strong>ije.14<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


CONNECT (tip 1)(omogućeno je implicitno povezivanje)15<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


CONNECT (tip 1)(nije omogućeno implicitno povezivanje)16<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Opis stanja Implicitly connectable – omogućen je implicitniCONNECT. Conncectable and connected - proces je povezan saserverom (connected) i CONNECT naredbe mogu bitiizvršene u nastavku (connectable). Unconnectable and connected - proces je povezan sabazom, ali se ne može uspešno izvršiti naredbaCONNECT kako bi se izvršilo povezivanje sa drugombazom. Connectable and unconnected - proces nije povezan sabazom. Jedina SQL naredba koja može da se izvrši jeCONNECT TO, u suprotnom se generiše greška.17<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Zaključak Izvršavanje uzastopnih CONNECT naredbi ne predstavljagrešku, jer naredba CONNECT ne uklanja proces iz stanj<strong>ac</strong>onnectable. Greška je, međutim, izvršavanje više uzastopnih CONNECTRESET naredbi. Takođe, CONNECT RESET (kojoj prethodi COMMIT iliROLLBACK), COMMIT ili ROLLBACK treba da se izvršavajupre CONNECT TO naredbe. Svaka transakcija može da uspostavi konekciju samo sa jednombazom. Tekuća transakcija mora biti potvrđena ili poništena prenego što se dopusti povezivanje sa drugom bazom.18<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Distributed unit of work Primer: Proces aplik<strong>ac</strong>ije na računa<strong>rs</strong>kom sistemu A može da sepoveže sa bazom na istom ili nekom drugom sistemu Bnaredbama CONNECT ili SET CONNECTION. Proces može da izvrši proizvoljan broj SQL naredbi nadobjektima <strong>baze</strong> pre kraja transakcije. Svim objektima koji se referišu u jednoj SQL naredbimora da upravlja isti server. Bilo koji broj servera aplik<strong>ac</strong>ije može da učestvuje utransakciji. COMMIT ili ROLLBACK završavaju transakciju.19<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


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 jednukonekciju. Konekcija je inicijalno u current and held stanju (videtinarednu stranu).20<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


CONNECT (tip 2)(pregled promena stanja)21<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Pravila za izvršavanje naredbe CONNECT Kontekst ne može da obuhvata više od jedne konekcije saistom bazom u isto vreme. Kada proces izvrši SET CONNECTION naredbu,navedeno ime mora da se odnosi na postojeću konekcijuza dati proces. Kada proces izvrši CONNECT naredbu i opcijaSQLRULES(STD) je uključena, navedeno ime ne sme bitineka od postojećih konekcija za taj proces.22<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Promene stanja procesa Ako proces ima konekciju u stanju current, nalazi se u stanjuconnected. Iz unconnected stanja proces prelazi u connected stanjenaredbom CONNECT ili SET CONNECTION. Ako nema konekcije, ali je SQL naredba izvršena, kreira seimplicitna konekcija (environment promenljiva DB2DBDFTsadrži ime podrazumevane <strong>baze</strong>). Ako proces nema konekciju u stanju current, nalazi se u stanjuunconnected. Iz stanja connected prelazi se u stanje unconnected kada setekuća konekcija sa namerom raskine ili ako se neka SQLnaredba ne izvrši uspešno, čime se oper<strong>ac</strong>ija poništava ikonekcija se raskida.23<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Tipovi stanja konekcije held and release-pending current and dormant Ako proces izvrši naredbu CONNECT, a ime <strong>baze</strong> nije uskupu postojećih konekcija: tekuća konekcija prelazi u stanje dormant, ime <strong>baze</strong> se dodajeskupu konekcija, dok nova konekcija prelazi u stanje current i ustanje held. Ako je ime <strong>baze</strong> već u skupu postojećih konekcija i opcijapreprocesora SQLRULES(STD) je uključena, generiše segreška.24<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Stanja held i release-pending Release-pending znači da će se u narednoj uspešnopotvrđenoj oper<strong>ac</strong>iji javiti DISCONNECT (rollb<strong>ac</strong>k nemauticaja na konekciju). Held znači da se u narednoj uspešno potvrđenoj oper<strong>ac</strong>ijineć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 tokomtransakcije ako se izvrši ROLLBACK ili ako se usledneuspešne COMMIT oper<strong>ac</strong>ije, zapravo izvršiROLLBACK.25<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Stanja current i dormant Konekcija koja je u held ili release-pending stanju može bitii u stanju current ili dormant. Current konekcija je konekcija koja se koristi za izvršenjeSQL 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 sanavedenom bazom prelazi u stanje current, ostalekonekcije prelaze ili ostaju u stanju dormant. U svakom trenutku, samo jedna konekcija može bititekuća.26<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


SYNCPOINT (ONEPHASE | TWOPHASE | NONE) Specifikuje kako se vrši koordin<strong>ac</strong>ija COMMIT ili ROLLBACKnaredbi kada postoje višestruke konekcije. Opis vrednosti za SYNCPOINT: Samo se jedna baza u okviru transakcije može ažurirati, sveostale mogu samo da se čitaju (ONEPHASE). Bilo koji pokušajmenjanja neke druge <strong>baze</strong> generiše grešku. Upravljač transakcijama (TM) u vreme izvršavanja vršikoordin<strong>ac</strong>iju dvofaznih COMMIT naredbi između onih bazakoje podržavaju ovaj protokol (TWOPHASE). Ne koristiti TM za izvršenje dvofaznih COMMIT naredbi i neprimenjivati ažuriranje jedne, a čitanje više baza (single updater,multiple reader) (NONE).28<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Pojedinačne COMMIT (ROLLBACK) naredbe seprosleđuju svim bazama. Ako jedna ili više ROLLBACK naredbi ne uspe, generišese greška, slično za COMMIT. Da bi se u vreme izvršavanja postavile neke drugevrednosti parametara, koristi se komanda SET CLIENT ilisqlesetc API. Komanda QUERY CLIENT (ili sqleqryc API) vraća tekućevrednosti opcija preprocesora.29<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


sqleqryc - Query client connection settings Vraća parametre podešavanja tekuće konekcije procesaaplik<strong>ac</strong>ije. Struktura sqle_conn_setting sadrži tipove i vrednostiparametara podešavanja konekcije. Neophodno je uključiti API zaglavlje sqlenv.h sqleqryc (struct sqle_conn_setting * pConnectionSettings,unsigned short NumSettings,struct sqlca * pSqlca);30<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Parametri pri pozivu sqlecryc API-ja pConnectionSettings – ulazno/izlazni parameter. Pokazivačna sqle_conn_setting strukturu, koja specifikuje tipove ivrednosti parametara podešavanja koji se odnose nakonekciju. Korisnik definiše niz od numSettings elemenatatipa sqle_conn_settings. Polje type se postavlja na jednu od5 mogućih opcija za podešavanje parametara konekcije.Nakon poziva API-ja, polje value svakog elementa sadržitekuće podešavanje navedene opcije. numSettings – ulazni parametar. Bilo koji ceo broj (od 0 do7) koji predstavlja broj vrednosti opcija konekcije koje sevraćaju. pSqlca – izlazni parametar. Pokazivač na sqlca strukturu.31<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


sqleqryc U bilo kom trenutku izvršavanja procesa aplik<strong>ac</strong>ije možese zatražiti inform<strong>ac</strong>ija o tekućim parametrimapodešavanjima konekcije. Ukoliko QUERY CLIENT prođe uspešno, polja usqle_conn_setting strukturi će sadržati tekuće parametrepodešavanja konekcije. Ako do tada nije pozivana naredba SET CLIENT, ovastruktura će sadržati podešavanja iz faze preprocesiranja,samo ako je već procesirana bar jedna SQL naredba;inače, sadržaće podrazumevane vrednosti opcijapreprocesora.32<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


sqlesetc - Set client connection settings Postavljaju se parametri podešavanja konekcije, koristećistrukturu 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 strukturusqle_conn_settings. Alocira se niz od NumSettingssqle_conn_setting struktura. Polje type svake strukture sepostavlja na odgovarajuću opciju konekcije. Polje value sepostavlja na željenu vrednost te opcije. NumSetting – ceo broj (od 0 do 7) koji predstavlja broj opcijakonekcije koje treba da se postave na odgovarajuće vrednosti pSqlca – izlazni parametar. Pokazivač na strukturu sqlca.33<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


sqlesetc Ako se ovaj API uspešno izvrši, konekcije u transakcijama kojebudu sledile koristiće parametre konekcije koji su njimespecifikovani, u suprotnom, parametri konekcije ostajunepromenjeni. Parametri konekcije za neku aplik<strong>ac</strong>iju se mogu promenitisamo ako nema postojećih konekcija (npr. pre nego što seuspostavi bilo koja konekcija, ili posle naredbi RELEASE ALL iliCOMMIT). Jednom kada se SET CLIENT uspešno izvrši, podešavanjakonekcije postaju fiksna i mogu se promeniti jedino ponovnimpozivom SET CLIENT API-ja. Sve opcije preprocesora koje se odnose na aplik<strong>ac</strong>iju će bitiponištene.34<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Struktura sql_conn_setting Ova struktura se koristi za specifik<strong>ac</strong>iju tipova i vrednostiparametara podešavanja konekcije za sqleqryc i sqlesetcAPI-je. Polja u strukturi: type SMALLINT tip parametra podešavanja value SMALLINT vrednost parametra podešavanja35<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Dozvoljene vrednosti za polja type i value:Type Value OpisSQL_CONNECT_TYPESQL_RULESSQL_DISCONNECTSQL_SYNCPOINTSQL_DEFERRED_PREPARESQL_CONNECT_NODESQL_CONNECT_1SQL_CONNECT_2SQL_RULES_DB2SQL_RULES_STDSQL_DISCONNECT_EXPLSQL_DISCONNECT_CONDSQL_DISCONNECT_AUTOSQL_SYNC_TWOPHASESQL_SYNC_ONEPHASESQL_SYNC_NONESQL_DEFERRED_PREPARE_NOSQL_DEFERRED_PREPARE_YESSQL_DEFERRED_PREPARE_ALLIzmeđu 0 i 999 ili ključna rečSQL_CONN_CATALOG_NODECONNECT tipa 1 daje mogudnost rada sajednom bazom u okviru jedne transakcije(RUOW).CONNETCT tipa 2 podržava rad sa više baza uokviru jedne transakcije (DUOW).Omoguduje se da se naredbom CONNECTtekuda konekcija može preb<strong>ac</strong>iti u stanjedormant....Čvor sa kojim se uspostavlja konekcija.Vrednost environment-promenljiveDB2NODE se postavlja na datu vrednost.SQL_ATTACH_NODE Između 0 i 999 Čvor sa kojim se vrši povezivanje. Vrednostenvironment-promenljive DB2NODE sepostavlja na datu vrednost.36<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Ažuriranje više baza <strong>podataka</strong> u okvirujedne transakcijeKada se u okviru iste transakcije čita i menja više baza, takav vid pristupabazi se zove multisite update.Ako se koristi DB2 upravljač transakcijama (TM):za povezivanje sa bazom koristi se CONNECT tipa 2 i dvofazni COMMIT.Eventualno treba konfigurisati DB2 upravljač transakcijama.Ako se koristi upravljač transakcijama sa XA-podrškom:za povezivanje sa bazom se koristi CONNECT tipa 2 i jednofazni COMMIT.Konfigurisati XA-upravljač transakcijama za upotrebu DB2 baza.38<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Upravljač transakcijama (TM) Upravljač transakcijama dodeljuje identifikatoretransakcijama, kontroliše njihov rad i preuzimaodgovornost za uspešan završetak rada transakcija ilipojavu problema. Upravljač transakcijama čuva inform<strong>ac</strong>ijeo transakcijama u posebnoj bazi (baza upravljačatransakcijama). SUBP obezbeđuje funkcionalnost upravljača transakcijamakoja može da obezbedi koordin<strong>ac</strong>iju promena na više bazaunutar jedne transakcije. Klijentska aplik<strong>ac</strong>ija koristi bazu upravljača transakcijamaza registrovanje svake transakcije i praćenje njihovogizvršavanja.39<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Dvofazni COMMIT40<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


0 - aplik<strong>ac</strong>ija je pripremljena za dvofazni commit. To se može postićipreko 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 konfigur<strong>ac</strong>ioni parameter SUBP-a tm_database postavljen na1ST_CONN, SAVINGS_DB postaje baza upravljača transakcijamadok traje proces aplik<strong>ac</strong>ije.2 - uspostavlja se konekcija sa bazom SAVINGS_DB i dobija sepotvrda.3 - update tabele SAVINGS_ACCOUT, čime počinje transakcija.Baza upravljača transakcijama odgovara klijentu prosleđujući ID zadatu transakciju.Napomena: registr<strong>ac</strong>ija transakcije se vrši kada se pokrene prva SQLnaredba u transakciji, ne za vreme uspostavljanja konekcije.41<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


5 - izvršavanje SQL naredbi nad bazom SAVINGS_DB. 6 - registr<strong>ac</strong>ija ID-a transakcije nad bazom FEE_DB koja sadržitabelu TRANSACTION_FEE, kada se vrši prvi pristup bazi uokviru transakcije. 7 - izvršavanje SQL naredbi nad bazom FEE_DB 8 - mogu se dodatne SQL naredbe izvršiti nad bazomSAVINGS_DB aktiviranjem konekcije. Kako je transakcija većregistrovana u koraku 4, nema potrebe vršiti registr<strong>ac</strong>ijuponovo. 9 - povezivanje i rad sa bazom CHECKING_DB vrši se na istinačin kao u kor<strong>ac</strong>ima 6 i 7. 10 - kada klijent zahteva commit transakcije, prepare porukase šalje svim bazama koje učestvuju u transakciji. Svaka bazaupisuje "PREPARED" slog u svoj log fajl i šalje odgovor klijentu.42<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


11 - nakon što klijent primi pozitivne odgovore od svih baza,on šalje poruku bazi upravljača transakcijama, infomrišući je daje transakcija spremna za commit (PREPARED). Baza upravljačatransakcijama upisuje "PREPARED" slog u svoj log fajl i šaljeodgovor klijentu da druga faza commit oper<strong>ac</strong>ije može dapočne. 12 - tokom druge faze commit-a, klijent šalje poruku svimbazama da treba da izvrše commit. Svaka baza upisuje"COMMITTED" slog u svoj log fajl i oslobađa ključeve koji subili postavaljeni tokom transakcije. Kada baza završipotvrđ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 daje transakcija završena. Baza upravljača transakcijama upisuje"COMMITTED" slog u svoj log fajl, čime se naglašava da jetransakcija završena i obaveštava klijenta o završetku.43<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Podešavanja upravljača transakcijama(TCP/IP komunik<strong>ac</strong>ija) Sve komunik<strong>ac</strong>ije sa serverima se v<strong>rs</strong>e preko TCP/IP DB2 sistemi baza su jedini sistemi za upravljanje bazamakoji učestvuju, u transakcijama. Baza upravljača transakcijama se podešava pomoćukonfigur<strong>ac</strong>ionog parametra <strong>baze</strong> tm_database. Ako je kao vrednost ovog parametra zadato 1ST_CONN,kao baza upravljača transakcijama koristi se baza sa kojomse uspostavlja prva konekcija. Napomena! Ukoliko aplik<strong>ac</strong>ija pokuša da izvrši disconnectod <strong>baze</strong> koja se koristi kao baza upravljača transakcijama,dobiće se upozorenje, i konekcija će se održati dok se nepotvrdi transakcija.44<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>


Korišćena literatura DB2 9.7 documentation: Database Administration Concepts and ConfigurationReference (pdf) Administrative API Reference (pdf) SQL Reference Vol.2 (pdf)45<strong>Distribuirane</strong> i <strong>objektne</strong> <strong>baze</strong> <strong>podataka</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!