You are on page 1of 11

1.

UVOD
Baze podataka se koriste za prikupljanje, čuvanje i manipulaciju podacima na osnovu kojih se dobijaju nove
informacije u različitim organizacijama, kao što su poslovni sistemi, zdravstvo, školstvo, vladine institucije itd.
Svakodnevno ih koriste pojedinci putem ličnih računara, radne grupe putem mrežnih servera i svi zaposleni putem
aplikacija koje se nalaze u poslovnim sistemima. Bazama podataka takođe pristupaju kupci i drugi udaljeni korisnici
korišćenjem različitih tehnologija kao što su govorni automati, web pretraživači.

Serveri mogu da uključe u svoje baze podataka procedure koje se zovu okidači - trigeri koji upozoravaju o mogućim
vanrednim događajima. Baze podataka predstavljaju viši nivo rada s podacima u odnosu na klasične programske
jezike.

Reč je o tehnologiji koja je nastala s namerom da se uklone slabosti tradicionalne “automatske obrade podataka” iz
60-tih i 70-tih godina 20. veka. Ta tehnologija je osigurala veću produktivnost, kvalitet i pouzdanost u razvoju
aplikacija koje se svode na čuvanje i pretraživanje podataka u računaru.

Proučavanje baza podataka može se sagledavati na dva različita, međusobno povezana aspekta:
 sistemi za upravljanje bazom podataka (SUBP – DBMS, Data Base Management Systems), specifični
softverski sistem koji obezbeđuje osnovne funkcije obrade velike količine podataka: jednostavno
pretraživanje i održavanje podataka, višestruko paralelno (simultano) korišćenje istog skupa podataka,
pouzdanost i sigurnost,
 modeli podataka, odnosno specifične teorije pomoću kojih se definiše i projektuje konkretna baza podataka.

Baze podataka, zajedno sa SUBP, čine sistem baza podataka. U širem smislu, u sistem baza podataka spada i
odgovarajući hardver, svi programski alati koji se nadgrađuju na SUBP i olakšavaju rad sa bazama, kao i raznorodni
korisnici baza podataka (od krajnjih korisnika, preko aplikativnih programera do administratora baza podataka).

U razvoju sistema baza podataka može se uočiti nekoliko generacija SUBP, koje su ili koegzistirale na tržištu ili
smenjivale jedna drugu. Fundamentalna razlika između sistema ovih generacija je razlika u modelu podataka, koja
se u implementaciji odgovarajućih SUBP reflektuje na efikasnost pristupa podacima i obrade podataka, produktivnost
korisnika, funkcionalnost sistema i podršku raznovrsnim aplikacijama. Tako se u prve dve generacije svrstavaju tzv.
mrežni (CODASYL) sistemi i hijerarhijski sistemi, koji su gotovo u potpunosti prevaziđeni, osamdesetih godina
prošlog veka, relacionom tehnologijom kao trećom generacijom SUBP (Relacioni SUBP – RSUBP). Sve tri
generacije namenjene su pre svega poslovnoorijentisanim aplikacijama.

Konkretni sistem za upravljanje bazom podataka se obično zasniva na nekom teorijskom modelu podataka. Istorijski,
SUBP predstavljali su revoluciju u tehnologiji obrade podataka, a modeli podataka revoluciju u metodološkom
pristupu razvoju informacionih sistema.

1/11
2. O BAZAMA PODATAKA
Opšte poznata činjenica je da baza podataka predstavlja organizovanu i međusobno povezan skup podataka. Iz ovog
razloga je moguće i pronači definiciju baze podataka koja kaže da su one organizovani skup informacija 1. Kao što
ste već upoznati, podatak predstavlja neobrađenu činjenicu koja postoji u bilo kom obliku (tekst, slika, zvuk, vido
zapis i slično), a sama za sebe nema nikakvo značenje. Na primer, neki podatak predstavlaj broj 7. Sam po sebi on
ne predstavlja ništa. osim što je po svojoj prirodi prirodni celi broj, ali ako se napiše "Student broj indeksa:1/2020 iz
predmeta: Računarstvo, dobio je ocenu 7", već govorimo o informaciji, da je student sa brojem indeksa 1/2020 iz
predmeta Računarstvo dobio ocenu 7. Drugim rečima niz povezanih podataka (broj indeksa, predmet, dobio, ocena)
čini informaciju, slika 1.

Informacija
Podatak 1 Podatak 2 Podatak 3
1/2020 Računarstvo 7
Slika 1. Podaci i informacija

