Professional Documents
Culture Documents
Communication Support
DB2
DB2_con
ne
DRDA Application Server
Communication Support mora da bude instaliran na serveru da bi omogucio klijentu remote login. Za nas je vazan
Application Developement Client koji je kolekcija grafickih i negrafickih alata i komponenti za razvoj tekstualno,
multimedijalno i objektno orjentisanih aplikacija.
Run-time-client omogucava funkcionalnost neophodnu da bi aplikacija pristupila DB2 Universal Database serverima i
DB2 Connect serverima. Funkcionalnost ukljucuje podrasku za communications support protokol i podrsku za
aplikacioni interfejs kao sto su JDBC, SQLJ, ODBC, CLI,...
Kako mozemo da pristupimo:
1. Preko komandnog interfejsa
2. Preko razlicitih stavki u SQL-u
3. Preko aplikativnih interfejsa kao sto je ugnjezdeni SQL (C, JAVA)
Moguce je da na istom sistemu postoji vise instanci(primeraka) od kojih svaki moze da ima svoju bazu(database
management environment). To sluzi da na jednom racunaru oni budu razdvojeni, odnosno jedna drugoj nemaju
pristup. Komanda za konekciju na bazu CONNECT TO ime_baze. Postoji protokol da se istovremeno prijavimo na vise
baza (to su oni connect type 1 i 2). Na mainframe-u imamo jednu bazu a sve ostalo ide preko prostora za cuvanje
tabela.
DSL(jezik podataka(data sublanguage))=DDL+DML
DDL-data definition language-jezik za definiciju podataka koji se koristi za definisanje ili deklarisanje objakata u
bazi(CREATE, ALTER, DROP)
DHL-data manipulation language-jezik za rad sa podacima koji se koristi pri radu i obradi objekata iz baze(SELECT,
UPDATE ,INSERT,DELETE)
DCL-data control language-REVOKE, GRANT, CONNECT, COMMIT, ROLLBACK
Alternativa u aplikacijama sa kojima mozemo da radimo:
-staticki SQL
-dinamicki SQL
-CALL LEVEL INTERFACE(ODBC)
-JAVA DEVELOPEMENT (JDBC i SQLJ)
-STORED procedure
-korisnicki definisane funkcije
Staticki SQL- sve naredbe su unaprijed poznate u DB2 UDB moze da odredi strategiju pristupa podacima za vreme
razvoja programa i sacuva strategiju za kasnije izvrsavanje
Dinamicki SQL-kada aplikacioni program prosledjuje naredbu DB2 UDB za vreme izvrsavanja. To znaci da DB2
odredjuje strategiju pristupa podacima tokom izvrsavanja programa.
Table/column descriptions
Server code with SQL
Autorizations
Statistic
PREPARE
ACCESS
Dinamicki staticki STRATEGY
EXECUTE
-CALL LEVEL INTERFACE-CLI je API(aplication program interface) za pristup bazi koji koristi nazive funkcija da
„prizove“ dinamicki SQL. To je alternativa ugradjenom dinamickomSQL-u. Razlika je u nacinu pozivanja mehanizma
za SQL. Aplikacija koja koristi ugradjeni SQL zahteva da prekompajler pretvori SQL naredbe u kod, koji se onda
kompajlira, vezuje za bazu i izvrsava. DB2 CLI aplikacija ne zahteva prekompilaciju ili vezivanje vec koristi standardni
set funkcija za izvrsavanje SQL naredbi i povezanih servisa za vreme izvrsavanja (run time).
ODBC-OPEN DATABASE CONNECTIVITY-standard za pristup bazi (razvio MICROSOFT).
-JAVA aplikacije: SQL APPLICATION
SQLJ RUN-TIME CLASSES
-STORED procedure-omogucava aplikaciji koja radi na strani klijenta da pozove proceduru koja je smestena na server
baze. Ona se izvrsava lokalno i vraca informacije aplikaciji na strani klijenta. Prednosti:
-smanjuje internet saobracaj
-poboljsava performanse servera
-pristupa karakteristikama koje postoje samo na serveru baze
-Korisnicki definisane funkcije- mogu biti napisane za obavljanje operacija u okviru SQL-a koje vracaju jednu skalarnu
vrednost(npr konverzija, racun,..). Mogu da budu napisane na nekom visem programskom jeziku (C, C++,JAVA,...)
CLP-command line proccessor
Kako se izlazi iz komandne linije?
1.QUIT-ne prekida pozadinske procese i ne diskonektuje se sa baze
2.TERMINATE- prekida pozadinske procese i prekida konekciju sa bazom
3.CONNECT RESET-ne prekida pozadinske procese, a prekida konekciju sa bazom ako je CONNECT=1
Prostori tabela
Pre nego sto tabela moze da bude kreirana, mora da postoji baza podataka i prostor podataka. To ce vjerovatno biti
posao DB2 sistemskog administratora ili administratora baze podatakada naprave ove objekte. Sledi redosled
kreiranja: 1.baza
2. prostor tabela
3.tabele
CREATE TABLE naredba na kraju moze d aima IN prostor za cuvanje tabela. To IN stavlja tabelu u prostor za cuvanje
tabela koji se navede. Ako s eizostavi, stavlja se u podrazumjevani sistemski prostor za cuvanje tabela. Tipovi
podataka: CHAR(n), VARCHAR(n), LONG VARCHAR,GRAPHIC(n),VARGRAPHIC(n),LONG VARGRAPHIC, SMALLINT,
INTEGER, DECIMAL(p,s), FLOAT,REAL,DOUBLE),DATE, TIME, TIMESTAMP
Pogledi-rokovnik RBP
Privremene tabele-brisu se cim izadjemo iz programa(sa declare)
Referencijalni integritet
Trigeri
Tip int iz C-a nije dozvoljen jer je njegova interna reprezentacija masinski zavisna.
Ako je karakter od 20 onda je C-ovska promijenljiva char[21]
Ugnjezdeni SQL se razlikuje kod HOST promijenljivih. One moraaju da budu smijestene na unaprijed predvidjeno
mjesto. Glavnaa karakteristika host promijenljive je da se u SQL naredbama pisu sa: ime_promijenljive
Npr: SQL: SELECT MAX(indeks)
FROM dosije
C:EXEC SQL SELECT MAX(indeks) INTO :indeks
FROM dosije;
Ako ne stavimo : onda to shvata kao atribut tabele i dolazi do greske. Da bi host promijenljiva primila vrijednost
koristimo INTO. On je kod SELECT-a obavezan.U programu kada kazemo SELECT mozemo da smestimo samo jedan
slog, tako da SELECT koristimo samo kada smo sigurni da rezultat nije vise od jednog sloga.
Deklaracija host promijenljivih se navodi izmedju:
EXEC SQL BEGIN DECLARE SECTION;
.
.
EXEC SQL END DECLARE SECTION;
Primeri:
Db2clgn –d ime_baze –t ime_tabele –l jezik
U zavisnosti od jezika(podrazumijevani je C) daje heder fajl u kome se .h nalazi struktura koja opisuje slogove u
tabeli. Podstrukturu sa .java duzinom i podatkom pravi kada imamo VARCHAR.
Atributi koji mogu da imaju vrijednost NULL koriste SHORTINT promijenljivu koja predstavlja indikator.
Npr: SELECT cola INTO :a:a_ind
Ako je NULL indikator je manji od nule.
Ako kod db2clgn stavimo –i moze da generise i indikatore i generise ih kao niz indikatora tipa SHORT . Indikatori
mogu da se koriste i za UPDATE. Stavimo -1u njega i u bazuse unese NULL.
SQLCA –SQL COMMUNICATION AREA.
Uspeh ili greska poslednje izvrsene SQL naredbe je opisan u strukturi SQLCA. SQLCA treba da provjerava posle svake
SQL naredbe. Prva SQL naredba u programu mora da bude EXEC SQL INCLUDE SQLCA, cime se ukljucuje struktura
SQLCA.
SQLCODE- detaljna, moguca zavisnost od platforme, numericka promijenljiva.
SQLSTATE-nije detaljan kao SQLCODE, ali je platformski nezavistan, string promijenljiva.
U SQLCA se upisuju odgovarajuci kodovi. Ako su <0 => greska, ako je +100=> not found, ako je 0=>uspeh, ako je >0 i
<>100=> warning.
WHENEVER naredba:
Koristi se u kodiranju za rukovanje izuzetcima. Sintaksa:
EXEC SQL WHENEVER CONDITION ACTION;
SQLERROR(SQLCODE<0) GO TO :X
SQLWARNING(0<SQLCODE<>100) CONTINUE
NOT FOUND(SQLCODE=+100)
Ako stavimo CONTINUE onda mi moramo da proveravamo greske, jer on „samo tera“.
Na labelu moze samo go to. Alternativa WHENEVER komandi je niz if(...) else... pitalica.
Kad se radi sa vise slogova, definise se kursor.
Printf moze i poslije EXEC SQL CONNECT RESET; jer smo mi rezultat sacuvali u host promijenljivima(to je slucaj kad
imamo samo jedan slog kao rezultat).
Kada db2clgn radi on ne brise prethodni sadrzaj ve cdodaje na njega(pokrenuti dva puta istu tabelu).
DBRM-DATABASE REQUEST MODULE
Kad se napise program sa ugradjenim SQL-om prije nego sto se kompajlira odgovarajucim kompajlerom za taj jezik
(npr: gcc), EXEC SQL naredbe moraju da se zamene necim sto ce odgovarati kompajleru, da bi on to mogao da
procesira. Taj proces zamene radi DB2 proces koji se zove PREKOMPAJLER. Za staticke SQL programe. SQL naredbe
ce dodatno obradjene od strane DB2 bind procesa da bi se napravio paket
Transakcija je logicka jedinica posla. Moze da sadrzi niz operacija. Sa gledista korisnika izvrsavanje transakcije je
automatsko. Transakcija ostavlja bazu u konzistentnom stanju. Kontrolu nad trans u racunarskom sistemu ima
upravljac transakcijama(na starim sistemima koristen termin TP monitor).
Primer:
BEGIN TRANSACITON;
UPDATE AC 123 {BALANCE:=BALANCE- $100};
IF any error occured THEN GO TO UNDO; END IF;
COMMIT; /*successful transaction*/
GO TO FINISH;
UNDO:
ROLLBACK; /* UNsuccessful transaction */
FINISH;
RETURN;
Osobine transakcija:
1. BEGIN TRANSACTION, COMMIT ROLLBACK mogu biti pozvani i implicitno . Inicijalno svaka transakcija bi
trebalo da pocne sa BEGIN TRANSACTION. COMMIT potvrdjuje da je transakcija uspijesna i promijene su
trajno sacuvane. U DB2 ne postoji begin transaction. Prakticno kad program pocne , pocinje i transakcija.
Automatski cim se sa COMMIT ili ROLLBACK zavrsi transakcija, pocinje nova. COMMIT nije obavezan u DB2.
Navodimo ga ako hocemo eksplicitno da zavrsimo transakciju, tj, ako u programu imamo vise transakcija.
Navodjenjem ROLLBACK-a je obavezno ako zelimo da ponistimo efektte transakcije. To vracanje se radi
preko log datoteke. Tu se vrsi evidencija svega sto radimo sa bazom. Kad radimo ROLLBACK on se vraca
unazad po log datoteci i ponistava promijene. Postoje slucajevi kada sistem forsira ROLLBACK bez obzira na
nasu saglasnost.To su slucajevi kada se desi neka greska pa sistem sam vrsi oporavak.
Primjer:Kod 2 prodavnice rezervisu 1 preostalu kartu. Jedan ce dobiti, drugi nece. Tu ce sistem sam odraditi
ROLLBACK-to je sistemski ROLLBACK.
2. Vazno je obezbijediti odgovarajucu poruku na kraju izvrsavanja transakcije.
3. Postoji log za oporavak. Sistem odrzava log ili zurnal u kome se nalaze informacije neophodne za oporavak
-aktivni log
-arhivski log(kad se napuni aktivni)
4. Sistem garantuje da je izvrsavanje naredbi nad bazom atomsko-naredbe se izvrsavaju nad skupovima torki i u
slucaju greske u sredini naredbenije dozvoljeno da nad nekim torkama naredba bude izvrsena a nad nekim
ne
5. Program se izvrsava kao niz transakcija.
6. COMMIT ili ROLLBACK zavrsavaju transakciju alli ne prekidaju izvrsavanje programa
7. „Program <- 1st transaction ->
initiation“ BEGIN TRANSACTION COMMIT
<- 2nd transaction ->
BEGIN TRANSACTION ROLLBACK
<- 3rd transaction ->
BEGIN TRANSACTION COMMIT
„Program termination“
Upravljac transakcijama obezbedjuje da se trans ne izgube, da ne budu delimicno izvrsene ili da ne budu izvrsene
vise puta. Struktura trans je:
BEGIN TRANSACTION;
/*niz operacija transakcije*/
.
.
.
COMMIT; (ili ROLLBACK)
/*signal uspesnog ili neuspesnog zavrsetka*/
COMMIT
1 signalizira uspesan kraj transakcije
2 sve promene postaju stalne
3 do tada su promene smatrane samo kao namera koja je mogla da se ponisti u slucaju pojave greske
ROLLBACK
1 signalizira neuspesan kraj transakcije
2 baza može da bude u nekonzistentnom stanju
3 sve promene ucinjene u transakciji moraju da budu ponistene (na osnovu sadržaja log datoteke)
Neki od ovih logova nisu uvek korektni, npr nestane struje i sistem krene da se dize.Prvo se cita iz loga i vraca
konzistentnost. Pokazalo se da ako tokom tog procesa nestane struja mogu da se izgube neki podaci.
TACKA SINHRONIZACIJE
1 Nalazi se izmedju dve transakcije. Baza je u konzistentnom stanju
2 U nju se dolazi ili inicijalizacijom programa ili izvrsavanjem COMMIT/ROLLBACK
3 Kada se uspostavi tacka sinhronizacije
-sve promene nastale od prethodne tacke sinhronizacije se potvrdjuju (COMMIT) ili ponistavaju (ROLLBACK)
-svi kursori otvoreni u programu se zatvaraju, sem ukoliko nisu deklarisani sa WITH HOLD opcijom
-kljucevi nad objektima baze se oslobadjaju (zavisi i od nacina vezivanja programa)
ACID OSOBINE
Transakcija poseduje osobine:
1 Atomicnost (eng. Atomicity). Transakcije su atomske
2 Konzistentnost (eng. Consistency). Transakcije cuvaju konzistentnost baze
3 Izolovanost (eng. Isolation). Transakcije su izolovane jedna od druge prilikom izvrsavanja.
4 Trajnost (eng. Durability). Po potvrdjivanju transakcije promene ostaju u bazi, cak i u slucaju pada sistema
Kritican resurs-sadrzaj bafera, odnosno glavne memorije koji je izgubljen(bafer u sistemu postoji samo na jednom
mjestu i ako se izgubi->problem).
OPORAVAK
-ponistiti efekte transakcija koje su bile aktivne u vreme nastanka greske
-ponoviti izvrsavanje transakcija koje su uspesno zavrsile do tog trenutka ali nisu stigle da efekat izvrsavanja zapisu
na fizicki disk
CHECKPOINT Presek stanja sistema (kao da uzmemo zamrznutu sliku i kad krene oporavak krenemo od te tacke)
Algoritmi za oporavak:
-citanje log datoteke i zatim ponistavanje efekta nezavrsenih transakcija i ponavljanje efekta zavrsenih
ARIES (Algorithms for Recovery and Isolation Exploiting Semantics). Zbog efikasnosti savremeni sistemi prvo vrse
onavljanje izvrsavanja transakcija a zatim ponistavanje efekata neizvrsenih transakcija. Ako bi radio obrnuto, opet
greska.
DVOFAZNI COMMIT
Neophodan u slucaju da aplikacija radi sa nezavisnim upravljacima resursa (npr. IMS i DB2)
Nepohodan u slucaju distribuiranih baza.
Obezbedjuje korektno izvrsavanje u slucaju pojave greske na bilo kojoj komponenti.
"Globalni"(odnosi se na sve sisteme) COMMIT ili ROLLBACK
Koordinator - sistemska komponenta koja koordinira rad upravljaca resursa
Termin konkuretnost oznacava cinjenicu da SUBP dopusta vecem broju transakcija pristup do istih podataka
istovremeno. Prednosti konkuretnog rada:
-krace vreme odziva
-maksimalna propusnost(broj programa koji mogu da rade sa istim podacima)
Problem: kako obezbediti da konkuretne transakcije ne smetaju jedna drugoj?
ZAKLJUCAVANJE
Osnovna ideja:
-kada transakcija želi da radi sa nekim resursom ona zahteva zakljucavanje tog objekta (postavlja katanac nad tim
objektom).
-kada se transakcija zavrsi resurs se oslobadja.
PRETPOSTAVKE
Sistem podržava bar dve vrste katanaca: privatni (ekskluzivni, X) i deljivi (S)
1.Ako je transakcija A postavila X katanac nad torkom t tada zahtev bilo koje druge transakcije B za postavljanje bilo
kog katanca nad t biva odbijen
2.Ako je transakcija A postavila deljivi kljuc nad torkom t tada zahtev bilo koje druge transakcije B za postavljanje
-S katanca nad t može biti ispunjen
-X katanca nad t biva odbijen
Matrica kompatibilnosti:
Transakc A
X S -
X N N Y
Tran B
S N Y Y
- Y Y Y
KATANAC: X(privatni), S(deljiv),-(ne postoji)
N-konflikt, Y-kompatibilnost
DVOFAZNI PROTOKOL ZAKLJUCAVANJA
Striktni dvofazni protokol zakljuc avanja garantuje da se problemi konkurentnosti ne javljaju
1) Transakcija koja želi da procita torku mora prvo da nad njom postavi S katanac.
2) Transakcija koja želi da ažurira torku mora prvo da nad njom postavi X katanac. Alternativno, ako vec drži S
katanac nad tom torkom, transakcija mora da zahteva unapredjenje S katanca u X katanac.
3) Ako je zahtev za postavljanjem katanca od strane transakcije B odbijen jer je u konfliktu sa vec postavljenim
katancem od strane transakcije A, transakcija B ide u stanje cekanja. B ceka dok A ne oslobodi kljuc (sistem mora da
garantuje da B nece zauvek da ostane u stanju cekanja!).
4) X katanac se zadržava do kraja transakcije (COMMIT ili ROLLBACK). S katanac se, uobicajeno, takodje zadržava
(najduže) do kraja transakcije.
MRTVA PETLJA
Mrtva petlja (eng. deadlock) je situacija kada dve ili vise transakcija imaju postavljen katanac nad resursom koji je
potreban onoj drugoj tako da ni jedna ne može da nastavi sa radom.
Mrtva petlja može da ukljuci dve ili vise transakcija
Otkriva se grafom cekanja
Razresava se tako sto se izabere žrtva ciji se efekti poniste i tako oslobode resursi. Koja se bira za zrtvu zavisi od toga
sta od resursa drzi, koliko dugo radi,...
Sql code: =-911 transakcija je prekinuta i automatski je uradjen ROLLBACK
=-913 nije uradjen ROLLBACK ???????
SERIJALIZABILNOST
Kriterijum korektnosti izvrsavanja datog skupa transakcija. Izvrsavanje datog skupa transakcija je korektno ako je
serijalizabilno, tj. Ako proizvodi isti rezultat kao i serijsko izvrsavanje istog skupa transakcija.
Efekat zakljucavanja je da isforsira serijalizibilnost transakcije.
NIVO IZOLACIJE
Termin nivo izolacije se koristi za opis stepena ometanja koje tekuca transakcija može da podnese pri konkuretnom
radu.Ako su transakcije serijalizabilne stepen ometanja ne postoji, tj nivo izolacije je maksimalan. Realni sistemi zbog
razlicitih razloga (performansi) dopustaju rad sa nivoom izolacije koji je manji od maksimalnog. Sto je veci nivo
izolacije manje su dostupne smetnje i obrnuto.
NACINI ZAKLJUCAVANJA
Pod nacinom zakljucavanja podrazumeva se vrsta pristupa zakljucanom objektu koja je dostupna konkurentnoj
transakciji.
Protokol zakljucavanje sa namerom (eng. intent locking protocol) - transakciji nije dozvoljeno da zahteva katanac
nad torkom pre prvog zahteva za postavljanjem katanca uopste.
Konflikt izmedu zahteva se otkriva na nivou relvar-a a ne na nivou torki.
Ako transakcija T zahteva zakljucavanje relvara R katanci koje moze da postavi su:
IS (intent share) - T namerava da postavi S katanac nad pojedinacnim torkama R, radi garantovanja stabilnosti tih
torki koje namerava da obradjuje
IX (intent exclusive) - Isto kao i IS, plus sto T moze da ažurira pojedinacne torke i tada postavlja X katanac na njih
S (share) - T tolerise konkuretno citanje ali ne i konkuretno ažuriranje. T nema nameru da ažurira bilo koju torku iz R
SIX (shared intent exclusive) - Kombinacija S i IX, tj. T može da tolerise konkurentno citanje, i T namerava da ažurira
pojedinacne torke u R, u kom slucaju ce da postavi IX katanac na te torke
X (exclusive) - T ne može da tolerise bilo kakav konkuretan pristup do R.Samo T može ali ne mora da ažurira torke u
R.
Matrica kompatibilnosti:
Transakcija A
X SIX IX S IS -
X N N N N N Y
SIX N N N N Y Y
Transakcija B
IX N N Y N Y Y
S N N N Y Y Y
IS N Y Y Y Y Y
- Y Y Y Y Y Y
SQL standard:
-ne propisuje eksplicitno mogucnosti zakljucavanja
-zahteva od implementacija da obezbede mogucnost konkurentnog izvrsavanja transakcije
-zahteca da azuriranja jedne ne budu vidljiva drugim transakcijama sem u slucaju da prva zavrsi sa COMMIT-om.
SQL Standard definise sledece nivoe izolacije:
READ UNCOMMITED
READ COMMITED
REPEATABLE READ
SERIALIZABLE (predefinisan)
Standard definise tri nacina na koja serializabilnost može da bude narusena kada se ne radi sa najvecim nivoom
izolacije
-Prljavo citanje (eng. dirty read). Transakcija T1 ažurira neki slog, transakcija T2 cita taj slog a zatim T1 ponisti
promene. T2 je procitala slog koji ne postoji niti je formalno ikada postojao
-Neponovljeno citanje (eng. nonrepeatable read). T1 cita slog, T2 ažurira taj slog i T1 cita "istislog ponovo
-Fantomi (eng. phantom). Neka T1 cita skup slogova koji zadovoljavaju neki uslov. Neka T2 unese novi slog koji
zadovoljava isti uslov. Ako T1 sada ponovi zahtev videce slog koji ranije nije postojao - fantomski slog
Nivo izolacije Prljavo Neponovljeno Fantomi
READ UNCOMMITED Y Y Y
READ COMMITED N Y Y
REPEATABLE READ N N Y
SERIALIZABLE N N N
ZAKLJUCAVANJE I KONKURENTNOST
DIRTY WRITE-Transakcija menja nepotvrdjene podatke koji su modifikovani od strane neke druge transakcije koja
nije izvrsila COMMIT ili ROLLBACK.
DIRTY READ-Transakcija cita podatke koji su modifikovani od strane druge transakcije koja jos nije izvrsila COMMIT ili
ROLLBACK.
FUZZY READ, NON-REPEATABLE READ-Transakcija koja cita podatke, kad ponovi citanje ne vidi iste podatke.
PHANTOM READ-T1 cita skup slogova koji zadovoljavaju neki uslov. T2 unese novi slog koji zadovoljava isti uslov. Ako
T1sada ponovi zahtev, vidjece slog koji ranije nije postojao-fantomski slog.
Database manager kontrolise pristup ovome da bi se sprecili nezeljeni efekti kao sto su:
-IZGUBLJENA azuriranja- A i B citaju isti slog. A azurira taj slog, a zatim to radi B. Kada B azurira taj slog A gubi
svoja azuriranja.
-NEPONOVLJENA citanja(non-repeatable read)-A cita slog i odlazi da obradi druge SQL zahtjeve. U
medjuvremenu B mijenja taj slog i salje COMMIT. Ako A sada pokusa da procita aj slog vidjece da je on
mijenjan ili obrisan.
-FANTOMI(phantom red phenomenom)-T1 cita skup slogova koji zadovoljavaju odredjeni uslov. T2 unosi
novi slog koji odgovara tom uslovu. Ako sada T1 ponovi zahtjev, vidjece da slog koji ranije nije postojao-
fantomski slog.
DB2 ce zahtevati kljuceve nad objektima baze u zavisnosti od tipa pristupai nivoa izolacije koji vazi za konekciju ili
naredbu za pristup podacima.Kljucevi nad prostorima tabela(objekti koji mogu biti zakljucani)se uglavnom koriste za
kontrolu konkurentnog izvrsavanja utility-ja kao sto su BACKUP,LOAD,REORG.
Primer-online backup nece raditi u isto vreme kada i utility obradjuje tabelu u istom prostoru tabela.
Za standardne DB2 tabele, DB2 ce zahtjevati kljuc na nivou tabele, zavisno od tipa pristupa. SELECT naredba ce
zahtevati kljuc koji dozvoljava citanje,... U vecini slucajeva DB2 ce zahtevati kljuceve za pisanje i citanje na nivou
redova tabele da bi dozvolio mnogim aplikacijama pristup tabeli. Kod multidimenzionih klasterovanih tabela (MDC)
podaci se cuvaju i indeksiraju na nivou bloka. DB2 moze da zahteva zakljucavanje na nivou blokova (range-
partitioned) tabele DB2 moze da zahteva zakljucavanje na nivou particija podataka.
Na vrhu svega su prostori tabela. Kad DB2 radi zakljucavanje, jedan par je tabelai neki njeni slogovi. Zakljucavanje
moze d abude na nivou blokova, klastera,...
Table lock Table lock
Table lock
Block lock Data lock
Row lock
Row lock Range lock
IN-intent none-mozemo da citamo bilo koji podatak iz tabele, cak i one nepotvrdjene, ali ne mozezemo da azuriramo
nista. Konkurentnost transakcije mogu da citaju ili azuriraju tabelu. Kljucevi nad redovima nisu potrebni. I prostori
tabela i tabele mogu da budu zakljucani ovim kljucem.
IS-intention share-mozemo da citamo podatke ako mozemo da dobijemo kljuc S nad ciljani mredovima. Ne mozemo
da vrsimo azuriranja. Drugi mogu da citaju ili mijenjaju podatke, sve dok ne mijenjaju redove nad kojima drzimo S
kljuc. I prostori tabela i tabele mogu biti ovako zakljucani.
IX-intention exclusive-vlasnik moze da cita ili azurira ako dobije unapredjenje u X katanac za slogove koje zeli da
azurira, odnosno U ili S katanac za slogove koje hoce da cita. Ostali mogu da citaju ili azuriraju tabelu, sve dok to nije
nad slogovima nad kojima vlasnik ima X katanac. I prostori tabela i tabele mogu biti ovako zakljucani.
SIX-share with intention exclusive-vlasnik moze d acita bilo koje podatke i mijenja redove nad kojima moze d adobije
unapredjenje u X katanac. Ostali mogu da citaju tabelu. Zakljucavanje tabela sa SIX je poseban slucaj. Do njega dolazi
ako aplikacija drzi IX katanac nad tabelama i zahteva S katanac, ili obratno. Rezultat je SIX katanac.
S-shore-dijeljiv kljuc, vlasnik i svi ostali m ogu da citaju ali ne i da azuriraju podatke u tabel. Tabele mogu biti ovako
zakljucane.
U-update-vlasnik moze da cita sve podatke iz tabele i moze da mijenja podatke ukoliko moze d adobije X kljuc nad
tabelom. Ovo moze da se desi ukoliko imamo SELECT sa FOR UPDATE . ostali mogu da citaju ali ne i da azuriraju.
Tabele mogu biti zakljucane ovako.
X-exclusive-vlasnik moze da cita ili azurira podatak. Samo UR moze da pristupi zakljucanom objektu. Tabele mogu biti
ovako zakljucane.
Z-super exclusive-koristi se kod alter i drop naredbi nad tabelama ili kod nekih tipova reorganizacije tabela. Niko
drugi ne moze da cita ili azurira tabelu. Tabeli i prostori mogu da budu ovako zakljucani.
IS, IX, SIX se koriste na nivou tabele da bi bilo podrzano zakljucavanje redova(slogova). Oni dozvoljavaju zakljucavanje
na nivou slogova istovremeno sprecavajuci vise ekskl. Kljuceva nad tabelama koje postavljaju druge aplikacije.
S,U,X i Z se koriste na nivou tabele da isforsiraju striktnu strategiju zakljucavanja tebela. Ne koristi se zakljucavanje
nad redovima(slogovima)
IN se koristi nad tabelom da dozvoli koncept uncommited read-a. Nisu potrbna zakljucavanja na dslogovima.
KLJUCEVI NAD REDOVIMA(SLOGOVIMA)
S-share- slog je dostupan za citanje vlasniku, dok ostali mogu da citaju.
U-update-vlasnik cita slog, ali postoji mogucnost da ga mijenja. Ostali mogu samo da citaju. Glavna razlika u odnosu
na S je namjera da se izvrsi azuriranje. U katanac podrzava kursore koji imaju FOR UPDATE OF. Samo jedna aplikacija
moze da drzi U katanac nad slogom.
X-exclusive-slog moze da mijenja samo vlasnik. Za ostale nije dostupan, osim ako s ekoristi uncomitted read.
W-weak exclusive-zahtijeva se nad slogom kada se on unosiu ne katalosku tabelu i kada se naidje dupliran kljuc za
unique indeks. Vlasnik moze da mijenja zakljucan slog. Ovaj kljuc je slican X-u, samo je kompatibilan NW kljucu.
NS-next key share-vlasnik i konkurentne aplikacije mogu da citaju ali ne i da azuriraju red. Samo pojedinacni redovi
mogu da budu zakljucani sa NS. Ovaj kljuc se zahtjeva kad imamo dijeljiv kljuc(S) nad podacima koji se citaju sa RS ili
CS novoom izolacije.
NW-next key weak exclusive-ovaj kljuc se zahtjeva nad sledecim slogom kada se slog unosi u indeks nekataloske
tabele. Vlasnik moze da cita ali ne i da mijenja zakljucan slog. Ovo je slicno X i NX kljucevima, samo sto je ovo
kompatibilno sa W iNS kljucevima.
Kljucevi nad slogovima zahtijevaju samo aplikacije koje imaju podrzano zakljucavanje na nivou tabela. Ovi
podrzavajuci kljucevi sa namerom IS, IX i SIX.
Osnovni koncept ROW LOCK-a je da slogove koje cita jedna aplikacija mogu da citaju i drugi, i slogove koje azurira
jedna aplikacija nisu dostupni drugima koji koriste zakljucavanje na nivou slogova.
DB2 ANSI Dirty write Dirty read Fuzzy read Phantom read
Uncomitted read Read uncomitted N Y Y Y
(UR) (lvl 0)
Cursor stability Read committed N N Y Y
(CS) (lvl 1)
Read stability Repetable read N N N Y
(RS) (lvl 2)
Repeatable read Serializabel read N N N N
(RR) (lvl 3)
LOCK TABLE naredba omogucava programeru da zakljucava tabelu u strozijem modu od onog sto zahtijeva database
manager. Mi sa LOCK TABLE smanjujemo nivo paralelnog izvrsavanja. Ovo radimo ako npr hocemo presjek stanja pa
ne zelimo da nas prekida jer nam je potrebno bas precizno stanje.
SHARE MODE-dozvoljava drugima SELECT nad tabelom ali ne i INSERT, UPDATE ili DELETE.
EXCLUSIVE MODE-zabranjuje ostalima da vrse bilo koje operacije nad tabelom, sa izuzetkom onih koji imaju nivo
izolacije UNCOMMITED READ
KONVERZIJA KATANACA:
Moguce je da se izvrsi konverzija nekih katanaca na katance na visem nivou-to bi bilo unapredjenje katanaca.
Unapredjenje ide samo u jednom smijeru i nijedna naredba ne moze da vrati katanac na nizi nivo dok se ne odradi
ROLLBACK ili COMMIT.SIX kljuc nad tabelom je poseban slucaj. Dobija se kada drzimo IX kljuc nad tabelom i
zahtevamoS kljuc, ili obrnuto. Rezultat konverzije kljuceva u ovom slucaju je ikatanac SIX.
ESKALACIJA KLJUCEVA:
Imamo tabelu i na njoj imamo neki kljuc. U njoj imamo mnogo slogova koji imaju neki drugi kljuc. Kada u jednom
trenutku bude previse takvih slogova, dolazi do ekskalacije kljuceva i taj kljuc podizemo na visi nivo-npr nivo tabele.
Dva parametra u konfiguraciji baze direktno uticu na proces ekskalacije kljuceva.
1. LOCKLIST-za memoriju za kljuceve se analizira 4KB u bazi. Ovaj parametar moze da se mijenja.
2. 2. MAXLOCK-procenat locklist-e dozvoljen jednoj aplikaciji. Ovaj parametar moze da se mijenja.
Eskalacija kljuceva moze da se javi u dvije razlicite situacije:
1. Aplikacija trazi kljuc koji ce nadmasiti procenat u locklistu definisan u maxlock. Database manager ce
pokusati da oslobodi memoriju postavljanjem kljuca nad tabelom i oslobadjanjem kljuceva nad slogovima.
2. Aplikacija trazi eskalaciju kljuceva ako je lock lista puna. Database manager ce pokusati da oslobodi
memoriju dobijanjem kljuca nad tabelom i oslobadjanjem kljuceva nad slogovima.
SQLCODE -912 ukoliko je askalacija kljuceva neuspesna.
LOCKLIST/MAXLOCK definisu ukupnu kolicinu memorije dostupnu za kljuceve i memorijski limit za kljuceve jedne
aplikacije.
LOCKLIST MAXLOCK
-kolicina memorije koja se koristi za kljuceve -max procenat memorije koji se dodjeljuje jednoj
-parametar u konfiguraciji baze konekciji iz locklist-e
-velicina stranice u memoriji 4K -parametar u konfiguraciji baze
-moze da se menja -velicina je u procentima
-automatsko odrzavanje -moze da se menja
-default -automatsko odrzavanje
-dozvoljava dinamicko upravljanje memorijom -default
sa najmanje jos jednim automatskim -zahteva da je LOCKLIST podesen na automatic
potrosacem memorije -raspon 1-100
-omogucava automatsko odrzavanje
MAXLOCK-a-
opseg 4 - 524288
TIMEOUT je kada jedna aplikacija drzi resurs, a svi ostali hoce da mu pristupe. Drugi ne drze nista. TIMEOUT je
vrijeme poslije koga se prekida ovo cekanje. Ovo vrijeme se konfigurise pomocu parametra locktimeout. Vrijednost
se definise u sekundama. Za transakciona okruzenja preporucena startna vrijednost za ovaj parametar je 30 sekundi.
Ukoliko za vrijednost stavimo -1, sto je podrazumjevana vrijednost timeout se iskljucuje i aplikacije koje cekaju nece
primiti timeout.
Aplikacija moze da koristi naredbu SET CURRENT LOCK TIMEOUT da promijeni podrazumijevanu vrijednost u bazi.
Ukoliko hocemo da iskljucimo promjene i koristimo podrazumjevanu vrijednost, onda : set current lock timeout null
DEADLOCK-uzroci i otkrivanje
Situacija kad advije ili vis eaplikacija imaju postavljen katanac nad resursom koji je potreban onoj drugoj, tako da ni
jedna ne moze da nastavi sa radom.
Uzroci deadlock-a:
-REPEATABLE READ i READ STABILITY
-ESKALACIJA KLJUCEVA
-CATALOG MODIFICATION
-REFERENTIAL CONSTRAINT ....
-LOSE PROGRAMIRANJE
Detektor DEADLOCK-a(DEADLOCK DETECTOR)-pozadinski proces koji upravlja mrtvim petljama. Kada se otkrije bira
se zrtva nad kojim se vrsi ROLLBACK i vraca SQLCODE -911 sa reason code 2. ROLLBACK nad zrtvom oslobadja
kljuceve i drugi procesi mogu da nastave.
DLCHKTIME- deadlock check interval-odredjuje vremenski interval u kome se provjerava da li je doslo do mrtve
petlje. Mjeri se u milisekundama. Podrazumjevana vrijednost je 10 sekundi( 10 000 ms).
OPTIMISTICKO ZAKLJUCAVANJE
Tehnika koja ne zahtjeva zakljucavanje na nivou slogova izmedju SELECT i UPDATE/DELETE nad ti mslogovima.
Pretpostavljamo da otkljucani slogovi nece biti mijenjani preije UPDATE ili DELETE. Ako se slogovi promijene UPDATE
i DELETE nece uspjeti i ovakve neuspjehe treba da obradimo u aplikaciji, npr tako sto ponovimo SELECT. Prednost
optimistickog zakljucavanja je poboljsana konkurentnost, zato sto drugi mogu da citaju (pisu) taj slog. DB2 koristi
odredjene funkcije koje olaksavaju implementaciju optimistickog zakljucavanja. To su:
-RID-BIT-vraca lokaciju sloga u tabeli
-ROW CHANGE TOKEN-daje vrijednost koja pokazuje trenutnu verziju sloga
Podaci koje vracaju ove funkcije se koriste za UPDATE i DELETE. Uz pomoc vrijednosti koju vraca RID-BIT DB2 brzo
pronalazi optimalni red. Uz pomoc vrijednosti iz ROW CHANGE TOKEN DB2 zna da li je bilo promijena u tom slogu
od prethodnog SELECT-a. Ove funkcije dozvoljavaju aplikaciji da osigura integritet podataka bez drzanja katanca duzi
period vremena, sto doprinosi boljim preformansama i smanju lock contation.
SERIJALIZACIJA
DB2 ima mehanizme serijalizacije koji:
-sprecavaju gubitak integriteta podataka
-maksimizuje konkurentnost
-minimizuje cijenu CPU, I/O i memorije
Ti mehanizmi su:
1. Transakciono zakljucavanje
2. Restricted states-STOP, START,UT,CHKP,UTUT,UTRO,UTRW,...
3. Claims and drains-omogucava DB2 utility-ma i naredbama da nezavisno od bilo kojih katanaca koje ima
transakcija preuzmu kontrolu nad objektima npr QUIESCE utility
4. Latching-struktura stranice moze da bude nekonzistentna dok se vrse promijene. Za ovo vrijeme page batch
se koristi da sprijeci pristup stranici
Konkurentnost se odnosi na dijeljenje resursa od strane vise korisnika ili programa u isto vrijeme. Ovo DB2 kontrolise
pomocu mehanizama serijalizacije.
Sta sve moze biti zakljucano?
Podaci koje oznacimo u SQL-u. Ovdje imamo najvecu kontrolu. Dodatno podaci u povezanim tabelama mogu biti
zakljucan, npr. U roditelj tabeli brisemo slog. DB2 moze da obrise slog i u zavisnoj tabeli. Ako se ovo desi DB2
zakljucava slog u roditelji u zavisnoj tabeli. Ukoliko se katalozi u directory azuriraju i oni moraju biti zakljucani. Indeksi
koji se koriste nad tabelama se ne zakljucavaju transakcionim katancima.
(intent lock mode)(IS, IX, SIX), (Gross lock mode)(S,U,X)-nad prostorima tabela i tabelama
IS (Intent share), IX (Intent exclusive), SIX (Share with intent exclusive), S (Share),U (Update), E (Exclusive)
IS: vlasnik moze da cita podatke u tabel, prostoru tabela ili particiji ali ne da menja. Ima S katanac na stranama i
redovima kojima pristupa. Istodobni procesi mogu čitati i mijenjati podatke.
IX: vlasnik i istodobni procesi mogu citati i menjati podatke u tabeli, prostoru tabela ili particiji. Ima X katanac .
SIX: je zapravo hibrid stanje. Iz perspektive čitanje je gross lock i od pisanja je intent lock.
Vlasnik brava može čitati i mijenjati podatke u tablici, prostorima tabela ili particiji.
Istodobni procesi mogu čitati podatke u tablici, prostorima tabela ili particiju, ali ne ga promijeniti.
Tek kada je vlasnik lock-a mijenja podatke dobija X lock na stranici ili reda.
S: Vlasnik kljuca i istodobni procesimogu da citaju, ali ne da menjaju podatke u tabeli ili prostorima tabela. Nije
potreban S kljuc na strani ili redu.
U: Vlasnik kljuca moze da cita, ali ne d amenja zakljucane podatke. Ali moze da unapredi U u X i onda menja
podatke. Smanjuje sansu za deadlock kada vlasnik kljuca cita podatke da odluci da li da ih menja.
X: Vlasnik moze da cita i menja podatke u tabeli ili prostorima tabela. Samo istodobni procesi mogu da pristupe
tabeli ili prostorima tabela.
Nivoi izolacije:
CURSOR STABILITY(CS)
Nakon sto korisnik1 uradi FETCH, ako slog ili strana koju zeli vec ima X katanac, DB2 ceka dok ne dobije S
katanac. S katanac nad tim slogom ili stranom ce se otpustiti kod FETCH uzrokuja DB2 da predje na sledeci
slog ili stranu. Ako korisnik izda FETCH i slog ili stranica koje trazi nemaju X katanac, onda DB2 izbjegava
stavljanje S katanca. Ovo smanjuje uticaj korisnika na buduca azuriranja, ali ako on ponovi svoj zahtjev, moze
dobiti razlicit rezultat. Ukoliko u deklaraciji kursora stavimo FOR UPDATE OF, onda DB2 umijesto S uzima U
katanac. On se isto otpusta po prelasku u novi slog ili stranu.
PEPETABLE READ(RR)
Kjuc S nad slogovima ili stranama se drzi nad svim slogovima kojima smo pristupili do sledeceg COMMIT-a.
READ STABILITY(RS)
Kljuc nad slogom ili stranom se drzi samo za one slogove ili strane koji ispunjavaju uslov upita najkasnije do
sledeceg COMMIT-a. RS nudi vecu konkurentnost od RR jer iako drugi ne mogu da mijenjaju slogove koji
ispunjavaju uslove aplikacije, mogu da ubacuju nove i azuriraju slogove koji ne zadovoljavaju uslove
aplikacije. U RS mogu da se dese fantomi.
UNCOMMITED READ(UR)
Korisnik ne zahtjeva katance nad stranama ili slogovima. Prednosti-azuriranje ne zahtjeva od korisnika da
ceka da postavi katanac i korisnik ne usporava nikog drugog. Problemi-korisnik moze da cita nepotvrdjene
podatke, slog moze da se broji vise puta.
MOZE: ALLOCATE/DEALLOCATE
USE/DEALLOCATE
USE/COMMIT
NE MOZE: ALLOCATE/COMMIT
U katanac FETCH ... FOR UPDATE
X katanac INSERT, UPDATE i DELETE
Trajanje katanaca nad TABELOM, PROSTOROM TABELA I PARTICIJAMA:
Postoje parametri koji kazu koliko dugo traje neki kljuc.
-ACQUIRE -ALLOCATE-trazim da mi se svi potrebni kljucevi dodijele na pocetku aplikacije. Ako ih ne dobijem
odmah - GRESKA
-USE-taj kljuc mi se dodijeljuje kad naidjem na naredbu gdje mi on treba
-RELEASE -DEALLOCATE- kada se zavrsi program. Ako koristimo ALLOCATE moramo da oslobadjamo sa
DEALLOCATE. Svrha je da program kad krene dobije max svega sto mu treba i to drzi do kraja. Nista
ne moze da ga prekine. To je najmanji nivo konkurentnosti. Ovo je kao da smo sami na sistemu.
-COMMIT
USE/COMMIT je najveci nivo konkurentnosti.Ne smije da se koristi kombinacija ALLOCATE/ COMMIT.
LOCKMAX je opcija u CREATE/ALTER TABLE SPACE. Odredjuje max broj zakljucanih slogova i strana koje aplikacija
moze da drzi u prostoru tabele. Ako aplikacija zahtjeva vise od tog broja dolazi do ekskalacije kljuceva.
TIMEOUT-Proces je suspendovan kada trazi kljuc koji je vec zauzet od strane nekog drugog procesa i ne moze da
bude deljen. Suspendovani privremeno zaustavi izvrsavanje. Nastavi sa radom kada:
-Svi procesi koji su u konfliktu oslobode kljuc ili
-Proces koji zahteva istekne vreme i mora d ase nosi sa greskom. DB2 resava to sa dve poruke u konzoli i
vraca SQLCODE -911 ili -913 procesu.
DEADLOCK
1. User 1 updates table M, and acquires an exclusive lock for page A, which contains
record 000100.
2. User 2 updates table N, and acquires an exclusive lock for page B, which contains
record 000030.
3. User 1 then attempts to SELECT from page B of table N, while still holding the lock on
page A of table M. The job is suspended, because user 2 is holding an exclusive lock on
page B.
4. User 2 then attempts to SELECT from page A of table, M while still holding the lock on
page B of table N. The job is suspended, because user 1 is holding an exclusive lock on
page A.
Situacija je deadlock. Posle vremena, DB2 can roll back trenutnu jedinicu posla za jednu od procesa ili zahteva proces
da se zavrsi. To oslobadja kljuceve i dopusta preostalim procesima da nastave sa radom.
SMANJENJE DEADLOCK-a
Jedan od načina da se smanji vjerojatnost zastoja je pristup podacima na dosljedan cilju.
U gornjem primjeru, oba korisnika treba pristupiti tablice u istom redoslijedu, ako je moguće,
to jest, tabela M slijede tabelu N. Prvi korisniku pristup tabeli M moglo odgoditi drugi
Korisnik ali dvije korisnici ne mogu zastoja.
INDEKSI
Indeksi su struktura podataka za efikasno pronalazenje slogova na nekom kljucu.
Javili su se 60-tih i oni su u sustini pokazivaci. Takodje olaksavaju skeniranje cijelih relacija ako podaci nisu smesteni
na fizicki uzastopnim blokovima. Kako najjednostavnije odrediti gdje je slog? Jedan nacin je da krenemo slog po slog,
redom. Prvi problem je bespotrebno citanje, a drugi sto moramo da idemo do kraja tabele da vidimo da nema jos
takvih slogova.
Imamo sekvencijalnu datoteku koja sadrzi neke slogove. Pp da u jednom bloku u memoriji imamo 2 sloga. Sta ako
hocemo da procitamo 50? Krenemo redom. Nadjemo 50 i ako su uredjeni kljucevi, to je to.
Alternativa-imamo tabelu sa kljucevima i jos dodatno ona ima pokazivac na mesto gdje je taj kljuc u tabeli. Time
dobijamo manje za pretrazivanje. To su indeksi.
Gusti indeksi (dense)-svakom kljucu odgovara pokazivac:
Kluc u indeksu za svaku vrednost u fajlu.
10
10 20
30
50 30
70 40
50
90
60
110
130
70
150
80
90
100
Primer: Trazimo 40, on nadje 50. Sad se vrati na 30 i krene odatle. Dobitak je manje prostora za indekse, ali mora da
bude sortirano po kljucu.
10 10
10
30 20
90
170 50
70 30
250
40
330 90
110 50
410
130 60
490
570 150
70
170 80
190
210 90
230 100
Pojmovi:
-SEARCH KEY(razlicit od PRIMARY KEY)
-PRIMARY INDEX -primarni indeks-definise se nad atributima koji su primarni kljucevi. Sadrzi informaciju gdje
se koji blok fizicki nalazi
SECONDARY INDEKS -sekundarni indeks-definisemo drugi indeks. Recimo da hocemo da pretrazujemo po imenu i
prezimenu. Nad njima pravimo sekundarni indeks i on nam kaze npr. Petar Petrovic u tabeli.
-DENSE INDEKS -gusti indeks
-SPARSE INDEKS -rijetki indeks
-MULTI LEVEL INDEKS
DUPLIRANI KLJUCEVI
Gusti indeksi- jedan nacin Gusti indeksi-drugi nacin
10 10
10 10 10
10
10 10
20 10
20
20
20 30
10
30 20 40
20
30 30
30
30 20
30 30
40 30
50 30
45
40
45
Prvi nacin (svako ima svoj pokazivac)
Drugi nacin (svi isti su uredjeni i imamo pokazivac samo na njihov pocetak)
DUPLIRANI KLJUCEVI
Prvi nacin (imamo pokazivac na pocetak svakog bloka. Sta ako nam treba 20 ili 30? Moramo da idemo i gore i dole.
NE VALJA ?)
Drugi nacin (U indeksu stavimo pokazivac na blok, ali u inddeksu kao kljuc stavljamo noovu vrednost u bloku)
Zakljucak-kod primarnog indeksa indeks pokazuje na prvu instancu svake vrednosti.
a a
a
a
:
:
b
OPERACIJE AZURIRANJA NAD INDEKSIMA
Retki indeksi-BRISANJE
10 10
30 20
50
70 30
40
90
110 50
130 60
150
70
80
10 10
30 20
40
50 30
70 40
Sta ako brisemo slog 30 na koji pokazuje indeks? Trebalo bi da zamenimo pokazivac u indeksu.
10 10
30 20
40
50 30
70 40
50
60
70
80
Gusti indeksi-BRISANJE
10 10
20 20
30
40 30
40
50
60 50
70 60
80
70
80
Retki indeksi-UNOS
10 10
30 20
40
60 30
40
50
60
Unosimo 34. Imamo mesta tacno gdje nam treba, pa samo smestimo.
10 10
30 20
40
60 30
34
40
50
Ako unosimo 25...
10 10
30 20
40
60 30
40
50
25
Sta ako nemamo prostora da pomerimo? Ako pokusamo momentalnu reorganizaciju to u praksi ne valja (velike
tabele). Bolje da ubacimo novi blok pa onda na kraju sa jednom komandom reorganizujemo tabelu.
Gusti indeksi-UNOS
Slicno kao kod retkih, samo su znatno skuplji za odrzavanje.
SEKUNDARNI INDEKSI
Preporuka je da se gusti indeksi koriste za sekundarne indekse jer svaki slog ima svoj pokazivac koji moze da
pokazuje bilo gdje, tj slog moze da bude bilo gdje. Ovdje se rijetki indeksi koriste na visem nivou
10 30
10
50 50
20
90
30
... 20
40
70
50
60 80
70 40
...
100
10
90
60
Kod sekundarnih indeksa na najnizem nivou su gusti indeksi, dok su na drugim nivoima retki indeksi. Takodje
pokazivaci pokazuju na slog a ne na blok.
DUPLIRANE VREDNOSTI I SEKUNDARNI INDEKSI:
10 20
10 10
10
20 20
40
20
30 10
40 40
40
10
40 40
40
... 30
40
10 20
20 10
30
40 20
40
50
60 10
... 40
10
40
30
40
NAME: primary
EMP(NAME, DEPT, FLOOR,...)
DEPT: secondary
FLOOR: secondary
Upit: GET EMPLOYEES IN (TOY DEPT) AND (2nd FLOOR)
DEPT INDEKS EMP FLOOR INDEKS
TOY 2nd
Presek TOYBUCKET i 2nd FLOOR BUCKET da bi dobili odgovarajuciset EMP-a. Ova ideja se koristi u pretrazivanju
teksta-tekst information retrieval.
The cat is fat....
cat
...was raining cats and dogs...
dog
...Frido the dog...
-KONVENCIONALNI INDEKSI
-osnovne ideje-rijetki, gusti, uvise nivoa
-duple vrijednosti
-DELETE /INSERT
-sekundarni indeksi
-PREDNOSTI-jednostavni, indeks je sekvencionalna datoteka, dobar za pretrazivace
-MANE-skupo unosenje i moze da se izgubi sekvencijalnost balansiranost
B drveta
B je od balansirano. B drveta su struktura preko koje se realizuju indeksi. Nisu sekvencijalna, balansirana su.(do
slogova se dolazi putevima iste duzine). Dobra osobina im je da se zbog dizajna struktura sami odrzavaju. B drveta su
zgodna za upis i brisanje podataka. Ovde se u cvorovima nalaze blokovi podataka koji mogu da imaju pokazivace.
Blok se sastoji od najvise n kljuceva, n+1 pokazivaca, a najmanje pola od ovoga.
Primer b drveta:
N=3 => u primeru blok ima najvise 3 kljuca i 4 pokazivaca.
100
3 5 11 30 35 100 101 110 120 130 150 156 179 180 200
Listovi
STRUKTURA-na pocetku je root, sve levo je manje od njega, sve desno je vece ili jednako od njega (kao u gornjem
primeru). Ovako izgleda globalna struktura. Moguci su dodatci. Mozemo da dodajemo pokazivace u levo( []-> ) i u
desno ( []-> ). Cvor koji je list sadrzi pokazivace na slogove i jednu „kucicu“ koja je pokazivac na sledeci list.
Nije dobro da napravimo cvorove koji su previse prazni. Broj pokazivaca u upotrebi je:
-za unutrasnje cvorove najmanje [(n+1)/2] ka deci cvorovima
-za listove najmanje [(n+1)/2] ka slogovima/blokovima
Node<=>cvor
Seanster.com/BplusTree/BplusTree.html
Levo su manji!
Desno su veci!
N=3 full node min node
Cvor 120 150 180 30
List 3 5 11 30 35
PRAVILA ZA B+ DRVETA
1. Svi listovi su na istom najnizem nivou (balansirajuce drvo)
2. Pokazivaci u listovima pokazuju na slogove, osim „seqence pointer“ (oni ulevo)
3. Broj pokazivaca na B+ i kljuceva za B+ drveta
UNOS B+ DRVETA
a) najjednostavniji slucaj- list nije pun=> samo unesemo(kljuc, pokazivac na slog)
unosimo kljuc 32
n=3 100
30
3 5 11
30 31 32
100
7 30
3 5 3 5 7 11 30 31
Gore smo nismo mogli samo da izbacimo 30 jer on kaze da je levo od njega sve manje=> 7 mora levo, a desno
sve vece.
Razlika izmedju B+ i B drveta: Sustina je da li imaju samo podatke u listovima ili u cvorovima. B+ nema podatke u
cvorovima’.
Svi donji blokovi treba da budu povezani.
100 160
BRISANJE IZ B+ DRVETA
a) Najjednostavniji slucaj-no underflow-izbrisemo iz bloka neki podatak tako da broj preostalih podataka u
bloku bude manji od minimalnog. Ovo je slucaj kada se to ne desava , pa samo brisemo bez bilo kakvih
dodatnih promena.
b) Slucaj kada imamo underflow a sused od koga pozajmljujemo nije previse prazan.
N=4 => imamo broj kljuceva u listu [(n+1)/2]=[(n+1)/2]=[5/2]=2
Brisemo 50:
Primer 42
=> zasto pozajmljujemo 35 od bas tog suseda? Pozajmljujemo zato sto je levo. Od desnog ne uzimamo jer ne
znamo sta se tamo nalazi. Vece je, moze da bude bilo sta. Zbog ove pozajmice moramo i gornji cvor da
menjamo
Slika 43
BRISANJE B+ DRVETA U PRAKSI
Cesto spajanje cvorova u praksi nije implementirano. Razlog je sto je komplikovano i nije vredno toga. Takodje kasniji
unosi mogu da vrate cvor na njegovu minimalnu velicinu. Kompromis je da probamo da rasporedimo kljuceve medju
susedima, a ako to nije moguce, da ih ostavimo tu gdje su.
Primer : dat je niz brojeva. Konstruisati B drvo nad njim. 1,10,4,35,7,3, n=3
Dve varijante:
-sortiramo pa tako radimo drvo
-jedan po jedan se unose
1. 1,10,4,35,7,3
1,3,4,7,10,35
N=3
Slika 44
4.
5.
OPTIMIZACIJA
UVOD:
Imamo upit, mozemo da ga napisemo na vise nacina. Nije svaki nacin podjednako efikasan.
Problem—kako izabrati efikasnu strategiju izracunavanja postavljenog upita?
Optimizacija upita predstavlja i izazov i mogucnost u relacionim bazama podataka.
IZAZOV: jer je potrebna radi dostizanja prihvatljivih performansi sistema.
MOGUCNOST: jer ilustruje prednost relacionog pristupa (u odnosu na nerelacione). Za relacione izraze koji su na
dovoljno visokom semantickom nivouoptimizacija se izvodi na samom pocettku obrade(relacije su matematicki
zasnovane, pa mozemo da definisemo pravila na osnovu kojih mozemo da odredimo efikasnost).
Optimizacija se vrsi automatski, bez intervencije korisnika. Program za optimizaciju ce bolje uraditi optimizaciju od
korisnika rel. Sistema.
STRATEGIJE IZRACUNAVANJA:
1. DIREKTNA:
-izvrsiti spajanje DOSIJE i ISPIT(preko indeks)-cita se 10 000 ispita za svakog od 100 studenata. Medjurezultat
se sastoji od 10000 spojenih torki koje se pisu natrag na disk(jer memorija nije dovoljno velika da ih primi)
-vrsi se restauracija rezultata iz prethodnog koraka na torke koje sadrze 101-cita se ponovo 10 000 torki sa
diska. Rezultat je 50 torki koje mogu da ostanu u memoriji.
-projektuje se rezultat iz prethodnog koraka preko IME-najvise 50 torki koje ostaju u memoriji.
2. SA OPTIMIZACIJOM:
-izvrsiti restrikciju na torke koje sadrze 101-cita se 10 000 ispit. Medjurezultat se sastoji od 50 torki koje
ostaju u memoriji.
-spojiti rezultate sa prethodnog koraka sa DOSIJE (preko indeks)-cita se 100 studenata , dobijeni rezultat ima
50 torki koje ostaju u memoriji.
-projektuju se rezultati iz prethodnog koraka preko IME-najvise 50 torki koje ostaju u memoriji.
Prvi pristup ima ukupno 1 030 000 U/I torki, dok drugi ima samo 10 100. Razlika u duzini izvrsavanja je ocigledna-
drugi pristup daje oko 100 puta brze izracunavanje. Moguca se i dalja poboljsanja, npr, ako se atributi indeksiraju
(npr id_predmeta).
Staticki SQL je brzi od dinamickog jer samo jednom predje, a dinamicki mora svaki put ponovo.
FAZE OBRADE UPITA:
U obradi upita se mogu identifikovati 4 osnovne faze:
-Prevodjenje upita na interni zapis
-Konverzija upita u kanonickiu oblik
-Izbor kandidata za procedure niskog nivoa
-Formiranje planova upita i izbor najjeftinije
Source query
Optimized plan
Query plan
DATABASE
result
TRANSFORMACIJA IZRAZA:
Restrikcija i projekcija
1. (A where restrikcija1 )where restrikcija2
Je ekvivalentno sa
A where restrikcija1 and restrikcija2
2. Kod niza projekcija nad istom relacijom ignorisu se sve sem poslednje
(A{atribu1t}) {atribut2} <=> A{atribut2}
3. Restrikcija projekcije se moze transformisati u projekciju restrikcija
(A{atribut}) where restrikcija <=> (A where restrikcija){atribut}
Primedba: U opstem slucaju je dobro primeniti restrikciju pre projekcije jer se time smanjuje velicina ulaza u
projekciju cime se smanjuje velicina podataka koje treba sortirati radi eliminisanja dupolikata.
Distribucija:
-za unarni operator f se kaze da je distributivan preko binarnog operatora o akko f(AoB)= f(A) o f(B)
-restrikcija je distributivna preko unije presjeka i razlike, preko spajanja akko se uslov restrikcije sastoji od
najvise dva odvojena uslova restrikcije koja su spojena konjukcijom (AND), jedan za svaki operand u spajanju.
-projekcija je distributivna
-preko unije i presjeka
(A UNION B){C}=A{C} UNION B{C}
(A INTERSECT B){C}= A{C} INTERSECT B{C}
-ne i preko razlike
-preko spajanja
(A JOIN B){C}=(A{AC} JOIN B{BC})
Akko
–AC je unija
a)atributa koji su zajednicki za A i B
b)onih atributa c koji se pojavljuju samo u A
-BC je unija
a)atributa koji su zajednicki za A i B
b)onih atributa c koji se pojavljuju samo u B
Komutativnost:
-binarni operator o je komutativan akko vazi AoB=BoA
-unija, presek i spajanje su komutativni. Razlika i deljenje nisu.
-posledica-ako upit ukljucuje spajanje dvije relacije A i B komutacija omogucuje da se „manja“ relacija uzima
za spoljasnju
Idempotencija:
-binarni operator o je idempotentan akko vazi AoA=A
-unija, presek i spajanje su idempotentni. Razlika i deljenje nisu.
-osobina idempotencije moze da bude korisna u transformaciji izraza
Logicki izrazi:
-npr. Izraz A> B AND B>A se moze, po osnovu tranzitivnosti operatora>, transformisati u izraz A>B AND B>3
AND A>3. Transformacija je korisna jer omogucuje dodatnu restrikciju na A prije izvodjenja spajanja(sa >).
Ideja izvodjenja ranije restrikcije je pogodna i primjenjuje je vise komercijalnih produkata.
Izraz A>B OR (C=D AND E<F) se moze transformisati u
(A>B OR C=D) AND (A>B OR E<F)
-Svaki log izraz se moze transformisati u ekvivalentan izraz u konjuktivno normalnoj formi(KNF)
KNF je oblika c1 AND c2 AND...AND cn, pri cemu ni jedan od izraza ci ne sadrzi konjukciju(and).
Prednost KNF-a je sto je izraz tacan ako su svi konjukti tacni, a netacan ako je bar jedan od njh netacan. Kako
je konjukcija komutativnaoptimizacija moze da bira redoslijed izvrsavanja konjukta od jednostavnijih ka
slozenim. Knf je pogodan kod sistema sa paralelnom obradom.
Semanticke transformacije:
-u izrazu (SP JOIN S){PRBR} spajanje se vrsi uparivanjem spoljasnjeg kljuca(sa jedne strane) i kandidata za
kljuc sa druge strane.odatle slijedi da se svaka torka iz SP spaja sa nekom torkom iz S i da zbog toga svaka
torka iz SP daje neko PRBR u krajnjem rezultatu. Odavde se vidi da nema potrebe za spajanjem i da izraz
moze biti uproscen u SP{PRBR}.
-ova transformacija, iako je zancajna, rijetko se srece kod komercijalnih sistema zbog slozenosti.
Korisnik DB2 UDB na raspolaganju ima Visual Explain-alat za procjenu sa grafickim interfejsom. Procedura koriscenja
je:
-u DB2 CLP uci u direktorijum ..\DB2\SQLLIB\MISC
-DB2 CONNECT TO ime_baze_za_koju_zelite_procenu
-DB2 –t –f EXPLAIN.DDL
-u DB2 control center-u odabrati bazu, desni klik i opcija EXPLAIN SQL
-unijeti upit za koji se zeli procijena
TABLE SCAN je citanje red po red – tu se trazi sansa za optimizaciju (kod dijagama kod upita).
NOVO
U data studiju idemo desni klik na upit pa FORMAT SQL-da formatira(lijepo napise) upit.
START TUNING-postoji program koji provjerava nas upit i pravi semu koja se nalazi u ovim paketima. To upisuje u
posebne tabele u bazi. Dobijamo poruku da prvi put to ne postoji u bazi. Treba da izvrsimo EXPLAIN.DDL, pa
ponovimo komandu START TUNING.
EXPLAIN opcije
-nivo izolacije kursora
-ko odrzava baze
-nivo optimizacije
-tekuci put
-CURRENT DEGREE-trenutni nivo paralelizacije
-statistika-da li da skuplja ili ne
Sad idemo na SELECT WHAT TO ROW pa SELECT ALL pa OK-izbaci nam izvjestaj.
Moze da se desi da tabele nemaju statistiku pa na RUNSTATS pa ponovimo TUNING
INVOKE/SINGLE QUERY/SET ADVISOR OPTIONS -?
Kako da napisemo upite da bi bili efikasniji:
-SELECT * ne stavljati ako nam ne trebaju sve kolone(mogu biti jako velike)
-voditi racuna o velicini podatak(short u short)
-ne ostavljati sistemu da radi implicitnu konverziju
-ako imamo nesto sto se rijesava podupitom, efikasnije je da to uradimo preko spajanja(biramo spajanje)
-UNION ALL ne zahtjeva sortiranje da eliminise duple slogove. Ako ti duplikati ne uticu na rezultat treba koristiti
UNION ALL(UNION radi i sortiranje)
-Koristi najmanji moguci nivo izolacije
-naglasi FOR READ ONLY pristup
-navedi for UPDATE OF- vezano za kursore. Ukoliko prilikom prevodjenja navedemo opciju da ide po DB2 onda
mozemo da azuriramo samo one kolone koje su navedene u for update of, a ukoliko stavimo da bude po standardu-
sve kolone
-izbjegavati DISTINCT ili ORDER BY ako nisu neophodni
-za gledanje da li slogovi postoje izbjegavati SELECT COUNT(*) FROM
-kad spajamo tabele provjeriti po cemu spajamo(treba po kljucevima)
-koristiti FETCH FIRST kROWS ONLY(ako zelimo da vidimo kako nesto izgleda, a ne SELECT *)
-koristiti WITH sa nivoom izolacije
Da bi transakciija procitala element baze, taj element mora da bude u baferu glavne memorije. Kada je u baferu,
onda transakcija moze da ga procita i smijesti svoj adresni prostor. Kada transakcija pise vrijednost u bazu redoslijed
je obrnut. Notacija koja ovo opisuje:
1. INPUT (X)-kopira blok sa diska u bafer
2. READ(X,t)- kopira element baze X u lokalnu promijenljivu t transakcije. Ako blok u kome se nalazi X nije u
baferu prvo se izvrsava INPUT(X)
3. WRITE(X, t)-kopira vrijednost lok. Promijenljive t u element baze X u baferu. Ako X nije u baferu onda se prvo
izvrsava INPUT(X)
4. OUTPUT(X)-kopira blok koji sadrzi X iz bafera na disk. Da bi logovanje radilo pisanje X-a mora da bude
atomsko.
UNDO LOGGING:
Log je fajl koji govori sta je neka transakcija uradila.
UNDO LOGGING vrsi oporavak baze tako sto ponistava efekte transakcije koje se nisu zavrsile prije pada(greske).
Dok se transakcija izvrsava log manager je zaduzen da u log smjesti svaki vazan dogadjaj. U log se upisuje sledece:
1. <START T> oznacava da je transakcija pocela
2. <COMMIT T> transakcije t se zavrsila uspijesno i nece vise mijenjati elemente baze. Sve promjene koje je
napravila t treba da se pojave na disku. Medjutim, posto ne mozemo da kontrolisemo kada ce buffer
manager odluciti da kopira blok iz memorije na disk, ne mozemo biti sigurni da su promijene zaista na disku
kada vidimo <COMMIT T>. Ako insistiramo da promjene budu na disku to mora.... (str 852)
3. <ABORT T> transakcija T nije zavrsena uspjesno. Njene promjene ne smiju da budu na disku. Posao je
transaction manager-a da te promijenje nikad ne budu na disku.
<T,X,v> -znacenje ovog zapisa je transakcija T je promijenila element baze X i njegova stara vrijednost je v.
Undo log ne cuva novu vrijednost elementa baze vec staru.
UNDO LOGGING PRAVILA:
U1. Ako transakcija T mijenja element baze X onda log zapis <T,X,v> mora biti napisan na disk prije nego sto se nova
vrijednost X-a zapise na disk.
U2. Ako transakcija posalje COMMIT, onda njen zapis COMMIT-a u logu mora da bude napisan na disku nakom sto se
na disk zapisu svi elementi baze koje je mijenjala ta transkacija.
Kada sumiramo ova pravila dobijamo da se podaci vezani sa transakcijom zapisuju na disk u sledecem redoslijedu:
1. Lof zapisi o mijenjanim elementima
2. Mijenjani elemeti baze
3. Zapis COMMIT-a u log
Da bi poslao log zapise na disk log manager koristi FLUSH –LOG komandu koja kaze buffer manager-u da na disk
kopira sve log blokove kaji nisu do tada kopirani na disk, ili mijenjani od kad su poslednji put kreirani.
CHECKPOINTING
Oporavak zahtijeva da se ispita cijeli log. Kod UNDO LOGGINGA tada transakcija ima zapisano COMMIT u logu na
disku njeni unosi u log nam vise nisu potrebni tokom oporavka. Ako smanjimo log posto se jedna transakcija
uspijesno zavrsila unosi u log drugih transakcija mogu biri izgubljeni. Najjednostavnije rijesenje je periodicno
postavljanje checkpoint-a u log. Kod jednostavnog checkpoint-a:
1. Ne prihvatamo nove transakcije
2. Cekamo da sve aktivne transakcije posalju COMMIT ili ABORT i to upisemo u log
3. Snimimo log na disk
4. U log upisemo <CKPT> i ponovo snimimo log na disk
5. Nastavimo da prihvatamo nove transakcije
NONQUIESCENT CHECKPOINTING
Problem kod prethodne tehnike za checkpoint je sto sistem prestaje sa radom dok se pravi checkpoint. Zato se
koristi tehnika nonquiescent checkpointing koja dozvoljava novim transakcijama da udju u sistem dok se radi
checkpoint. Koraci:
1. U log upisi <START CKPT(T1,....Tk)> i snimi log na disk. T1,...Tk su sve jos uvijek aktivne transakcije.
2. Sacekaj dok sve T1,...Tk ne posalju COMMIT ili ABORT, ali nemoj da zabranjujes ostalim transakcijama da
pocnu.
3. Kada su sve T1,...Tk zavrsene upisi u log<END SKPT> i snimi log na disk
Ovdje je oporavak sledeci. Pretrazujemo log od kraja i trazimo sve nezavrsene transakcije i vracamo stare vrijednosti
u bazi elemenata koje su mijenjane. Imamo 2 slucaja:
1. Ako u logu prvo naidjemo na <END CKPT> tada zanmo da su sve nezavrsene transakcije pocele poslije
prethodnog <START CKPT(T1,...,Tk)>. Zato idemo do sledeceg <START CKPT> i stajemo. Prethodni log moze
sada biti obrisan.
2. Ako prvo naidjemo na <START CKPT(T1,...,Tk)> onda se greska desila za vrijeme checkpointa. Medjutim
jedine nezavrsene transakcije su one na koje smo naisli prije START CKPT i onr od T1,...,Tk koje se nisu
zavrsile. Sada nema potrebe da pretrazujemo dalje od pocetka najranije nezavrsene transakcije.
REDO LOGGING
UNDO LOGGING ima potencijalni problem da ne mozemo da commitujemo transakciju baz da prvo zapisemo sve
njene promjene na disk. Ponekad mozemo da smanjimo broj U/I operacija ako dozvolimo promjenama baze da
ostanu u glavnoj memoriji neko vrijeme. Dok god imamo log za oporavak u slucjau greske, ovaj pristup je bezbjedan.
Glavne razlike izmedju UNDO i REDO logginga su:
1. undo logging ponistava efekte nezavrsenih transakcija i ignorise one uspijesno zavrsene tokom oporavka;
redo logging ignorise nezavrsene i ponavlja promijene koje su uradile COMMIT ovane transakcije.
2. Undo logging zahtjeva da zapisemo promjene u bazi na disku prije nego sto COMMIT iz njega zapisemo na
disk; redo logging zahtjeva da prvo zapisemo COMMIT iz loga na disk prije nego sto ostale promjene u bazi
dospiju na disk.
3. Kod undo logginga cuvamo stare vrijednosti iz baze; kod redo cuvamo neke vrijednosti
Kada se koristi redo logging redoslijed zapisa podataka vezanih za transakciju na disk je;
1. Log zapisi koji govore o promjenama elemenata baze
2. Zapis COMMIT-a u logu
3. Sami promjenjeni elementi baze
OPORAVAK KORISTENJEM REDO LOGGING-a
Vazna posledica redo pravila je R1-ukoliko u logu nije uklonjen <COMMIT T> znamo da promjene nad bazom od
strane T nisu zapisane na disku, tako da T mozemo da posmatramo kao da se nikad nije ni dogodila. Problem su one
koje imaju COMMIT jer ne znamo koja je stigla da zapise promjene na disk. Zbog toga ovdje cuvamo nove vrijednosti.
Postupak oporavka kod redo logginga je:
1. Identifikuj transakcije koje imaju COMMIT
2. Pretrazi log unaprijed krenuvsi od pocetka. Za svaki zapis <T,X,v>
-ako T nije zavrsena transakcija, ne radi nista
-ako je T COMMIT-ovana, zapisi vrijednost v za element baze X
3. Za svaku nezavrsenu transakciju T u log zapisi <ABORT T> i uradi flush log.
Posto transakcije mogu da budu aktivne kroz vise checkpoint-a zgodno je da u < START CKPT (T1,...Tk)> ne cuvamo
samo njihova imena, vec i pokazivace na mijesto u log-u gdje su startovale sa izvrsavanjem. Time znamo da je ranije
dijelove loga bezbijedno da obrisemo.
UNDO/REDO LOGGING
Undo logging zahtjeva da podaci budu zapisani na disk odmah po zavrsetku transakcije, sto moze dovesti do
povecanja broja U/I operacija.
Redo logging zahtjeva da drzimo sve modifikovane blokove u baferu dok transakcija ne zavrsi i log se ne zapise na
disk, sto mozwe dovesti do povecanja broja bafera potrebnih za transakciju.
I undo i redo logovi mogu da stave kontradiktorne zahtjeve na upravljanje baferima za vrijeme checkpoint-a, ukoliko
elementi baze nisu cijeli blokovi. Na primjer:ako bafer sadrzi jedan element baze A koja je promijenila transakciju
koja jos nije odradila COMMIT. Sada zbog A moramo da kopiramo blok na disk, ali zbog B i pravila R!1, to ne
smijemo.
UNDO/REDO PRAVILA
<T,X,v,w> transakcija T mijenja vrijednost elementa baze X, njegova stara vrijednost je v, a nova vrijednost je w
Pravilo:
UR1: prije mijenjanja elementa beze X na disku, zbog promijena koje je napravila transakcija T neophodno je da se
u log upise <T,X,v,w> i to snimi na disk.
UNDO/REDO OPORAVAK
1. Ponovi (REDO)- sve transakcije koje su zavrsile COMMIT –om u redoslijedu najranija-poslednja
2. Ponisti (UNDO)-sve nezavrsene transakcije u redoslijedu poslednja-prva
ARHIVA
ARIVIRANJE-odrzavanja kopije baze koja je razdvojena od same baze. Ukoliko je moguce da ugasimo bazu na neko
vrijeme mogli bismo da napravimo kopiju za backup na nekom drugom mjestu. Da bismo vratili bazu tokom
oporavka mozemo da koristimo log, a da bismo sprijecili da se izgubi mi njega mozemo da presnimimo cim se kreira
na neko udaljeno mjesto.posto je pisanje veliki proces pokusavamo da izbjegnemo kopiranje cijele baze, u svakom
arhivskom koraku tako da ima dva nivoa arhiviranja:
1. FUL DUMP- gdje se kopira cijela baza
2. UNCREMENTAL DUMP- gdje se kopiraju samo oni dijelovi baze koji su promijenjeni poslije prethodnog
uzimanja kopije baze
NONQUIESCENT ARCHIVING
Problem sa jednostavnim nacinom arhiviranja je da vecina baza ne moze da bude iskljucena period vremena koji je
potreban da se napravi njihova kopija , ovo omogucava da pokusa da napravi kopiju baze koja je postojana kada je
dump zapoceo, ali nesto u medjuvremenu mogu da se promijene mnogi elementi baze, neophodno je da prilikom
oporavka baze koristimo log gdje su zapisane promjene nastale nad bazom za vrijeme uzimanja kopije.
NONQUIESCENT DUMP kopira elemente baze u fiksiranom redoslijedu i moguce je da se ti elementi promjene od
strane transakcije. Kao rezultat vrijednost elementa koji se kreira moze da bude promjenjen u odnosu na onu koja je
bila kad je dump poceo. Dokle god imamo log dok traje dump ovo nije problem jer se neslaganje vrijednosti
elemenata baze mogu ispraviti koristenjem loga
1. Uzeti bazu iz arhive
-pronaci poslednji full dump i iz njegaa rekonstruisati bazu
-ako je bilo kasnijih incremental dumps, azuriraj bazu sa njima pocevsi od najranijeg
2. Azuriraj bazu koristeci log. Koristi istog oporavka koji odgovara log metodu koji se koristi.
B DRVETA (neki zadatak)
Blok se sastoji od najvise n kljuceva , n+1 pokazivaca, a najmanje pola od ovoga.
Broj pokazivaca u upotrebi je:
-za unutrasnje cvorove najmanje[(n+1)/2] ka dijeci cvorovima
-za listove najmanje [(n+1)/2] ka slogovima/blokovima
Razlika izmedju B+ i B drveta-sustina je da imaju samo podatke u listovima ili u cvorovima. B+ nema podatke u
cvorovima.
B DRVETA primjer:
Pretpostavimo da je velicina bloka 4 kb, kljuca 4 byta i pokazivaca 8 bytes. Koliko pokazivaca i kljuceva staje u cvor?
(4+n+8*(n+1))B<=4096B
=>
N=340 => 340kljuceva i 341 pokazivac staje u cvor
ARIES ALGORITAM
In computer science, Algorithms for Recovery and Isolation Exploiting Semantics, or ARIES is a
recovery algorithm designed to work with a no-force, steal database approach; it is used by IBM DB2, Microsoft SQL
Server and many other database systems.
Write ahead logging: Any change to an object is first recorded in the log, and the log must be written to stable storage
before changes to the object are written to disk.
Repeating history during Redo: On restart after a crash, ARIES retraces the actions of a database before the crash and
brings the system back to the exact state that it was in before the crash. Then it undoes the transactions still active at
crash time.
Logging changes during Undo: Changes made to the database while undoing transactions are logged to ensure such
an action isn't repeated in the event of repeated restarts.