Baza podataka sadrži tabele u kojima se nalaze zapisi čije su vrednosti raspoređene po kolonama. U literaturi se nalazi
da baza podataka sadrži entitete i atribute. Recimo, entitet je student, a atributi, koji ga opisuju, su broj indeksa, ime,
prezime, smer studija, godina studija, .... Kada se govori o entitetima i atributima misli se pre svega na konceptualni
nivo, i oni se, kasnije, na fizičkom nivou (realizacija) transformišu u tabele (entitet) i kolone (atributi).

U zavisnosti od baze podataka, pored tabela, one mogu da sadrće: poglede (views), okidače (triggers), uskladištene
procedure (stored procedures), funkcije i tako dalje. Neke od baza podataka, poput MS Accessa, ili recimo Visual
FoxPro  a, sadrže: izveštaje (reports), obrasce (forms), module (modules), makore (macros) i/ili programe
(programs). Mogućnosti baza podataka definisane su njihovom namenom i tipom koirsnika koji će ih koristiti. Tako
recimo, MS Access, koji je predviđen za male baze podataka i samostalne (standalone) aplikacije, ima za to
određene specifičnosti.

Po nameni, baze podataka se mogu podeliti na desktop (jedan ili nekoliko korisnika), odnosno klijent-server baze
podataka.

Desktop baze podataka, tabela T1., namenjene su manje zahtevnim korisnicima. Pod time se misli na jednog ili
nekoliko korisnika koji bazu podataka (i aplikaciju koja je prati) koriste za lične potrebe ili za manje projekte. Takve
baze podataka najčešće su besplatne i zbog toga dostupne većem broju korisnika. Međutim, zbog tehničkih
ograničenja dosta su ograničene i neprikladne za profesionalne i obzbiljne projekte.

Tabela 1. Neke desktop baze podataka


Naziv Opis
Potiče iz DOS operativnog sistema (mada postoji i verzuje za Windows OS). Paradox
Paradox
se aktivno koristio u Borland razvojnim alatima Delphi i C++ Builder.
Besplatna baza podatakai jedna od najrasprostranjenijih. Radi na velikom broju uređaja
SQLite
i platformi (Android, iOS i iPhone uređaja, MAC, PC, TV, automobila ...[2])
Radi samo na Windows OS. Podržava paralelni (konkurentni) rad do maksimalno 255
Microsoft Access korisnika. Formiranje aplikacije i izveštaja u samoj bazi podataka. Microsoft Access
aplikacija se plaća.
Primarno namena za iPad, iPhone i Mac okruženja. Podržava i Windows okruženje kao
FileMaker Pro
i integraciju sa Microsoft SQL Server, Oracle i MySQL bazom podataka. [3]

Desktop baze podataka, u stvari, predstavljaju skup međusobno povezanih, ili ne povezanih, samostalnih datoteka
(tabela). Iz ovog razloga postoji niz ograničenja koja potiču, pre svega, od operativnog sistema, kao što je broj
istovremenih konekcija, pa sa time i ograničeni broj korisnika koji mogu simultano (paralelno, istovremeno) da je
koriste. Na primer, Microsoft Access baza podataka dopušta maksimalno 5 istovremenih konekcija ukoliko se nalazi
na Window 7 Home OSu, 10 na Windows 7 Professional, odnosno maksimalnih 255 istovremenih konekcija na
Windows Server OSu.

2/11
Uprkos ovakvim i sličnim ograničenjima, desktop baze podataka i dalje su jako popularne jer zadovoljavaju većinu
potreba manje zahtevnih korisnika. Međutim, u zahtevnijim okruženjima gde je najčešće reč o velikom broju
korisnika, postoje i neki dodatni faktori koje treba uzeti u obzir. Pre svega misli se na performanse, skalabilnost,
dostupnost i sigurnost podatak. Kako ove osobine nisu najzastupljenije u desktop bazama podataka, da bi se one bile
primarne koriste klijent-server baze podataka, tabela T2.

Tabela 2. Primeri klijent-server baza podataka


Naziv Opis
Microsoftova relaciona baza podataka (RDBMS) namenjena korporativnim
Microsoft SQL Server okruženjima. Podržava Transact-SQL, ekstenziju SQL-a. Baza je dostupna u velikom
broju izdanja od kojih je Express izdanje potpuno besplatno..
Vlasništvo korporacije Oracle. RDBMS namenjen najzahtevnijim korisnicima.
Oracle
Podržava PL/SQL proceduralni jezik. Dostupan u besplatnom Express izdanju [4].
Vlasništvo korporacije IBM. Uz standardni SQL jezik DB2 podržava PL/SQL:
DB2
Dostupna je besplatna verzija ExpressC 5].
Open source (besplatna) objektna relaciona baza podataka (ORDBMS). Postgre SQL
Postgre SQL
koristi PL/pgSQL jezik. U potpunosti podržava ACID svojstva [6].

U ovu grupu baza podataka spadaju i mnoge druge poput MySQL, Sybase, Informix i tako dalje. Ove baze
podataka funkcionišu kao mrežni servisi pomoću kojih se odvija klijent-server komunikacija. Obično se
jedan takav servis naziva instanca, a jedan server može odjednom imati više aktivnih instanci.

3/11
3. STANDARDNI UPITNI JEZIK – SQL
SQL (Structured Query Language) je standardni relacioni upitni jezik (ANSI i ISO standard). Njegov tvorac je
Čemberlin (Chamberlin), a nastao je u IBM-ovoj istraživačkoj laboratoriji (IBM Research Laboratory) u San
Hoseu, Kalifornija 1974. godine, dakle na istom mestu gde je Kod 1970. definisao osnovne koncepte relacionog
modela podataka. Jezik se u početku zvao SEQUEL (Structured English Query Language) i predstavljao je
programski interfejs (API) za System R, prototipski sistem za upravljanje bazom podataka (SUBP) koji se razvijao
kao deo istražvačkog projekta pod istim nazivom. Krajem sedamdesetih i početkom osamdesetih godina prošlog veka
javljaju se i prve komercijalne verzije relacionih sistema, sa SQL-om kao upitnim jezikom. Među njima su
najznačajniji Oracle i dva IBM-ova proizvoda: SQL/DS i DB2.

Pojava komercijalnih relacionih sistema uvećala je značaj i ubrzala proces standardizacije relacionog upitnog jezika.
Prva etapa tog procesa završila se 1986. godine usvajanjem SQL-a kao standardnog relacionog upitnog jezika.
Ta prva verzija SQL standarda poznata je pod nazivom SQL-86. Njom su standardizovane osnovne karakteristike
SQL-a kao deklarativnog relacionog upitnog jezika. Međutim, mnoge bitne karakteristike jezika ostale su
nestandardizovane. To je dovelo do revizije standarda koja je usvojena 1989. godine i kojom su standardizovane
karakteristike koje se odnose na očuvanje integriteta baze podataka i povezivanje sa klasičnim programskim
jezicima. Ta verzija SQL standarda poznata je pod nazivom SQL-89. 1992. godine usvojena je sledeća bitna
revizija standarda, poznata pod nazivom SQL-92 ili SQL2, kojom je SQL zaokružen kao programski jezik, a
obim standarda uvećan šest puta u odnosu na polaznu verziju. Pretposlednja revizija SQL standarda usvojena je
1999. godine. Ta verzija SQL standarda poznata je pod nazivom SQL: 1999. U nju su uključeni koncepti objektne
tehnologije, mehanizam trigera, rekurzija i proceduralna proširenja. Poslednja revizija SQL standarda usvojena 2003,
pod nazivom SQL3. U ovoj reviziji otklonjeni su neki propusti, i napravljena su određena unapređenja u odnosu
na prethodnu reviziju. Dodato je i jedno novo poglavlje SQL/XML.

SQL je u stalnom razvoju. Na početku je bio prilično jednostavan, blizak korisniku i u velikoj meri deklarativan
(neproceduralan). Danas se za SQL može reći da je kompleksan, proceduralno/deklarativan jezik. SQL radi sa
tabelama. Tabela se kreira jednom izvršnom naredbom. Odmah po kreiranju tabela je raspoložva za korišćenje. Svi
podaci memorisani su u tabelama i rezultat bilo koje operacije se logički prikazuje u obliku tabele. Neproceduralnost
SQL-a se ogledala u činjenici da se njime definisalo ŠTA se želi, a ne KAKO se dobija: koji podaci se žele, koje
tabele se referenciraju i koji uslovi treba da budu ispunjeni, bez specifikacije procedure za dobijanje željenih
podataka. Da bi se povećala funkcionalnost jezika, u SQL: 1999 standardu, uvedena je proceduralna nadgradnja
SQLa, koju uglavnom čine upravljačke strukture slične upavljačkim strukturama klasičnih programskih jezika.

SQL naredbe su svrstavane u četiri kategorije:


1. naredbe za definisanje (DDL  Data Definition Language),
2. naredbe za manipulisanje (rukovanje) podacima (DML  Data Manipulation Language) i
3. naredbe kontrolne (upravljačke) funkcije (DCL  Data Control Statements).
4. naredbe transakcije (TCL  Transaction Control Language)

Naredbe za definisanj, DDL, omogućuju definisanje objekata baze. Primeri naredbi ove kategorije su:
 CREATE TABLE (kreiranje tabele baze podataka)
 CREATE VIEW (kreiranje virtuelne tabele - "pogleda")
 CREATE INDEX (kreiranje indeksa nad kombinacijom kolona tabele)
 ALTER TABLE (izmena definicije tabele)
 DROP TABLE (izbacivanje tabele iz baze podataka)

SQL 1. Primer DDL upita SSMS alatom SQL server 2018 EXPRESS
--Kreiranje tabele Studenti
CREATE TABLE [dbo].[Studenti](
[BrojIndeksa] [nvarchar](15) NOT NULL,
[Ime] [nvarchar](15) NULL,
[Prezime] [nvarchar](25) NULL,
[Smer] [int] NOT NULL,
[JMBG] [nvarchar](13) NULL,

4/11
[Opstina] [nvarchar](25) NULL,
[Mesto] [nvarchar](25) NULL
) ON [PRIMARY]
GO

--promena kolone(polja) BrojIndeksa


Alter table Studenti
alter column BrojIndeksa nvarchar(8);

--kreiranje indeksa po kolonama Opstina, Mesto


CREATE INDEX OpstinaMesto
ON Studenti(Opstina,Mesto);

Naredbe za manipulisanje (rukovanje) podacima, DML, omogućuju ažuriranje i prikaz podataka iz tabela baze
podataka:
 SELECT (prikaz sadržaja relacione baze podataka)
 UPDATE (izmena vrednosti kolona tabele)
 DELETE (izbacivanje redova tabele)
 INSERT (dodavanje redova postojecoj tabeli)

SQL 2. Primer DML upita SSMS alatom SQL server 2018 EXPRESS
-- Unos smerova Informacione tehnologije (kolona naziv) sa IDSmer = 1
-- Drumski saobracaj IDSmer = 2
-- Masinsko inzenjerstvo IDSmer = 3
insert into Smer(IDSMer, Naziv)
VALUES (1, 'Informacione tehnologije');
insert into Smer(IDSMer, Naziv)
VALUES (2, 'Drumski saobracaj');
insert into Smer(IDSMer, Naziv)
VALUES (3, 'Masinsko inzenjerstvo');
--Unos studenata
insert into Studenti(BrojIndeksa, Ime, Prezime, Opstina, Mesto)
VALUES ('001/2019', 'Marko', 'Markovic', 'Krusevac', 'Krusevac');
insert into Studenti(BrojIndeksa, Ime, Prezime,Opstina, Mesto)
VALUES ('021/2019', 'Jana', 'Janic', 'Obrenovac', 'Obrenovac');
insert into Studenti(BrojIndeksa, Ime, Prezime,Opstina, Mesto)
VALUES ('003/2020', 'Janko', 'Jankovic', 'Trstenik', 'Trstenik');
--Ažuriranje kolone smer sa vrednošću 1 gde ne postoje unete vrednosti (IS
NULL)
update Studenti set Smer = 1 where Smer IS NULL;
--Prikaz sadržaja navedenih kolona (BrojIndeksa,Ime,Prezime,Opstina,Mesto)
--iz tabele Studenti
select BrojIndeksa,Ime,Prezime,Opstina,Mesto From Studenti;
--Brisanje redova tabele koje ispunjavaju uslov Smer=3;
delete from Studenti where Smer=3;

Naredbe za kontrolne (upravljačke) funkcije, DCL, omogućuju oporavak, konkurentnost, sigurnost i


integritet relacione baze podataka:
 GRANT (dodela prava korišcenja sopstvene tabele drugim korisnicima)
 REVOKE (oduzimanje prava korišćenja sopstvene tabele od drugih korisnika)
 COMMIT (prenos dejstava transakcije na bazu podataka)
 ROLLBACK (poništavanje dejstava transakcije)

SQL 3. Primer DCL upita SSMS alatom SQL server 2018 EXPRESS
-- korisniku, Korisnik1, dozvoljeno pristupanje, dodavanje i izmena podataka u
tabeli Studenti

5/11
GRANT SELECT, INSERT, UPDATE
ON Studenti
TO Korisnik1
-- korisniku, Korisnik2, opozvana dozvola brisanja podataka u tabeli Studenti
REVOKE DELETE
ON Studenti
FROM Korisnik2

Upiti transakcije, TCL, se koriste za upravljanje transakcijama. Njima je moguće uspešno potvrditi kraj
transakcije (COMMIT) ili je opozvati (ROLLBACK).

SQL 4. Primer TCL upita SSMS alatom SQL server 2018 EXPRESS
DECLARE @kodGreske INT
BEGIN TRAN
UPDATE Studenti
SET Mesto = 'Bagdala' -- postavi mesto Bagdala
WHERE BrojIndeksa = '001/2019' -- ..gde je broj indeksa 001/2019
SELECT @kodGreske = @@ERROR
IF (@kodGreske <> 0) -- ukoliko se dogodila greška
GOTO PROBLEM
COMMIT TRAN -- spremi sve promjene napravljene transakcijom
PROBLEM:
IF (@kodGreske <> 0) BEGIN
PRINT 'Dogodila se nepredviđena greška!'
ROLLBACK TRAN -- poništi sve izmjene napravljene transakcijom
END

SQL:1999 standard razvrstava SQL naredbe u 7 kategorija. Osnovni razlog za drugačije razvrstavanje naredbi je
uvođenje novih koncepata u SQL u skladu sa razvojem informatičke tehnologije i potreba da se postojeće naredbe
preciznije grupišu. Definisane su sledeće kategorije SQL naredbi:
I. naredbe za šemu baze podataka (SQL-Schema Statements), koje se koriste za kreiranje,
II. izmenu i izbacivanje šema i objekata šema (CREATE, ALTER, DROP),
III. naredbe za podatke (SQL-Data Statements) koje se koriste za prikaz i ažuriranje podataka baze (SELECT,
INSERT, UPDATE, DELETE),
IV. naredbe za transakcije (SQL-Transaction Statements) koje se koriste za startovanje, završavanje i
postavljanje parametara za transakcije (COMMIT, ROLLBACK),
V. naredbe za kontrolu (SQL-Control Statements) koje se koriste za kontrolu izvršavanja sekvence SQL
naredbi (CALL, RETURN),
VI. naredbe za konekcije (SQL-Connection Statements) koje se koriste za uspostavljanje i prekidanje SQL
konekcije (CONNECT, DISCONNECT),
VII. naredbe za sesije (SQL-Session Statements) koje se koriste za postavljanje Default vrednosti i drugih
parametara SQL sesije (SET),
VIII. naredbe za dijagnostiku (SQL-Diagnostic Statements) koje koriste dijagnostičke podatke i signaliziraju
izuzetke u SQL rutinama (GET DIAGNOSTICS).
SQL:1999 i SQL:2003 standardi definišu više načina korišćenja SQL-a. Dva osnovna načina su direktno
(interaktivno) korišćenje SQL-a i povezivanje SQL-a sa klasičnim programskim jezicima ("ugrađeni" SQL).

3.1. Nedeljivost , doslednost, izolovanost, trajnost  ACID

Svaka baza podataka mora da ima sledeća svojstva:

 Nedeljivost  Atomic;
 Doslednost  Consistency;
 Izlolovanost  Isolation;
 Trajnost  Durability.
6/11
U literaturi ova svojstva se pod jednim imenom nazivaju ACID  svojstva, od početnog slova naziva osobina na
engleskom jeziku, i svojstva jamče sigurno i ona obezbeđuju pouzdano izvršavanje transakcija, prilikom čega se čak
i u slučaju grešaka, baza podataka ne dovodi u nefunkcionalno i neispravno stanje.

Svaka transakcija može se sastojati od jednog ili nekoliko delova. Svojstvo nedeljivosti (Atomicy) osigurava da će se
transakcija izvršiti u potpunosti (svi njeni delovi) ili da se neće izvršiti uopšte (mi jedannjen deo). Pri tome treba uzeti
u obzir nešeljene prekide rada servera usled nestanke struje, kvarove na hardveru i druge nepredviđene situacije koje
su takođe obuhvaćene ovim svojstvo.

Dobar primer, za ovo svojstvo, je plaćanje računa platnim karticama. Ova transakcija se sastoji od najmanje dva dela:
I deo  skidanje novca sa računa klijenta i II deo  uplata na račun trgovine gde je kupljena roba. Neprihvatljivo je
da se izvrši samo jedan deo transakcije, recimo samo I deo, a da nije izvršen i II deo transakcije.

Da bi se svojstvo nedeljivosti ostvarilo, baza podataka prati sva stanja unutar transakcije i zapisuje ih u dnevnik. U
slučaju da se jedan deo transakcije nije izvršio ili da ga je nemoguće, iz bilo kog razloga, nemoguće izvršiti, svi
prethodno uspešno izvršeni delovi transakcije se poništavaju [7]. Baza podataka se u tom slučaju vraća u izvorno
stanje pre transakcije.

Dalje, ni jedna transakcija ne sme narušiti svojstvo doslednosti (Consistency). Ovo svojstvo se brine da svaki podatak
koji se treba sačuvati u bazu podataka prethodno zadovoljava sva postojeća pravila i ograničenja. U protivnom,
transakcija se odbacuje i baza podataka se vraća u prethodno, ispravno, stanje.

Odličan primer za ovo je polje (kolona) koja ujedno predstavlja primarni ključ tabele. Po definiciji u koloni koja
predstavlja primarni ključ može biti samo jedna vrednost, od nredova tabele - svojstvo neponovljivosti primarnog
ključa. Drugim rečima svojstvo doslednosti proverava da li podatak, koji se unosi u to polje (kolonu) postoji i da li
po tipu i dužini polja odgovara tipu i dužini klone u koju se unosi.

Pravila doslednosti dodatno se mogu proširiti i referencijalnim integritetom (referential integrity), kao i pomoću
okidača (triggers).

Osobina koja omogućuje da događaji i stanja u jednoj transakciji nisu vidljivi u drugima je izolovanost (Isolation).
Ova osobina je pogotovu važna u više korisničkom okruženju. Naime, ona omogućava da se svaka transakcija
izvršava nezavisno od drugih transakcija i da bi se to uspešno ostvarilo koristi se mehanizam zaključavanja.

Na primer, ukoliko neko preduzeće, u službi finansija, ima bar dve osobe zadužene za plaćanje računa, prilikom
istovremenog plaćanja računa, prvi koji vrši plaćanje, zaključava sve transakcije drugima, sve dok se ponovo ne
pročita stanje računa, kako sa računa ne bi bilo "skinuto" više novca nego što se raspolaže.

Zaključavanje može biti optimističko i pesimističko. Optimističko je u slučaju, kada korisnik radi sa kopijom
podataka. Prilikom vraćanja, snimanja, podataka u bazu, proverava se da ti podaci već nisu promenjeni od strane
nekog drugog korisnika.

Baš ovaj način ilustruje prethodni primer sa plaćanjem računa. Provera, da li je došlo do izmene originalnih podataka,
može se izvršiti na nekoliko naćina. Proveravanjem stavke originalnog zapisa pre i u trenutku čuvanja izmena,
upoređivanjem vremenskih oznaka zapisa (timestamp) i slično.

Mnogo rigoroznije je pesimistično zaključavanj. Klijent sve vreme transakcije ima isključivo pravo nad zapisom, a
u tom periodu niko ne može da pristupi zapisu. Ovakav pristup može biti problematičan zbog moguće nepažnje
korisnika. Ukoliko korisnik otvori zapis za uređivanje i iz bilo kog razloga ga ne zatvori, dok se ne zatvori, on će sve
to vreme biti nedostupan ostalim korisnicima.

Pri radu s transakcijama, SQL Server baza podataka podržava nekoliko različitih nivoa izolacije, tabela T  3., u
zavisnosti od odabranog nivoamoguća je pojava određenih fenomena čitanja podataka iz baze. Za demonstraciju ovih
fenomena, pretpostaviće se da u bazi podataka postoji tabela Studenti sa sadržajem datim u tabeli T  4.

7/11
Tabela 3. Nivo izolacije u SQL Serveru [8]
Nivo izolacije "Prljavo" čitanje Neponavljajuće čitanje Fantomi
Nepotvrđeno čitanje DA DA DA
Potvrđeno čitanje  DA DA
Ponavljajuće čitanje   DA
Serijalizacija   
Snimak   

Tabela 4. Deo sadržaja tabele Studenti


BrojIndeksa Ime Prezime Smer
001/2019 Marko Markovic 1
021/2019 Jana Janic 1
003/2020 Janko Jankovic 1
003/2019 Zora Zoric 2
050/2019 Dana Danic 2

Takozvano "prljavo" (dirty) čitanje je fenomen koji se pojavljuje kada jedna transakcija može pročitati nepotvrđena
međustanja iz neke druge transakcije. Ukoliko je druga transakcija u konačno odbacila ta međustanja (rollback) onda
je prva transakcija preuzela neispravne podatke, tabela T  5.

Tabela 5. Prikaz "prljavog" čitanja


Transakcija 1 Transakcija 2
select Smer from Studenti
where BrojIndeksa='001/2019'
-- ispisuje 1
UPDATE Studenti SET Smer=2 WHERE
BrojIndeksa='001/2019';
-- transakcija još uvijek nije završena!
select Smer from Studenti
where BrojIndeksa='001/2019'
-- ispisuje 2
ROLLBACK;

"Prljavo" čitanje događa se ukoliko izolacije uopšte nema, odnosno ukoliko se koristi takozvano nepotvrđeno čitanje
(uncommitted read). U višekorisničkom okruženju ovaj fenomen čitanja krajnje je nepoželjan i treba ga obavezno
izbegnuti korišćenjem višeg nivoa izolacije.

Ukoliko se desi da se, tokom transakcije, isti podaci čitaju dva ili više puta, a rezultat pri svakom od čitanja nije isti,
reč je o "neponavljajućem čitanju" (non – repeatable reads). Ovaj fenomen čitanja donekle podseća na prethodni, ali
u ovom slučaju reč je o čitanju već potvrđenih podataka, tabela 6.

Tabela 6. Prikaz neponavljajućeg čitanja


Transakcija 1 Transakcija 2
select Smer from Studenti
where BrojIndeksa='001/2019'
-- ispisuje 1
UPDATE Studenti SET Smer=2 WHERE
BrojIndeksa='001/2019';
-- transakcija još uvijek nije završena!
select Smer from Studenti
where BrojIndeksa='001/2019'
-- podrazumevano ispisuje 2
COMMIT

Rezultat čitanja podataka, tabela 6., u prvoj transakciji zavisi od nivoa korišćenog nivoa izolacije. SQL Server,
podrazumevano, koristi nivo izolacije "potvrđeno čitanje" (committed read) [9]. To znači da će se prilikom prvog
8/11
čitanja učitati vrednost 1, a u drugom čitanju vrednost 2. Ukoliko se koristi viši nivo izolacije poput ponavljajućeg
čitanja (repeteable read), u oba čitanja preuzeće se vrednost 1 jer će druga transakcija biti na čekanju sve dok se u
potpunosti ne završi prva transakcija.

Ako se tokom transakcije izvrše dva ili više istih upita koji za rezultat imaju različit skup podataka, reč je o pojavi
fenomena "fantoma", odnosno fantomskih zapisa (phantom reads), tabela 7.

Tabela 7. Prikaz fantomskih zapisa


Transakcija 1 Transakcija 2
select * from Studenti
where Smer=2;
UPDATE Studenti VALUES (017,Pera,Peric,2)
Smer=2 WHERE BrojIndeksa='001/2019';
COMMIT
select * from Studenti
where Smer=2;
-- podrazumevano se vide fantomski zapisi
COMMIT

Ovaj fenomen se može izbeći primenom većeg nivoa izolacije, poput serijalizacije (serializable) ili snimaka
(snapshot). Ovi nivoi, maksimalne, izolacije daju isti rezultat, ali na različite načine.

Serijalizacija kao metodu rada koristi zaključavanje korišćenih resursa. Čim jedna transakcija počne s radom,
automatski zaključa korišćenje resursa ostalim transakcijama koje su tada u stanju čekanja. Nasuprotoj ovoj metodi,
snimak ne koristi zaključavanje već formira vezije postojećih podataka, pri čemu se koristi sistemska baza podataka
tempdb. U nju se smeštaju stavke svih svih ažuriranih podataka tokom transakcija. Svaka transakcija se upisuje, tako
što joj server dodeljuje jedinstveni broj koji je dodeljen svakoj od stavki ažuriranih podataka [10].

Korištenjem snimka, istovremene transakcije se izvršavaju odmah korišćenjem onih stavki podataka (snimci) koje su
postojale na početku transakcije. Iz tog razloga, nije potrebno zaključavati druge transakcija kao u slučaju
serijalizacije. Da bi se snimak mogao koristiti, kao nivo izolacije, to je potrebno omogućiti, na način kako je prikazano
u SQL–5 .

SQL 5. Primer TCL upita SSMS alatom SQL server 2018 EXPRESS
ALTER DATABASE NazivBazePodataka
SET ALLOW_SNAPSHOT_ISOLATION ON

Pri izboru nivoa izolacije treba obratiti pažnju na moguće komplikacije pri međusobnom zaključavanju transakcija,
a jedna od takvih situacija potpuni je zastoj (deadlock), slika 2.

Resurs 1
1 4

Proces 1 Proces 2

3 2

Resurs 2

Slika 2. Potpuni zastoj

U prvoj operaciji, slika 2., Proces 1 zauzeo je Resurs 1, a u drugoj operaciji Proces 2 zauzeo je Resurs 2. Problem
nastaje u trećoj operaciji budući da Proces 1 ne može pristupiti Resursu 2 jer je on već zauzet od strane Procesa 2.
Proces 1 je tada na čekanju, dok se Proces 2 ne završi. Međutim, Proces 2 nikada neće završiti jer ne može pristupiti
9/11
Resursu 1 kojeg je zauzeo Proces 1. Rezultat je potpuni zastoj jer su oba procesa stalno u stanju čekanja.

Za ilustraciju sa slike 2, dat je primer u tabeli 8.

Tabela 8. Demonstracija potpunog zastoja


Transakcija 1 Transakcija 2
UPDATE Studenti SET Smer = 3 WHERE
BrojIndeksa='001/2019';
-- zauzet je resurs (tabela) Studenti
UPDATE Smer SET naziv=MAŠINSTVO WHERE idsmer = 3;
-- zauzet je resurs (tabela) 'smer'

UPDATE Smer SET naziv=HIP WHERE


idsmer = 3;
-- Resurs (tabela) 'smer' je već zauzet!
COMMIT
UPDATE Studenti SET Smer = 1 WHERE
BrojIndeksa='001/2019';
-- Resurs 'Studenti' vec je zauzet!
COMMIT

SQL Server ima tu mogućnost da prepozna (otkrije) ovakve situacije pomoću takozvanog monitora potpunog zastoja
(deadlock monitor thread) koji svakih 5 sekundi proverava je li došlo do potpunog zastoja. Kada dođe do potpunog
zastoja, intervali provere se smanjuju čak do 100ms sve dok se više ne budu detektovali potpuni zastoji. Nakon toga,
intervali se ponovno povećavaju na vreme do 5 sekundi [11].

SQL Server ima mehanizam da izabere, po principu "najbezbolnije" ("najjeftinije"), koju transakciju poništava. Na
primer, ukoliko transakcija, prvog procesa, obrađuje 3 zapisa, a transakcija drugog procesa obrađuje 15 zapisa, server
gasi prvi proces, jer je izmene njegove transakcije moguće brže poništiti.

Naravno, sam korisnik može da utiće na izbor procesa čije se transakcije poništavaju. U ovu svrhu koristi se naredba
SET DEADLOCK_PRIORITY [11], gde se za svaku sesiju mogu definisati prioriteti LOW, NORMAL ili HIGH.

Takođe, prioritete je moguće definisati kao celobrojne vrijednosti od -10 do 10, a SQL Server podrazumevano
(default) koristi prioritet NORMAL. Ukoliko dve sesije imaju isti prioritet i njihove transakcije su jednako značajne
("skupe") žrtva se bira po slučajnom principu.

Poslednje svojstvo ACID – a je svojstvo trajnost (durability). Njime se osigurava trajno snimanje podataka u bazu
podataka nakon uspešno obavljenih (završetak) transakcija čak i u slučaju nepredvidivih okolnosti: nestanak struje,
nepredviđeno rušenje sistema ili nekih drugih greški.

10/11
LITERATURA
1. Lazarević B.,i drugi: Baze podataka, Peto izdanje, FON, Beograd, 2010.
2. https://www.sqlite.org/mostdeployed.html. [Pristup 01/2020].
3. https://www.filemaker.com/products/filemaker-pro-advanced/ [Pristup 12/2019].
4. http://www.oracle.com/technetwork/database/features/plsql/index.html. [Pristup 02/2020].
5. https://www.ibm.com/products/db2-database/developers [Pristup 03/2020].
6. https://www.postgresql.org/docs/9.6/static/intro-whatis.html. [Pristup 03/2020].
7. https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-files-and-
filegroups?view=sql-server-ver15 [Pristup 02/2020].
8. https://www.quora.com/What-guarantees-do-Relational-Databases-RDBMS-provide-with-respect-to-safe-
data-storage, [Pristup 01/2020]
9. https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-
r2/ms175909(v=sql.105)?redirectedfrom=MSDN, [Pristup 01/2020]
10. https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-
server?redirectedfrom=MSDN [Pristup 02/2020]
11. https://docs.microsoft.com/en-us/sql/t-sql/statements/set-deadlock-priority-transact-sql?view=sql-server-
ver15 [Pristup 01/2020]

11/11

You might also like