168
MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA Željko Kovačević, struč.spec.ing.techn.inf. Zagreb, 2018

MODELIRANJE, IMPLEMENTAIJA I ADMINISTRAIJA AZA … · MODELIRANJE, IMPLEMENTAIJA I ADMINISTRAIJA AZA PODATAKA Priručnik na kolegiju ‘Modeliranje i administracija baza podataka

  • Upload
    tranbao

  • View
    239

  • Download
    1

Embed Size (px)

Citation preview

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf.

Zagreb, 2018

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 2

PRIRUČNICI TEHNIČKOG VELEUČILIŠTA U ZAGREBU

MANUALIA POLYTECHNICI STUDIORUM ZAGRABIENSIS

Željko Kovačević

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA Priručnik na kolegiju ‘Modeliranje i administracija baza podataka' koji se održava u sklopu nastave

na diplomskom stručnom studiju informatike Tehničkog veleučilišta u Zagrebu

Zagreb, 2018.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 3

izdavač Tehničko veleučilište u Zagrebu

Vrbik 8, Zagreb

za izdavača mr. sc. Goran Malčić

autor Željko Kovačević, struč.spec.ing.techn.inf.

recenzenti Prof. dr. sc. Kornelije Rabuzin, FOI, Varaždin

Prof. dr. sc. Mladen Varga, EFZG, Zagreb

vrsta djela priručnik

Objavljivanje je odobrilo Stručno vijeće

Tehničkog veleučilišta u Zagrebu

odlukom broj: 2833-1/18 od 23. listopada 2018.

ISBN 978-953-7048-78-5

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 4

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 5

SADRŽAJ

1. Uvod u baze podataka ................................................................................................... 8

1.1. Što je baza podataka? ........................................................................................ 8

1.2. SQL (Structured Query Language) ................................................................... 10

1.3. ACID svojstva ................................................................................................... 12

1.4. Instalacija i konfiguracija SQL Servera ............................................................. 19

1.5. Kreiranje SQL Server baze podataka ............................................................... 26

2. Dizajn baze podataka .................................................................................................. 31

2.1. Konceptualni podatkovni model ........................................................................ 31

2.2. Logički podatkovni model .................................................................................. 34

2.3. Fizički podatkovni model ................................................................................... 36

2.4. Ostali podatkovni modeli ................................................................................... 41

2.5. Normalizacija baze podataka ............................................................................ 44

2.6. Analiza podataka SQL upitima .......................................................................... 48

3. Objekti baze podataka ................................................................................................. 52

3.1. Tablice .............................................................................................................. 52

3.2. Pogledi .............................................................................................................. 57

3.3. Grupirajući i negrupirajući indeksi ..................................................................... 61

3.4. Uskladištene procedure i funkcije ..................................................................... 68

3.5. DML i DDL okidači ............................................................................................ 74

3.6. Sekvence .......................................................................................................... 79

3.7. Sinonimi ............................................................................................................ 80

4. Organizacija i sigurnost ............................................................................................... 82

4.1. Sheme............................................................................................................... 82

4.2. Prijavni nalozi .................................................................................................... 85

4.3. Korisnički računi ................................................................................................ 89

4.4. Uloge ................................................................................................................ 92

4.5. Kriptografija u SQL Serveru .............................................................................. 98

4.6. Transparentna enkripcija podataka ................................................................. 103

4.7. Uvijek kriptirani podaci .................................................................................... 106

4.8. Dinamičko maskiranje podataka ..................................................................... 111

5. Održavanje i nadzor ................................................................................................... 114

5.1. Izrada rezervnih kopija .................................................................................... 114

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 6

5.2. Povrat rezervnih kopija ................................................................................... 119

5.3. SQL Server Agent ........................................................................................... 123

5.4. Izrada plana održavanja .................................................................................. 126

5.5. Elektronička pošta baze podataka .................................................................. 128

5.6. Kopiranje baze podataka ................................................................................ 131

5.7. SQL Server Profiler ......................................................................................... 135

5.8. SQL Server Audit ............................................................................................ 138

6. Tehnologije visoke dostupnosti .................................................................................. 143

6.1. Uvod u replikaciju ............................................................................................ 143

6.2. Replikacija snimke stanja ................................................................................ 147

6.3. Transakcijska replikacija ................................................................................. 148

6.4. Replikacija spajanjem ..................................................................................... 150

6.5. Replikacijski pretplatnici .................................................................................. 151

6.6. Otpremanje dnevnika transakcija .................................................................... 154

6.7. Zrcaljenje baze podataka ................................................................................ 156

6.8. AlwaysOn rješenja .......................................................................................... 158

Reference ...................................................................................................................... 161

Ključne riječi .................................................................................................................. 166

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 7

Uvodna riječ Pred vama je priručnik pisan za potrebe studenata specijalističkog diplomskog

stručnog studija informatike na Tehničkom veleučilištu u Zagrebu. Sadržaj priručnika

obuhvaća sadržaj kolegija "Modeliranje i administracija baza podataka", a namijenjen je

svima koji žele usvojiti dodatna znanja iz područja dizajna, modeliranja, implementacije te

administriranja relacijskih baza podataka i sustava.

Iako priručnik obuhvaća i najvažnije uvodne teme iz područja relacijskih baza podataka o

kojima su studenti već slušali tijekom dodiplomskog studija, ubrzo zatim usredotočuje se

na naprednije koncepte. Zbog toga je poželjno da čitatelj već ima neka osnovna znanja o

relacijskim bazama podataka i SQL jeziku kako bi se mogao čim prije i lakše usredotočiti

na daljnji sadržaj.

Za demonstraciju koncepata primarno se koristi Microsoft SQL Server RDBMS. Iako

postoji besplatna Express inačica SQL Servera, ona zbog svojih ograničenja neće biti

dovoljna za rad uz ovaj priručnik. Preporučuje se korištenje minimalno Standard inačice

SQL Servera, a za realizaciju najnaprednijih koncepata bit će vam potrebna Enterprise

inačica. Studenti mogu besplatno preuzeti svaku od inačica pristupom Imagine (MSDNAA)

programu.

Ovim putem također želim zahvaliti svima koji su svojim savjetima i primjedbama doprinijeli

kvaliteti ovog priručnika, a tu su bili mnogobrojni kolege iz struke, recenzenti te studenti

Tehničkog veleučilišta u Zagrebu.

Željko Kovačević, struč.spec.ing.techn.inf.

Tehničko veleučilište u Zagrebu, 2018.g.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 8

1. Uvod u baze podataka

1.1. Što je baza podataka?

Baza podataka organizirana je te međusobno povezana skupina podataka. Zbog

toga vrlo često moguće je pronaći definiciju baze podataka i kao organiziranu skupinu

informacija. Općenito, podatak je neobrađena činjenica koja može postojati u bilo kojem

obliku (tekst, slika, zvuk itd.), a sama za sebe nema nikakvo značenje [1]. Primjerice,

podatak je broj 400. Ipak, niz povezanih podataka tvori informaciju. Tako, primjerice,

informacija je "Cipele koštaju 400 kn".

Informacija

Podatak 1 Podatak 2 Podatak 3 Podatak 4

Cipele koštaju 400 kn

Tablica 1.1.1. Informacija i podaci

Baza podataka sadrži tablice u kojima se nalaze zapisi čije su vrijednosti raspoređene po

stupcima. Također, u terminologiji nije neobično pronaći da baza podataka sadrži entitete

i atribute. Naime, na konceptualnoj razini postoje entiteti i atributi koji se kasnije na fizičkoj

razini pretvaraju u tablice i stupce.

Ovisno o bazi podataka, one još mogu sadržavati poglede (eng. views), okidače (eng.

triggers), uskladištene procedure (eng. stored procedures), funkcije itd. Neke od baza

podataka poput MS Accessa mogu sadržavati i izvještaje (eng. reports), obrasce (eng.

forms), module (eng. modules) itd. Mogućnosti pojedinih baza podataka definirane su

njihovom namjenom te predviđenim tipom korisnika, pa zato ne čudi što Microsoft Access

ima određene specifičnosti koje su predviđene za male i samostalne baze podataka i

aplikacije.

Po namjeni, baze podataka možemo podijeliti na desktop te klijent-server baze podataka.

Desktop baze podataka namijenjene su manje zahtjevnim korisnicima. Najčešće je riječ o

jednom ili nekoliko korisnika koji bazu koriste u osobne svrhe ili za manje projekte. Takve

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 9

baze podataka najčešće su besplatne pa su i iz tih razloga primamljive većem broju

korisnika. Međutim, tehnički su najčešće dosta ograničene i neprikladne za ozbiljniji posao.

Naziv Opis

Paradox

Korijene vuče još iz DOS operacijskog sustava, dok postoji i

posebna Paradox inačica za Windows OS. Paradox se aktivno

koristio u Borland razvojnim alatima Delphi i C++ Builder.

SQLite

Besplatna baza podataka. Jedna od najraširenijih u svijetu koja radi

na velikom broju uređaja i platformi, počevši od Android, iOS i

iPhone uređaja, MAC, PC, televizora, automobila itd. [2]

Microsoft Access

Isključivo za Windows OS. Podržava paralelni (konkurentni) rad do

maksimalno 255 korisnika, te omogućuje razvoj aplikacija i izvještaja

koji se spremaju u samoj bazi podataka. Microsoft Access aplikacija

se plaća, dok je sama baza podataka (datoteka) besplatna.

FileMaker Pro

Desktop baza podataka primarno namijenjena za iPad, iPhone i Mac

okruženja. Podržava i Windows okruženje te omogućuje integraciju

s Microsoft SQL Server, Oracle i MySQL bazom podataka. [3]

Tablica 1.1.2. Primjeri desktop baza podataka

Desktop baze podataka u su pravilu tek datoteke. Zbog toga su podložne nekim

ograničenjima operacijskog sustava poput ograničenog broja istovremenih konekcija, pa

time i ograničenom broju konkurentnih korisnika. Tako Microsoft Access baza podataka

dopušta maksimalno 5 konkurentnih konekcija ukoliko se nalazi na Window 7 Home OS-

u, 10 na Windows 7 Professional te maksimalnih 255 konkurentnih konekcija na Windows

Server OS-u.

Unatoč ovakvim i sličnim ograničenjima, desktop baze podataka i dalje su jako popularne

jer zadovoljavaju većinu potreba manje zahtjevnih korisnika. Međutim, u zahtjevnijim

okruženjima gdje je najčešće riječ o velikom broju korisnika, postoje i neki dodatni

čimbenici koje treba uzeti u obzir. Performanse, skalabilnost, dostupnost te sigurnost

podataka odjednom postaju izrazito bitni. Ove osobine nisu previše zastupljene u desktop

bazama podataka te ih se najčešće osigurava pomoću klijent-server baza podataka.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 10

Naziv Opis

Microsoft SQL Server

Microsoftova relacijska baza podataka (RDBMS) namijenjena

korporativnim okruženjima. Podržava Transact-SQL, ekstenziju

SQL-a. Baza je dostupna u velikom broju izdanja od kojih je

Express izdanje potpuno besplatno.

Oracle

Vlasništvo korporacije Oracle. RDBMS namijenjen krajnje

zahtjevnim korisnicima te podržava PL/SQL proceduralni jezik.

Također je dostupan u besplatnom Express izdanju. [4]

DB2

Vlasništvo korporacije IBM. Uz standardni SQL jezik DB2

podržava PL/SQL te je također dostupan u besplatnoj Express-

C inačici. [5]

Postgre SQL

Besplatna (open source) objektno relacijska baza podataka

(ORDBMS). [6] Postgre SQL koristi PL/pgSQL jezik te u

potpunosti podržava ACID svojstva.

Tablica 1.1.3. Primjeri klijent-server baza podataka

U ovu skupinu baza podataka spadaju i mnoge druge poput MySQL, Sybase, Informix itd.

Ove baze podataka najčešće funkcioniraju kao mrežni servisi pomoću kojih se odvija

klijent-server komunikacija. Obično se jedan takav servis naziva instanca, a jedno server

računalo (poslužitelj) može odjednom imati više aktivnih instanci.

1.2. SQL (Structured Query Language)

SQL je jezik koji se koristi za komuniciranje s bazom podataka. Po Američkom

nacionalnom institutu za standarde (ANSI) ovaj jezik smatra se standardom za relacijske

baze podataka. Iako većina RDBMS sustava podrazumijevano koristi SQL, većina njih je

razvila i vlastite ekstenzije tom jeziku (T-SQL u SQL Serveru, PL/SQL u Oracleu itd.).

Unatoč tome, neke standardne naredbe poput SELECT, INSERT, UPDATE, DELETE,

CREATE i DROP prisutne su u svim RDBMS sustavima te omogućuju one najvažnije

operacije nad bazom podataka. [7]

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 11

U SQL serveru postoje četiri tipa SQL upita: DML (Data Manipulation Language), DDL

(Data Definition Language), DCL (Data Control Language) i TCL (Transaction Control

Language). Svakom od ovih tipova upita je svojstven različit set SQL naredbi.

DML upiti koriste se za dohvat, umetanje, izmjenu te brisanje podataka korištenjem SQL

naredbi SELECT, INSERT, UPDATE i DELETE.

Primjer 1.2.1 – DML upiti

-- dodaj odjel br. 2 insert into Odjel(naziv, id) values ('Novi odjel', 2) -- svi zaposlenici odjela br. 1 se prebacuju u odjel br. 2 update Zaposlenik set Odjel_id = 2 where Odjel_id = 1 -- dohvati odjel svakog od zaposlenik select Odjel_id from Zaposlenik -- izbriši odjel br. 1 delete from Odjel where id = 1

DDL upitima kreira se i mijenja struktura objekata (tablica, pogleda, funkcija itd.) u bazi

podataka, za što je potrebno koristiti SQL naredbe CREATE, ALTER i DROP.

Primjer 1.2.2 – DDL upiti

-- kreiraj tablicu Zaposlenik CREATE TABLE [dbo].[Zaposlenik]( [ID] [int] IDENTITY(1,1) NOT NULL, [Ime] [nvarchar](50) NULL, [Prezime] [nvarchar](50) NULL, [Odjel_id] [int] NULL, [Jmbg] [nvarchar](50) NULL, [Grad] [nvarchar](50) NULL ) -- Promjeni svojstva stupca Prezime ALTER TABLE Zaposlenik ALTER COLUMN Prezime NVARCHAR(75) NOT NULL; -- Izbriši stupac Jmbg ALTER TABLE Zaposlenik DROP COLUMN Jmbg;

DCL upitima definiraju se uloge i dozvole u bazi podataka što ih čini ključnim upitima za

kontrolu pristupa. U tu svrhu koriste se SQL naredbe GRANT i REVOKE.

Primjer 1.2.3 – DCL upiti

-- korisniku 1 dozvoli dohvat, dodavanje i izmjenu podataka u tablici Zaposlenik

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 12

GRANT SELECT, INSERT, UPDATE ON Zaposlenik TO korisnik1 -- korisniku 2 opozovi dozvolu brisanja podataka u tablici Zaposlenik REVOKE DELETE ON Zaposlenik FROM korisnik2

TCL upiti koriste se za upravljanje transakcijama. Njima je moguće uspješno potvrditi kraj

transakcije (COMMIT) ili napraviti njen opoziv (ROLLBACK).

Primjer 1.2.4 – TCL upiti

DECLARE @kodGreske INT BEGIN TRAN UPDATE Zaposlenik SET Grad = 'Zagreb' -- postavi grad Zagreb WHERE id = 1 -- ..prvi zaposlenik 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

Vrlo često tipovi SQL upita međusobno se kombiniraju. Primjerice, u jednoj transakciji koja

se kontrolira TCL upitima moguće je kreirati objekte poput tablica DDL upitima. Podatke u

tim tablicama možemo obraditi DML upitima te ovlasti i dozvole nad tim tablicama definirati

DCL upitima.

1.3. ACID svojstva

Da bi se neka baza podataka mogla smatrati profesionalnom, tj. "ozbiljnom" ona

mora imati ACID svojstva. Štoviše, korištenje baze podataka bez ovih svojstava krajnje je

rizično i nepreporučljivo u ozbiljnim (korporativnim) okruženjima zbog cijelog niza mogućih

poteškoća. ACID (Atomicy, Consistency, Isolation, Durability) svojstva jamče sigurno i

pouzdano izvršavanje transakcija, prilikom čega se čak i u slučaju greški baza podataka

neće dovesti u problematično stanje.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 13

Svaka transakcija može se sastojati od nekoliko dijelova. Svojstvo atomarnosti (eng.

atomicy) osigurava da će se transakcija izvršiti u potpunosti (svi njeni dijelovi) ili da se neće

izvršiti uopće (niti jedan njen dio). Pri tome treba uzeti u obzir nestanke struje, moguće

kvarove na sklopovlju i druge nepredviđene situacije koje su također obuhvaćeni ovim

svojstvom.

Za primjer uzmimo plaćanje goriva kreditnom karticom na benzinskoj postaji. Transakcija

bi se u tom slučaju sastojala od minimalno dvaju dijelova: skidanje novca s računa klijenta

te uplate tog novca na račun benzinske postaje. Nezamislivo bi bilo da se izvršio samo

jedan dio te transakcije, odnosno da se, primjerice, samo skinuo novac s računa klijenta,

a da isti nije uplaćen na račun benzinske postaje.

Da bi se svojstvo atomarnosti realiziralo, baza podataka prati sva stanja unutar transakcije

i zapisuje ih u dnevnik. U slučaju da jedan dio transakcije nije moguće izvršiti, svi prethodno

uspješno izvršeni dijelovi transakcije će se također poništiti. [8] Baza podataka se u tom

slučaju vraća u izvorno stanje prije transakcije.

Niti jedna transakcija ne smije narušiti konzistentnost (eng. consistency) baze podataka.

Ovo svojstvo brine se o tome da svaki podatak koji se treba spremiti u bazu podataka

prethodno zadovoljava sva postojeća pravila i ograničena. U protivnom, transakcija se

odbacuje i baza se vraća u prethodno konzistentno stanje.

Za primjer možemo uzeti cjelobrojni stupac neke tablice koji je definiran kao primarni ključ.

Zbog svojstva konzistentnosti baza podataka vodi brigu o tome da se u taj stupac može

unijeti samo cijeli broj te da je on jedinstven u tom stupcu. Pravila konzistentnosti dodatno

se mogu proširiti i referencijalnim integritetom (eng. referential integrity) te pomoću okidača

(eng. triggers).

Jedno od najvažnijih ACID svojstava u više-klijentskom (konkurentnom) okruženju svojstvo

je izolacije (eng. isolation). Njime se definira da događaji i stanja u jednoj transakciji nisu

vidljivi u drugim transakcijama. Svaka transakcija izvršava se neovisno o drugim

transakcijama, a da bi se to realiziralo koriste se mehanizmi zaključavanja.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 14

Za primjer možemo zamisliti situaciju gdje dvije osobe u isto vrijeme žele podići novac sa

zajedničkog bankovnog računa. Prva osoba vrši transakciju pomoću bankomata, a druga

je u poslovnici banke. Ona osoba koja prva podigne neki iznos automatski mora zaključati

transakciju drugoj osobi dok ona ponovno ne pročita zadnje stanje računa. U protivnom bi

se moglo dogoditi da se s računa podignulo više novaca nego što je bilo dostupno.

Zaključavanje se može realizirati kao optimistično i pesimistično. Optimistično se najčešće

koristi u situacijama kada klijent radi s kopijom podataka iz izvorne baze. Nakon obrade tih

podataka potrebno ih je nazad spremiti u izvornu bazu pa se u tom trenutku treba provjeriti

jesu li ti podaci u međuvremenu već mijenjani od strane nekog drugog klijenta.

Upravo to demonstrira prethodni primjer s bankom. Bankovne aplikacije u poslovnici i na

bankomatu učitale su kopije izvornih podataka, a nakon njihove izmjene pokušava ih se

spremiti nazad u izvornu bazu. Ukoliko je u međuvremenu došlo do izmjene izvornih

podataka od strane nekog drugog klijenta aktivira se zaključavanje.

Je li došlo do izmjene izvornih podataka u trenutku spremanja izmjena može se provjeriti

na nekoliko načina. Primjerice, provjeravanjem inačice izvornog zapisa prije i u trenutku

spremanja izmjena, uspoređivanjem vremenskih oznaka zapisa (eng. timestamp) itd.

Pesimistično zaključavanje puno je rigoroznije. Klijent cijelo vrijeme transakcije ima

isključivo pravo nad zapisom, a u tom periodu nitko ne može pristupiti zapisu. Ovakav

pristup zna biti problematičan zbog moguće nepažnje samih korisnika. Ukoliko korisnik

otvori zapis za uređivanje, a zatim ode na ručak cijelo to vrijeme zapis će biti nedostupan

ostalim korisnicima.

Razine izolacije Prljavo čitanje Neponavljajuće čitanje Fantomi

Nepotvrđeno čitanje Da Da Da

Potvrđeno čitanje - Da Da

Ponavljajuće čitanje - - Da

Serijalizacija - - -

Snimak - - -

Tablica 1.3.1. Razine izolacije u SQL Serveru [9]

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 15

Pri radu s transakcijama, SQL Server baza podataka podržava nekoliko različitih razina

izolacije (Tablica 1.3.1), a ovisno o odabranoj razini mogu se pojaviti određeni fenomeni

čitanja. Da bismo ih demonstrirali pretpostavimo da u bazi podataka postoji tablica

"Zaposlenik" sa sljedećim sadržajem.

ID Ime Prezime Odjel_id

1 Ante Antić 1

2 Pero Perić 1

3 Ivica Ivić 2

Tablica 1.3.2. Sadržaj tablice Zaposlenik

Prljavo čitanje (eng. dirty read) fenomen je koji se pojavljuje kada jedna transakcija može

pročitati nepotvrđena međustanja iz neke druge transakcije. Ukoliko je druga transakcija u

konačnici odbacila ta međustanja (eng. rollback) onda je prva transakcija dohvatila netočne

podatke.

Transakcija 1 Transakcija 2

select odjel_id from zaposlenik where ID=1 -- ispisuje 1

UPDATE zaposlenik SET odjel_id=2 WHERE ID=1; -- transakcija još uvijek nije završena!

select odjel_id from zaposlenik where ID=1 -- ispisuje 2!

ROLLBACK; --!

Primjer 1.3.1. Demonstracija prljavog čitanja

Prljavo čitanje događa se ukoliko izolacije uopće nema, tj. ukoliko se koristi razina izolacije

"nepotvrđeno čitanje" (eng. uncommitted read). U višeklijentskom okruženju ovaj fenomen

čitanja krajnje je nepoželjan i treba ga izbjeći korištenjem više razine izolacije.

Ukoliko se tijekom transakcije isti podaci čitaju dva ili više puta, a rezultat pri svakom od

čitanja nije isti, riječ je o "neponavljajućem čitanju" (eng. non-repeatable reads). Ovaj

fenomen čitanja može podsjećati na prethodni, no u ovom slučaju riječ je o čitanju već

potvrđenih podataka.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 16

Transakcija 1 Transakcija 2

SELECT odjel_id FROM zaposlenik WHERE ID=1 -- ispisuje 1

UPDATE zaposlenik SET odjel_id=2 WHERE ID=1; COMMIT;

SELECT odjel_id FROM zaposlenik WHERE ID=1 -- podrazumijevano ispisuje 2 COMMIT;

Primjer 1.3.2. Demonstracija neponavljajućeg čitanja

Rezultat zadnjeg čitanja podataka u prvoj transakciji ovisi o korištenoj razini izolacije. SQL

Server podrazumijevano koristi razinu izolacije "potvrđeno čitanje" (eng. committed read).

[10] To znači da će se sada prilikom prvog čitanja dohvatiti vrijednost 1, a u drugom čitanju

vrijednost 2. Ukoliko se koristi viša razina izolacije poput ponavljajućeg čitanja (eng.

repeteable read), u oba čitanja pročitat će se vrijednost 1 jer će druga transakcija biti na

čekanju sve dok se u potpunosti ne završi prva transakcija.

Ako se tijekom transakcije izvrše dva ili više istih upita koji za rezultat imaju različitu skupinu

podataka, riječ je o pojavi fenomena "fantoma", tj. fantomskih zapisa (eng. phantom reads).

Transakcija 1 Transakcija 2

SELECT * FROM Zaposlenik WHERE odjel_id = 2

INSERT INTO Zaposlenik VALUES('Marko', 'Marić', 2) COMMIT;

SELECT * FROM Zaposlenik WHERE odjel_id = 2 -- podrazumijevano se vide "fantomski zapisi" COMMIT;

Primjer 1.3.3. Demonstracija fantomskih zapisa

I ovaj fenomen moguće je spriječiti korištenjem većih razina izolacije poput serijalizacije

(eng. serializable) te snimka (eng. snapshot). Ove dvije najveće razine izolacije daju isti

rezultat, ali na različite načine.

Serijalizacija kao metodu rada koristi zaključavanje korištenih resursa. Čim jedna

transakcija počne s radom, automatski zaključa korištene resurse ostalim transakcijama

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 17

koje su tada u stanju čekanja. Alternativno, snimak ne koristi zaključavanje već

verzioniranje pri čemu se koristi sistemska baza podataka tempdb. U nju se spremaju

inačice svih izmijenjenih podataka tijekom transakcija. Svaka transakcija zabilježena je

svojim jedinstvenim brojem koji je dodijeljen svakoj od inačica izmijenjenih podataka. [11]

Korištenjem snimka kao razine izolacije, konkurentne transakcije izvršavaju se odmah

korištenjem onih inačica podataka (snimke) koja je postojala na početku transakcije.

Upravo zato nije potrebno vršiti zaključavanje drugih transakcija kao u slučaju serijalizacije.

Da bi se snimak mogao koristiti kao razina izolacije prethodno je to potrebno omogućiti na

sljedeći način.

ALTER DATABASE ImeBazePodataka SET ALLOW_SNAPSHOT_ISOLATION ON

Pri odabiru razine izolacije treba paziti na moguće komplikacije pri međusobnom

zaključavanju transakcija, a jedna od takvih situacija potpuni je zastoj (eng. deadlock).

Slika 1.3.1. Potpuni zastoj

U prvoj operaciji 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 tada je na čekanju dok proces 2 ne završi.

Međutim, proces 2 nikada neće završiti jer ne može pristupiti resursu 1 kojeg je zauzeo

proces 1. Rezultat je potpuni zastoj jer su oba procesa stalno u stanju čekanja.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 18

Situaciju sa slike također možemo demonstrirati sljedećim primjerom.

Transakcija 1 Transakcija 2

UPDATE Zaposlenik SET Odjel_id=5 WHERE ID=1 -- zauzet je resurs (tablica) 'zaposlenik'

UPDATE odjel SET sef_id=1 WHERE ID=1 -- zauzet je resurs (tablica) 'odjel'

UPDATE odjel SET sef_id = 2 WHERE ID = 1 -- Resurs 'odjel' je već zauzet! COMMIT

UPDATE Zaposlenik SET odjel_id=1 WHERE ID=1 -- Resurs 'zaposlenik' već je zauzet! COMMIT

Primjer 1.3.4. Demonstracija potpunog zastoja

SQL Server je u mogućnosti detektirati ovakve situacije pomoću dretve monitora potpunog

zastoja (eng. deadlock monitor thread) koja svakih 5 sekundi provjerava je li došlo do

potpunog zastoja. Kada se potpuni zastoj dogodi, intervali provjere smanjuju se čak do 100

ms sve dok se više ne budu detektirali potpuni zastoji. Nakon toga intervali provjere

ponovno se povećavaju na vrijeme do 5 sekundi. [12]

Kada se detektira potpuni zastoj SQL Server će odabrati žrtvu potpunog zastoja (eng.

deadlock victim) čiju transakciju će otkazati te time omogućiti drugom procesu da završi sa

svojom transakcijom.

Podrazumijevano, SQL Server odabire žrtvu po principu "najjeftinije" transakcije.

Primjerice, ukoliko transakcija prvog procesa obrađuje 2 zapisa, a transakcija drugog

procesa 5 zapisa, žrtva će biti prvi proces jer je izmjene njegove transakcije brže moguće

poništiti.

Korisnici također mogu utjecati na odabir žrtve korištenjem naredbe SET

DEADLOCK_PRIORITY gdje mogu za sesiju definirati prioritete LOW, NORMAL ili HIGH.

Također, prioritete je moguće definirati kao cjelobrojne vrijednosti od -10 do 10, a SQL

Server podrazumijevano koristi prioritet NORMAL. Ukoliko dvije sesije imaju isti prioritet i

njihove transakcije su jednako "skupe" žrtva se bira slučajnim odabirom.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 19

Zadnje je ACID svojstvo trajnost (eng. durability). Njime se osigurava trajnu pospremljenost

podataka u bazu podataka nakon uspješnog završetka transakcije čak i u slučaju nestanka

struje, nepredviđenog rušenja sustava, kvara na sklopovlju ili nekih drugih greški.

1.4. Instalacija i konfiguracija SQL Servera

Postojeća instalacija SQL Servera preduvjet je za kreiranje baze podataka. SQL

Server donedavno je bilo moguće instalirati samo na Windows operacijskim sustavima,

dok je od inačice 2017 dostupan i na nekim Linux operacijskim sustavima poput Red Hat,

Ubuntu te SUSE [13]. Dostupan je u velikom broju izdanja, od čega je "Express" izdanje

potpuno besplatno.

Slika 1.4.1. Instance i baze podataka na serveru

Instalacija SQL Servera predstavlja instalaciju jedne njegove instance. Svaka instanca

može sadržavati više baza podataka, dok na jedno server računalno (poslužitelj) možemo

instalirati više instanci (Slika 1.4.1). Ukoliko se na jedno server računalo instalira više

instanci one se tada moraju razlikovati po imenu. U protivnom, moguće je izvršiti i

instalaciju samo jedne, podrazumijevane (eng. default) instance.

Svaka instanca na server računalu izvršava se kao servis koji može dopustiti mrežnu

klijent-server komunikaciju s bazom podataka. U tom slučaju svaka instanca ima zaseban

mrežni priključak (eng. port) pomoću kojeg klijenti mogu identificirati pojedinu instancu.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 20

Slika 1.4.2. SQL Server instalacijski centar

Pokretanjem instalacije SQL Servera prikazuje se SQL Server instalacijski centar (Slika

1.4.2). U njemu je moguće pronaći mnogo dokumentacije o samom planiranju instalacije,

alate za pripremu te održavanje instalacije, dodatne mrežne resurse te napredne postavke

instalacije. Da bismo započeli s instalacijom nove SQL Server instance potrebno je

odabrati stavku "New SQL Server stand-alone installation or add features to an existing

installation".

Slika 1.4.3. Provjera preduvjeta instalacije

U prvom koraku provjeravaju se svi potrebni preduvjeti za uspješnu instalaciju SQL

Servera. Primjerice, korisnički račun pod kojim je pokrenuta instalacija mora imati

administratorske ovlasti i sva potrebna prava, računalo nije potrebno resetirati te ima

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 21

unaprijed instalirane sve potrebne servise i biblioteke. Ovisno o stanju provjere, instalaciju

neće nužno biti moguće nastaviti sve dok se ne zadovolje svi potrebni preduvjeti.

U drugom koraku instalacije potrebno je odabrati izdanje SQL Servera koje želite instalirati,

unijeti registracijski ključ te složiti se s uvjetima licence. Nakon toga nudi se mogućnost

izravnog preuzimanja i instaliranja zakrpi za SQL Server te instalacija instance može

započeti odabirom stavke "SQL Server Feature Installation".

Slika 1.4.4. Odabir svojstava instance

Prilikom instalacije nove instance SQL Servera obavezno je potrebno odabrati stavku

"Database Engine Services". Servisi poput SQL Server Database Engine, SQL Server

Agent, SQL Server Browser i drugih sastavni su dio svake instance te ih je uvijek nužno

instalirati.

U slučaju potrebe za replikacijom potrebno je označiti i stavku "SQL Server Replication".

Također, uvijek je poželjno instalirati i dokumentaciju te Management Studio, SQL Server

Profiler i ostale alate koje su sastavni dio stavke "Management Tools - Complete".

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 22

Slika 1.4.5. Konfiguracija instance

U narednom koraku instalacije potrebno je konfigurirati novu instancu. U ovom slučaju

možemo odabrati je li riječ o podrazumijevanoj neimenovanoj instanci (eng. default

instance) ili kreiramo imenovanu instancu. Za potrebe ovog primjera kreirat će se

imenovana instanca s imenom MOJAINSTANCA.

Slika 1.4.6. Konfiguracija servisa

Nakon provjere potrebnog slobodnog prostora na disku potrebno je konfigurirati i servise

koji će raditi s instancom. Za svakog od njih je poželjno automatsko pokretanje s

podizanjem operacijskog sustava kako ih ne bi trebalo naknadno "ručno" pokretati.

Servis SQL Server Agent koristi se za izvršavanje unaprijed zakazanih poslova (eng. jobs)

u SQL Serveru. Primjerice, ukoliko želite svaki petak u 23:00h automatski stvoriti

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 23

sigurnosnu kopiju baze podataka (eng. backup) to je moguće realizirati pomoću ovog

servisa. On podrazumijevano nije konfiguriran za automatsko pokretanje pa je na to

potrebno paziti prilikom konfiguracije servisa na Slici 1.4.6.

Servis SQL Server Database Engine predstavlja servis instance te bi se uvijek trebao

automatski pokretati ukoliko je potrebno da je ta instanca SQL Servera dostupna odmah

pri podizanju operacijskog sustava.

Servis SQL Server Browser služi kao posrednik između klijenta i instance. Da bi se klijent

mogao spojiti na instancu obično mora znati IP adresu server računala, naziv instance i

njen mrežni priključak (eng. port). Ukoliko se koristi ovaj servis klijent ne mora znati mrežni

priključak već samo IP adresu server računala i naziv instance, dok će broj mrežnog

priključka instance klijentu biti poslan od strane servisa.

Slika 1.4.7. Autentifikacija korisnika

Posljednje postavke prije instalacije odnose se na dopuštenu vrstu autentifikacije korisnika.

Moguće je izabrati između "Windows authentication mode" i "Mixed Mode". Prvi izbor

najčešće se koristi kada se želi dopustiti autentifikacija samo onih korisnika koji pripadaju

istoj domeni neke interne mreže. Ovaj je pristup sigurniji, ali stvara poteškoće pri pokušaju

autentifikacije korisnika iz drugih domena, mreža i operacijskih sustava.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 24

Način autentifikacije "Mixed Mode" koristi se kada se želi omogućiti autentifikacija šireg

kruga korisnika koji nisu nužno u istoj domeni ili mreži (primjerice, internet). U instanci SQL

Servera za svakog takvog korisnika moguće je stvoriti korisnički račun i lozinku koje će taj

korisnik moći koristiti prilikom svoje autentifikacije. Ovaj način i dalje dozvoljava mogućnost

korištenja "Windows authentication mode" autentifikacije.

Ukoliko je odabran "Mixed Mode" potrebno je definirati lozinku za glavni administratorski

račun instance SQL Servera (sa), te navesti barem jedan administratorski korisnički račun

Windows korisnika koji će se moći koristiti prilikom autentifikacije (Slika 1.4.7).

Slika 1.4.8. Svojstva TCP/IP protokola instance

Nakon završetka instalacije SQL Server instance najčešće je potrebno provjeriti mogu li joj

klijenti pristupiti preko mreže te na taj način komunicirati s bazama podataka. Da bi to bilo

moguće potrebno je pokrenuti SQL Server Configuration Manager aplikaciju te u njoj

provjeriti je li omogućen TCP/IP protokol za željenu instancu (Slika 1.4.8).

U postavkama TCP/IP protokola moguće je za sve IP adrese koristiti dinamičke i statičke

mrežne priključke. Ukoliko se koriste dinamički mrežni priključci, tada SQL Server instanci

može biti dodijeljen različit mrežni priključak prilikom svakog njenog pokretanja (ovisno o

tome koji mrežni priključak je trenutno dostupan). Da bi klijent znao koji je trenutni mrežni

priključak dodijeljen instanci mora biti instaliran i pokrenut SQL Server Browser servis.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 25

Ukoliko se uvijek želi koristiti isti mrežni priključak tada nema potrebe za SQL Server

Browser servisom te se koristi statički mrežni priključak kao u primjeru na Slici 1.4.8. Tada

ujedno nema potrebe niti za propuštanjem UDP mrežnog priključka 1434 kroz vatrozid

(eng. firewall) kako bi ovaj servis mogao komunicirati s klijentima, što dodatno doprinosi

sigurnosnoj komponenti servera.

Statički mrežni priključak često je korišten upravo zbog definiranja pravila u vatrozidu.

Uvijek je u vatrozidu lakše definirati pravilo za jedan mrežni priključak nego koristiti

dinamičke mrežne priključke gdje se prilikom svakog pokretanja SQL Server instance

može dodijeliti različiti mrežni priključak za kojeg opet treba definirati pravilo u vatrozidu.

Također treba napomenuti da se prilikom instalacije podrazumijevane instance SQL

Servera za njenu mrežnu komunikaciju podrazumijevano koristi statički TCP mrežni

priključak 1433. Iz sigurnosnih razloga poželjno je promijeniti broj ovog mrežnog priključka

jer će potencijalni napadači najčešće ciljati upravo na njega.

Slika 1.4.9. Spajanje na SQL Server instancu

Nakon uspješne konfiguracije SQL Server instance moguće joj je pristupiti prethodno

instaliranim SQL Server Management Studio (SSMS) alatom (Slika 1.4.9). Pomoću njega

može se jednostavno spajati na više različitih instanci odjednom, kreirati i upravljati

bazama podataka, administrirati korisnike itd., a sam alat u potpunosti je besplatan.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 26

Isti princip spajanja kao na Slici 1.4.9 koristi se i u drugim klijent aplikacijama gdje se za

autentifikaciju i autorizaciju korisnika također mora znati IP adresa server računala,

korisničko ime i lozinka, naziv instance te broj mrežnog priključka ukoliko se ne koristi SQL

Server Browser servis.

1.5. Kreiranje SQL Server baze podataka

SQL Server baza podataka smještena je unutar instance SQL Servera, a nastaje

na osnovu predloška sistemske "model" baze podataka. Moguće ju je kreirati izvršavanjem

SQL (DDL) upita ili pomoću SQL Server Management Studio (SSMS) alata. Čak i u slučaju

korištenja SSMS alata, u konačnici opet se kreiraju odgovarajući SQL upiti čijim

izvršavanjem se kreira specificirana baza podataka.

Slika 1.5.1. Kreiranje baze podataka – opće informacije

Upotrebom SSMS alata, baza podataka kreira se na način da se desnim klikom na stavku

"Databases" u prikazanom izborniku odabere stavka "New database…". Tada se pojavljuje

dijalog kao na Slici 1.5.1.

U dijelu s općim informacijama potrebno je definirati ime baze podataka. Na osnovu imena

za svaku bazu podataka kreiraju se minimalno dvije datoteke. Prva datoteka

<ime_baze_podataka>.MDF sadrži podatke i objekte (tablice, pogledi, uskladištene

procedure, indeksi itd.) a druga <ime_baze_podataka>.LDF predstavlja dnevnik

transakcija. [14]

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 27

MDF datoteka je primarna datoteka koja podrazumijevano sadrži sistemske tablice te sve

ostale objekte koji nisu dodijeljeni nekoj drugoj datotečnoj grupi. Naime, kada je riječ o

velikim i zahtjevnim sustavima, za podatke i objekte nije pogodno koristiti samo jednu

(primarnu) datoteku na disku. Da bi se poboljšalo performanse pri čitanju i pisanju bolje je

uz primarnu datoteku koristiti i više sekundarnih (.NDF) datoteka. Pojedini objekti iz

primarne datoteke tako bi se mogli podijeliti kroz više sekundarnih datoteka, a te datoteke

ili njihove grupe razmjestiti kroz više različitih diskova (Slika 1.5.2).

Slika 1.5.2. Datoteke, datotečne grupe i razmještaj po diskovima

Svim datotekama možemo definirati inicijalnu veličinu, način rasta te maksimalnu veličinu,

a svaka baza podataka uvijek sadrži barem jednu (podrazumijevanu) datotečnu grupu

naziva "PRIMARY". U njoj se nalazi primarna MDF datoteka, a mogu se nalaziti i druge

sekundarne datoteke. Svaki objekt baze podataka može biti dodijeljen jednoj datotečnoj

skupini, a ovisno o raspoloživom mjestu može se nalaziti u samo jednoj datoteci ili biti

rasprostranjen kroz više datoteka te datotečne skupine.

Datoteke i datotečne skupine korisne su i u administraciji baza podataka jer omogućuju

kreiranje ili povrat rezervne kopije samo odabranih datoteka i/ili datotečnih skupina.

Datotečne skupine moguće je kreirati odabirom stavke "Filegroups" na Slici 1.5.1.

Dnevnik transakcija bilježi podatke o izvršavanju svake transakcije te se koristi za potrebe

oporavka baze podataka u slučaju greški koje bi mogle uzrokovati njeno nekonzistentno

stanje (nestanak struje, kvar na sklopovlju itd.). Jedna baza podataka može imati više

datoteka dnevnika transakcija, a one nikada nisu dio neke specifične datotečne skupine.

Podrazumijevano, datoteke dnevnika transakcija uvijek se nalaze na istoj lokaciji kao i

podatkovne datoteke, no to ne mora uvijek biti slučaj, kao što je prikazano slikom 1.5.2.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 28

Koncept vlasništva (eng. ownership) najčešće se koristio u prijašnjim inačicama SQL

Servera kada još uvijek nisu postojale sheme u bazama podataka. Vlasnik (eng. owner)

korisnik je koji ima nepovratne ovlasti nad pojedinim objektom ili bazom podataka, a takvog

korisnika nije moguće izbrisati sve dok sva svoja vlasništva ne prebaci na drugog korisnika.

Danas se umjesto takvog pristupa objekti najčešće grupiraju po shemama što olakšava

administraciju korisnika i dozvola. Zbog toga nije potrebno definirati vlasnika baze

podataka te polje Owner sa Slike 1.5.1 može imati vrijednost "<default>".

Slika 1.5.3. Neke od ostalih postavki baze podataka

Od ostalih postavki pri kreiranju baze podataka (Slika 1.5.3) možemo spomenuti

"Collation", kojom se definiraju pravila pri sortiranju podataka s različitim tipovima znakova.

Podrazumijevanu vrijednost "<default>" nije potrebno mijenjati jer SQL Server podržava

Unicode tipove znakova, a time i nelatinične znakove. [15]

Postavka "Recovery model" izravno utječe na rad dnevnika transakcija te način izrade i

povrata rezervnih kopija. Podržani modeli oporavka baze podataka su "full"

(podrazumijevano), "bulk-logged" i "simple".

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 29

Kao preporuka i najčešće korišteni model oporavka koristi se potpuni (eng. full) model. U

dnevniku transakcija spremaju se podaci o svakoj izvršenoj transakciji, pa ga je moguće

koristiti pri povratu baze podataka u slučaju greške te u slučaju povrata u neku prijašnju

točku u vremenu. Nedostatak su korištenja ovog modela velike datoteke dnevnika

transakcija u zahtjevnim sustavima s velikim brojem transakcija.

Model oporavka "bulk-logged" najčešće se koristi tek privremeno u slučajevima izvršavanja

velikog broja transakcija odjednom. Kako bismo izbjegli spremanje svake od tih transakcija

u dnevnik transakcija (potpuni model oporavka) te time jako povećali njegovu veličinu i

ugrozili performanse privremeno je moguće koristiti "bulk-logged" model. Nakon

izvršavanja, te transakcije su u dnevniku transakcija zabilježene u minimalnom obliku (eng.

minimal logging) [16] nakon čega se opet vraćamo na potpuni model oporavka.

Upotrebom jednostavnog (eng. simple) modela oporavka iz datoteka dnevnika transakcija

automatski se brišu sve završene transakcije. Zbog toga dnevnik transakcija ne može više

biti korišten za povrat baze podataka. Ovakav model oporavka rijetko je u upotrebi i

najčešće se koristi u testnim okruženjima gdje nije nužno potrebno zabilježiti svaku

transakciju.

Pri kreiranju baze podataka moguće je definirati i mnoge druge postavke (automatsko

sažimanje veličine datoteka, omogućavanje enkripcije baze podataka itd.) a SSMS alat će

u konačnici generirati odgovarajuće SQL upite (naredbe) kojim će se kreirati takva baza

podataka (primjer 1.5.1).

Primjer 1.5.1 – SQL upiti generirati SSMS alatom

CREATE DATABASE [Testna] CONTAINMENT = NONE ON PRIMARY ( NAME = N'Testna', FILENAME = N'C:\Microsoft SQL Server\MSSQL11.MOJAINSTANCA\MSSQL\DATA\Testna.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'Testna_log', FILENAME = N'C:\Microsoft SQL Server\MSSQL11.MOJAINSTANCA\MSSQL\DATA\Testna_log.ldf' , SIZE = 2048KB , FILEGROWTH = 10%) GO ALTER DATABASE [Testna] SET COMPATIBILITY_LEVEL = 110 ALTER DATABASE [Testna] SET ANSI_NULL_DEFAULT OFF ALTER DATABASE [Testna] SET ANSI_NULLS OFF ALTER DATABASE [Testna] SET ANSI_PADDING OFF ALTER DATABASE [Testna] SET ANSI_WARNINGS OFF

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 30

ALTER DATABASE [Testna] SET ARITHABORT OFF ALTER DATABASE [Testna] SET AUTO_CLOSE OFF ALTER DATABASE [Testna] SET AUTO_CREATE_STATISTICS ON ALTER DATABASE [Testna] SET AUTO_SHRINK OFF ALTER DATABASE [Testna] SET AUTO_UPDATE_STATISTICS ON ALTER DATABASE [Testna] SET CURSOR_CLOSE_ON_COMMIT OFF ALTER DATABASE [Testna] SET CURSOR_DEFAULT GLOBAL ALTER DATABASE [Testna] SET CONCAT_NULL_YIELDS_NULL OFF ALTER DATABASE [Testna] SET NUMERIC_ROUNDABORT OFF ALTER DATABASE [Testna] SET QUOTED_IDENTIFIER OFF ALTER DATABASE [Testna] SET RECURSIVE_TRIGGERS OFF ALTER DATABASE [Testna] SET DISABLE_BROKER ALTER DATABASE [Testna] SET AUTO_UPDATE_STATISTICS_ASYNC OFF ALTER DATABASE [Testna] SET DATE_CORRELATION_OPTIMIZATION OFF ALTER DATABASE [Testna] SET PARAMETERIZATION SIMPLE ALTER DATABASE [Testna] SET READ_COMMITTED_SNAPSHOT OFF ALTER DATABASE [Testna] SET READ_WRITE ALTER DATABASE [Testna] SET RECOVERY FULL ALTER DATABASE [Testna] SET MULTI_USER ALTER DATABASE [Testna] SET PAGE_VERIFY CHECKSUM ALTER DATABASE [Testna] SET TARGET_RECOVERY_TIME = 0 SECONDS USE [Testna] GO IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [Testna] MODIFY FILEGROUP [PRIMARY] DEFAULT GO

Osim zbog automatskog generiranja potrebnih SQL naredbi, korištenje SSMS alata pri

kreiranju baze podataka prikladno je i zbog cijelog niza postavki koje bi se inače morale

pamtiti i ručno podešavati. Sve njih je sada na jednostavan način moguće naknadno

pročitati i izmijeniti.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 31

2. Dizajn baze podataka

2.1. Konceptualni podatkovni model

Da bi se uspješno oblikovala baza podataka potrebno je u što boljoj mjeri razumjeti

potrebe korisnika. U tu svrhu najčešće se odmah pristupa analizi poslovnih procesa gdje

se pokušavaju identificirati svi akteri, njihove međusobne veze te podaci koji se u tim

procesima razmjenjuju. U konačnici kreira se konceptualni ER (eng. entity relationship)

podatkovni model koji na najvišem nivou opisuje buduću bazu podataka.

Konceptualni podatkovni model razvija se u suradnji s poslovnim analitičarom ili samim

korisnikom te za njegov razvoj i razumijevanje nije potrebno nikakvo tehničko predznanje.

Preciznost ovog modela od ključne je važnosti za razvoj baze podataka jer se na osnovu

njega razvijaju logički i fizički podatkovni modeli.

Značajka Model

Konceptualni Logički Fizički

Imena entiteta X X

Veze među entitetima X X

Atributi X

Primarni ključevi X X

Strani ključevi X X

Imena tablica X

Imena stupaca X

Tipovi podataka X

Tablica 2.1.1. Značajke podatkovnih modela [17]

Svaki od podatkovnih modela ima određene značajke (Tablica 2.1.1), a u konceptualnom

podatkovnom modelu koriste se entiteti i njihove međusobne veze. Entitet je osnovni

element za prikupljanje informacija. Njime se opisuju ljudi, događaji, mjesta itd., a svaki

entitet opisuje se atributima. Primjerice, entitet je Student, a njegovi atributi mogu biti ime,

prezime i JMBAG.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 32

Atributi mogu biti ključni (eng. key) i neključni (eng. non-key). Ključnim atributima

jednoznačno se opisuju entiteti dok se neključni atributi mogu ponavljati unutar više

različitih entiteta. U prethodnom primjeru ključni atribut bio bi JMBAG jer to je jedinstven

podatak za svakog studenta, dok bi ime i prezime bili neključni atributi jer više studenata

može imati isto ime i/ili prezime.

Slika 2.1.1. Primjeri entiteta i veza u konceptualnom podatkovnom modelu

Kada se definira veza između dva entiteta njihov se odnos promatra iz oba smjera. Gleda

se odnos prvog entiteta prema drugom, a zatim drugog entiteta prema prvom, pri čemu se

polazišni entitet uvijek gleda u jedini.

Primjerice, iz Slike 2.1.1 možemo pročitati da jedan student piše samo jedan završni rad.

Isto vrijedi i u drugom smjeru, tj. jedan završni rad piše samo jedan student. Također, jedan

profesor predaje nula ili više (0…*) kolegija, te jedan kolegij predaje samo jedan profesor.

I na kraju, jedan student pohađa nula ili više kolegija, dok jedan kolegij pohađa nula ili više

studenata.

Modeli u ovakvom obliku lako su čitljivi i razumljivi. Štoviše, konceptualni podatkovni model

vrlo često se smatra "zajedničkim jezikom" korisnika (klijenata) i arhitekata baza podataka.

To demonstrira i sljedeći primjer.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 33

Zadatak 2.1.1

Bračni par Ivica i Ana žele pratiti svoje kupovne navike. S obzirom na različite cijene u

pojedinim dućanima, žele znati koje artikle najčešće kupuju u kojem dućanu te na koje

tipove artikala troše najviše novaca. Također, žele znati u kojem dućanu najčešće kupuju

te koliko novaca potroše u pojedinom dućanu u nekom vremenskom razdoblju. Sukladno

ovim zahtjevima potrebno je dizajnirati i kreirati odgovarajuću bazu podataka.

U prvom koraku potrebno je identificirati sve ključne entitete, a to su:

▪ Kupac (ime i prezime)

▪ Dućan (naziv i adresa)

▪ Račun (datum i vrijeme, ukupni iznos)

▪ Artikl (naziv i cijena)

▪ Stavka (artikl, količina i njegova ukupna cijena)

▪ Tip artikla (naziv)

Tek sada razvija se konceptualni podatkovni model na način da se identificiraju i povežu

entiteti koji su u izravnoj vezi. Primjerice, entiteti kupac i račun u izravnoj su vezi jer jedan

kupac može posjedovati više računa. Također, entitet račun u izravnoj je vezi i s entitetima

dućan i stavka jer svaki račun izdan je u nekom dućanu te može imati jednu ili više stavki.

Na sličan način treba identificirati i sve ostale entitete koji su u izravnoj vezi.

Slika 2.1.2. Konceptualni podatkovni model za Zadatak 2.1.1

Ispravnost konceptualnog podatkovnog modela provjerava se na način da se provjeravaju

odnosi između pojedinih entiteta u oba smjera. Primjerice, iz modela na Slici 2.1.2 može

se pročitati da jedan artikl (primjerice, Milka čokolada) može pripadati samo jednom tipu

artikala (primjerice, slatkiši), dok tom tipu artikla može pripadati nula ili više artikala (Milka

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 34

čokolada, Moto keksi, Kiki bomboni itd.). Međutim, možda baš kod vašeg trenutnog

korisnika treba vrijediti drukčije, odnosno da jedan artikl (Milka čokolada) može pripadati

većem broju tipova artikala (slatkiši, čokolade, slastice itd.) te bi u tom slučaju trebalo

korigirati model na Slici 2.1.2.

Iz ovog primjera može se zaključiti da veze među entitetima i njihovi odnosi ovise isključivo

o poslovnom procesu i željama korisnika. Zbog toga se isti konceptualni podatkovni model

ne može izravno replicirati za potrebe drugih korisnika bez prethodne provjere i korekcije

ovakvih detalja.

2.2. Logički podatkovni model

Nakon završenog razvoja konceptualnog podatkovnog modela pristupa se logičkom

podatkovnom modeliranju. Njime se u potpunosti, pomoću atributa, opisuju svi postojeći

entiteti te potrebe za podacima. Logički podatkovni model tek je proširenje konceptualnog

podatkovnog modela, a koriste ga administratori i arhitekti baza podataka pri razvoju

fizičkog podatkovnog modela.

Slika 2.2.1. Logički podatkovni model za Zadatak 2.1.1

Osim entiteta sada su vidljivi i njihovi atributi, s time da su ključni atributi podcrtani. Ukoliko

entiteti imaju veći broj atributa onda ih je praktičnije predstaviti u obliku dijagrama klasa ili

na sljedeći način:

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 35

Slika 2.2.2. Primjer logičkog podatkovnog modela [18]

Logički podatkovni model također se razvija na način da nije ovisan o nikakvoj specifičnoj

platformi ili RDBMS sustavu, a njegovi atributi mogu biti opisani i generičkim (općim)

tipovima podataka, ograničenjima i ključevima.

U primjeru na Slici 2.2.2 ključni atributi imaju oznaku PK (eng. primary key), dok strani

imaju oznaku FK (eng. foreign key). Oznaka PF koristi se za atribute koji su ujedno primarni

i strani, kao primjerice u entitetima Parts_by_Vehicles i Vehicles_by_Customer.

U narednoj fazi fizičkog podatkovnog modeliranja ključni atributi postat će primarni ključevi,

tj. stupci pomoću kojih se jednoznačno određuje svaki zapis (redak) u tablici. Korištenjem

primarnog ključa nameće se ograničenje (eng. constraint) da ne mogu postojati dva ili više

zapisa s istom vrijednošću u tom stupcu. Također, vrijednost unutar takvog stupca je

obavezna, dakle stupac ne može biti prazan ili imati NULL vrijednost.

Na Slici 2.2.2 ključni atribut entiteta Vehicles je atribut Vehicle_Serial_Number. Time je

definirano da unutar buduće tablice Vehicles svaki zapis mora imati vrijednost u tom stupcu

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 36

(serijski broj) te da je ta vrijednost različita za svaki zapis u toj tablici (ne postoje dva ili više

vozila sa istim serijskim brojem).

Primarni ključ može biti definiran i kao kombinacija dvaju ili više atributa (stupaca), a tada

je riječ o složenom (kompozitnom) primarnom ključu. Svaki od stupaca složenog primarnog

ključa mora imati vrijednost, a u tablici se ne može pojaviti ista kombinacija vrijednosti u

tim stupcima.

Na Slici 2.2.2 ne može se dogoditi da se u tablici Vehicles_by_Customer dva ili više puta

nalazi jedno vozilo s istim vlasnikom. Međutim, moguće su kombinacije da jedan vlasnik

ima više različitih vozila te da je jedno vozilo imalo više različitih vlasnika.

2.3. Fizički podatkovni model

Zadnja faza podatkovnog modeliranja predstavlja kreiranje fizičkog podatkovnog

modela. Njega se može implementirati u relacijskoj ili NoSQL bazi podataka, XML datoteci

itd. Entiteti iz logičkog podatkovnog modela zamjenjuju se tablicama, a njihovi atributi

stupcima koji su sada, ovisno o odabranom načinu implementacije i sustavu, opisani

konkretnim, a ne generičkim tipovima podataka.

Veze među tablicama u fizičkom podatkovnom modelu određuju se na osnovi veza među

entitetima u konceptualnom i logičkom podatkovnom modelu. Veze mogu biti "jedan prema

jedan", "jedan prema više", "više prema više" te rekurzivna veza.

Slika 2.3.1. Primjer veze "jedan prema jedan"

Tip veze "jedan prema jedan" realizira se pomoću dviju tablica s istim primarnim

ključevima. Najčešće se koristi pri radu s tablicama koje imaju veliki broj stupaca pa se

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 37

ovim tipom veze, radi preglednosti, pojedine grupe stupaca jedne tablice izdvajaju u više

zasebnih tablica.

Ukoliko je riječ o tablicama s manjim brojem stupaca, veza "jedan prema jedan" najčešće

se izbjegava te se umjesto njenog korištenja stupci tih tablica spajaju u jednu tablicu.

Primjerice, umjesto veze na Slici 2.3.1 u tablicu Student mogu se prebaciti stupci Mentor,

NazivTeme i DatumPredaje, čime nestaje potreba za tablicom ZavrsniRad.

Slika 2.3.2. Primjer veze "jedan prema više"

Tip veze "jedan prema više" realizira se korištenjem primarnog ključa tablice roditelja (eng.

parent, master) te stranog ključa tablice djeteta (eng. child, detail). Ovom vezom definira

se da za jedan zapis iz tablice roditelja može postojati više zapisa u tablici djeteta.

Upotrebom stranog ključa zapisi iz tablice djeteta referenciraju se na odgovarajuće zapise

u tablici roditelja.

U primjeru na Slici 2.3.2 može se vidjeti veza "jedan prema više" između tablica Ducan i

Racun, a iz te veze možemo zaključiti da u jednom dućanu može biti izdano više računa.

Svaki zapis u tablici Racun sadrži stupac sa stranim ključem SifraDucana pomoću kojega

se jednoznačno može identificirati dućan u kojemu je izdan pojedini račun.

Slika 2.3.3. Referencijalni integritet veze

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 38

Općenito, tip veze "jedan prema više" uvijek treba biti sinkroniziran na način da za svaku

vrijednost stranog ključa u tablici djeteta postoji ista takva vrijednost primarnog ključa u

tablici roditelja. To pravilo ujedno definira pojam referencijalnog integriteta, a ono se

osigurava svojstvom veze "Enforce Foreign Key Constraint" kao na Slici 2.3.3. [19]

Za očuvanje referencijalnog integriteta u SQL Serveru mogu se definirati i pravila pri

izmjeni i brisanju već postojećih podataka (Slika 2.3.3). Njima se definira što se događa sa

zapisima i vrijednostima stranih ključeva u tablici djeteta ukoliko se promijeni ili izbriše

pojedina vrijednost primarnog ključa u tablici roditelja. U SQL Serveru možemo koristiti

pravila "No Action", "Cascade", "Set NULL" i "Set Default".

Ducan Racun

Sifra (PK) Naziv Broj (PK) SifraDucana (FK)

1 Walmart 1 1

2 Starbucks 2 2

3 Subway 3 2

Primjer 2.3.1. Sadržaji tablica Ducan i Racun

Pravilo "No Action" definira da se neće dogoditi nikakva sinkronizacija (izmjena) u tablici

djeteta nakon promjene ili brisanja vrijednosti primarnog ključa u tablici roditelja. Upravo

zbog toga upotreba ovog pravila pri radu s podacima najčešće rezultira greškama zbog

pokušaja kršenja referencijalnog integriteta.

Ukoliko bi tablice Ducan i Racun imale sadržaj kao u Primjeru 2.3.1 pokušaj brisanja

dućana sa šifrom 1 ili 2 iz tablice Ducan ne bi uspio. To bi bilo kršenje referencijalnog

integriteta jer bi onda u tablici Racun imali reference na dućane koji više ne postoje. Isto bi

se dogodilo i u slučaju pokušaja izmjene šifre tih dućana jer bi i u tom slučaju u tablici

Racun postojale reference na nepostojeće dućane.

Da je korišteno pravilo "Cascade" prilikom brisanja nekog dućana iz tablice Ducan izbrisali

bi se i svi računi iz tablice Racun koji su bili referencirani na taj dućan. Također, ukoliko

bismo promijenili šifru dućana Walmart u broj 100 automatski bi se u tablici Racun

promijenile vrijednosti svih stranih ključeva u vrijednost 100.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 39

Da bismo koristili pravilo "Set Default" prethodno bismo trebali dodijeliti podrazumijevanu

(eng. default) vrijednost stupcu koji predstavlja strani ključ tablice djeteta. U slučaju

brisanja zapisa iz tablice roditelja, prethodno referencirane vrijednosti stranog ključa tablice

djeteta promijenile bi se u podrazumijevanu vrijednost. Ta podrazumijevana vrijednost

mora postojati u primarnom ključu tablice roditelja jer će se inače dogoditi greška zbog

pokušaja kršenja referencijalnog integriteta. Zbog toga je u slučaju brisanja umjesto pravila

"Set Default" bolje koristiti pravilo "Set NULL" koje će vrijednost stranog ključa postaviti na

NULL vrijednost, čime se neće narušiti referencijalni integritet.

Slično vrijedi i prilikom izmjene vrijednosti primarnog ključa u tablici roditelja. Tada bi sve

referencirane vrijednosti stranog ključa tablice djeteta, ovisno o korištenom pravilu ("Set

Default" ili "Set NULL") bile promijenjene u podrazumijevanu ili NULL vrijednost.

Slika 2.3.4. Primjer veze "više prema više"

Sljedeći je tip veze "više prema više", a njom definiramo da za jedan zapis iz prve tablice

može postojati više zapisa iz druge tablice. Međutim, i za jedan zapis iz druge tablice može

postojati više zapisa iz prve tablice. Da bi se ovakva veza mogla realizirati potrebno je

koristiti međutablicu sa složenim primarnim ključem.

Primarni ključ međutablice kreira se kao kombinacija primarnih ključeva onih dviju tablica

koje su u vezi "više prema više". Zatim, kreiraju se dvije veze "jedan prema više", tj. između

prve tablice i međutablice te druge tablice i međutablice. U tim vezama dijelovi složenog

primarnog ključa međutablice imaju ulogu stranih ključeva.

U primjeru na Slici 2.3.4 prikazana je veza "više prema više" između tablica Student i

Kolegij. Korištenjem međutablice Polaznik ta veza realizirana je kao kombinacija dviju veza

"jedan prema više", odnosno jedan student može iti pohađati više kolegija te jedan kolegij

može pohađati više studenata.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 40

Slika 2.3.5. Primjer rekurzivne veze

Veza "jedan prema više" koristiti se i prilikom realizacije rekurzivne veze, a u takvoj vezi

primarni i strani ključ nalaze se u istoj tablici. U primjeru rekurzivne veze na Slici 2.3.5

jedan odjel može imati jedan nadređeni odjel, a istovremeno i više podređenih odjela.

ID IDNadredeniOdjel Naziv

1 NULL IT odjel

2 1 Odjel programiranja

3 1 Odjel dizajna

4 2 Odjel web aplikacija

5 2 Odjel desktop aplikacija

Primjer 2.3.2. Sadržaj tablice Odjel

Ukoliko pretpostavimo da se u tablici Odjel sa Slike 2.3.5 nalaze zapisi kao u Primjeru

2.3.2, tada odnose među pojedinim odjelima možemo prikazati sljedećom slikom.

Slika 2.3.6. Odnosi među pojedinim odjelima iz Primjera 2.3.2

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 41

Rekurzivna veza koristi se u mnogo situacija. Primjerice, njom je jednostavno opisati

strukturu internetskog foruma (svaki forum može imati više podforuma, a ujedno može i

sam biti podforum). Također, ukoliko bismo vodili evidenciju o zaposlenicima, jedan

zaposlenik može biti šef drugim zaposlenicima, a opet on sam također imati svog šefa itd.

Slika 2.3.7. Implementacija fizičkog podatkovnog modela u SQL Serveru

Sukladno svim prethodno opisanim značajkama fizičkog podatkovnog modela te na osnovi

već postojećeg logičkog podatkovnog modela iz Slike 2.2.1, napokon možemo prikazati

njegovu implementaciju u SQL Serveru (Slika 2.3.7). Tek nakon ove faze modeliranja i

izrade tablica možemo pristupiti unosu i izmjeni podataka razvojem zasebne desktop ili

web klijent aplikacije ili korištenjem SSMS alata.

2.4. Ostali podatkovni modeli

Osim prethodno opisanih, postoje i mnogi drugi podatkovni modeli. Tijekom 60-ih i

70-ih godina učestalo su korišteni hijerarhijski i mrežni modeli, a jedan od najpopularnijih

relacijski je model baze podataka kojeg je početkom 70-ih osmislio Edgar F. Codd.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 42

Slika 2.4.1. Primjer hijerarhijskog modela

Hijerarhijski model razvijen je i korišten u IBM-u početkom 60-ih godina. Zbog strukture u

obliku stabla (Slika 2.4.1) omogućen je brz rad s podacima, pa se ovakve baze i dalje

koriste u aplikacijama koje zahtijevaju velike performanse.

Model počinje od korijenskog čvora, a on kao i svaki čvor roditelja može imati više djece.

Svaki čvor dijete može imati samo jednog roditelja, pa se tom strukturom realizira odnos

"jedan prema više". Glavni nedostatak hijerarhijskog modela nemogućnost je realizacije

odnosa "više prema više" pa se u tom slučaju koristio mrežni podatkovni model.

Slika 2.4.2. Primjer mrežnog modela

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 43

Mrežni model baze podataka proširenje je hijerarhijskog modela gdje jedan čvor djeteta

može imati više roditelja (Slika 2.4.2). Osim što omogućava realizaciju odnosa "više prema

više" te kompleksniju i fleksibilniju strukturu i dalje nudi vrlo brzu obradu podataka. Ipak,

pojavom relacijskog modela koji uskoro postaje standardom, oba prethodna modela gube

na popularnosti te se danas puno rjeđe koriste.

Slika 2.4.3. Primjer relacijskog modela [20]

Relacijski model zasniva se na relacijama (tablicama) koje se sastoje od redaka i stupaca.

Svaki stupac predstavlja atribut entiteta, a jedan ili kombinacija više atributa može tvoriti

primarni, tj. strani ključ. Svaki redak predstavlja n-torku koja sadrži konkretne podatke o

instanci entiteta (Slika 2.4.3), a sadržaj svake pojedine n-torke (primjerka) mora se

razlikovati. Tvrtka Oracle među prvima je implementirala relacijski model, a danas je on

prisutan i u sustavima poput SQL Server, MySQL, PostgreSQL itd.

Osim spomenutih, postoje i sljedeći modeli:

▪ Objektno-orijentirani model

▪ Objektno-relacijski model

▪ Ravni (eng. flat) model

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 44

▪ Višedimenzionalni model

▪ Polustrukturirani model

▪ Asocijativni model

▪ Graf model (NoSQL)

▪ Dokument model (NoSQL)

▪ Itd.

Ovisno o potrebama korisnika, vrši se odabir najprikladnijeg podatkovnog modela, a na

osnovu njega i odabir konačne baze podataka.

2.5. Normalizacija baze podataka

Edgar Frank Codd prvi je predstavio koncept normalizacije kao proces organizacije

stupaca (atributa) i tablica (relacija) relacijske baze podataka s ciljem pojednostavljenja

dizajna, smanjenja redundantnosti i poboljšanja integriteta podataka. [21]

JMBAG Student UlicaBr Grad BrPoste Spol KolegijSf KolegijIme Profesor IspitDatum Ocjena 112233 Ante Antić Vrbik 2 Zagreb 10000 M 12345 Automatika Nikola Antić 12.2.2014 3 112233 Ante Antić Vrbik 2 Zagreb 10000 M 23456 Fizika Pero Perić 13.2.2014 1 112233 Ante Antić Vrbik 2 Zagreb 10000 M 23456 Fizika Pero Perić 14.7.2014 2 223344 Ivana Marić Brig 8 Zadar 23000 Ž 12345 Automatika Nikola Antić 12.2.2014 2 223344 Ivana Marić Brig 8 Zadar 23000 Ž 23456 Fizika Pero Perić 14.7.2014 2

Primjer 2.5.1. Nenormalizirani oblik tablice IspitniRok

Nenormalizirani oblik podataka najčešće se dobije kao rezultat upita koji spaja više tablica.

Takav oblik podataka, kao u Primjeru 2.5.1, nije prikladan u standardnoj obradi zbog

učestalih ponavljanja podataka, bespotrebnog rasipanja diskovnog prostora, anomalija pri

operacijama dodavanja, izmjene i brisanja podataka itd.

Primjerice, dodavanje novog zapisa u tablicu iz Primjera 2.5.1 može biti problematično

ukoliko nemamo vrijednosti za sve stupce, a pogotovo one koji su primarni ključevi. Ukoliko

bi stupci JMBAG, KolegijSf i IspitDatum tvorili složeni primarni ključ (student može na

odabrani datum samo jednom pristupiti ispitu iz istog kolegija) onda bi pokušaj unošenja

samo novog grada i njegovog poštanskog broja bio neuspješan jer bismo time narušili

integritet baze podataka.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 45

Izmjena već postojećih zapisa također je problematična. Ukoliko bismo htjeli izmijeniti

adresu studenta Ante Antića, tu izmjenu bismo morali napraviti u svim zapisima te tablice

gdje god se spominje taj student. To pak negativno utječe na performanse. S druge strane,

izmjenom adrese samo u jednom zapisu narušili bismo konzistentnost baze podataka.

Slično bi se dogodilo i prilikom brisanja podataka. Ukoliko bi profesor Pero Perić dao otkaz

to bi moglo uzrokovati potpuni nestanak svih zapisa u kojima se spominje taj profesor.

Time bismo izgubili i pojedine vrijednosti još dvaju stupaca – KolegijSf i KolegijIme jer bi

se brisanjem tog profesora izbrisali i svi podaci o kolegijima koje je on predavao.

S obzirom da navedene anomalije mogu narušiti integritet i konzistentnost baze podataka,

ugroziti performanse te uzrokovati neželjeni gubitak podataka svakako je preporučljivo

provesti proces normalizacije.

Normalizacija se provodi slijedeći pravila definirana normalnim formama. Postoji šest

normalnih formi, a smatra se dovoljnim provesti prve tri normalne forme kako bi se tablica

smatrala normaliziranom.

Prva normalna forma (1NF) zadovoljena je ukoliko su ispunjeni sljedeći kriteriji:

▪ Ponavljajuće skupine podataka razdvojene su u zasebnim tablicama.

▪ Složeni stupci podijeljeni su u više jednostavnih stupaca.

▪ Svaka tablica ima primarni ključ.

JMBAG Student UlicaBr Grad BrPoste Spol KolegijSf KolegijIme Profesor IspitDatum Ocjena 112233 Ante Antić Vrbik 2 Zagreb 10000 M 12345 Automatika Nikola Antić 12.2.2014 3 112233 Ante Antić Vrbik 2 Zagreb 10000 M 23456 Fizika Pero Perić 13.2.2014 1 112233 Ante Antić Vrbik 2 Zagreb 10000 M 23456 Fizika Pero Perić 14.7.2014 2 223344 Ivana Marić Brig 8 Zadar 23000 Ž 12345 Automatika Nikola Antić 12.2.2014 2 223344 Ivana Marić Brig 8 Zadar 23000 Ž 23456 Fizika Pero Perić 14.7.2014 2

Primjer 2.5.2. Ponavljajuće skupine podataka tablice IspitniRok

Iz nenormaliziranog oblika tablice mogu se prepoznati dvije skupine ponavljajućih

podataka. Prva opisuje studenta, a druga održani ispit. Stoga ćemo umjesto početne

tablice sada imati dvije nove tablice: Student i Ispit.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 46

JMBAG Ime Prezime Ulica KucniBroj Grad PostanskiBroj Spol 112233 Ante Antić Vrbik 42 Zagreb 10000 M 223344 Ivana Marić Brig 12 Zadar 23000 Ž

Primjer 2.5.3. 1NF – tablica Student

Tablica Student sadržavala je složene stupce Student i UlicaBr. Prvi stupac podijeljen je u

dva stupca Ime i Prezime, a drugi u stupce Ulica i KucniBroj, čime smo izbjegli prisunost

više od jednog podatka u stupcu. I konačno, primarni je ključ ove tablice stupac JMBAG

jer pomoću njega moguće je o jednoznačno odrediti svaki zapis u tablici.

JMBAG KolegijSf KolegijIme ProfesorIme ProfesorPrezime IspitDatum Ocjena 112233 12345 Automatika Nikola Antić 12.2.2014 3 112233 23456 Fizika Pero Perić 13.2.2014 1 112233 23456 Fizika Pero Perić 14.7.2014 2 223344 12345 Automatika Nikola Antić 12.2.2014 2 223344 23456 Fizika Pero Perić 14.7.2014 2

Primjer 2.5.4. 1NF – tablica Ispit

Slično se dogodilo i u tablici Ispit koja umjesto složenog stupca Profesor sada sadrži stupce

ProfesorIme i ProfesorPrezime. Primarni ključ sastoji se od triju stupca JMBAG, KolegijSf

i IspitDatum jer jedino kombinacijom tih triju stupaca jednoznačno možemo odrediti svaki

zapis u toj tablici.

Tablicama Student i Ispit zadovoljena je prva normalna forma (1NF). Da bismo zadovoljiti

drugu normalnu formu (2FN) potrebno je ispuniti sljedeće kriterije:

▪ Tablica već zadovoljava 1NF.

▪ Svi stupci koji nisu primarni ključevi ovise o svim dijelovima primarnog ključa.

Također, postoji pravilo da je tablica u 2NF ukoliko je već u 1NF te je njen primarni ključ

definiran samo jednim stupcem. [22] Upravo je to slučaj s tablicom Student iz Primjera

2.5.3, pa je potrebno samo provjeriti tablicu Ispit iz Primjera 2.5.4.

U tablici Ispit potrebno je provjeriti stupce KolegijIme, ProfesorIme, ProfesorPrezime i

Ocjena te utvrditi koji od njih nisu u potpunosti ovisni o svim dijelovima primarnog ključa.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 47

Stupac KolegijIme jedini je takav stupac jer je ovisan samo o stupcu KolegijSf, a ne i o

ostalim dijelovima primarnog ključa. Štoviše, stupac KolegijIme suvišan je upravo zbog

stupca KolegijSf pa ga je potrebno izbaciti iz tablice Ispit te smjestiti u novu tablicu.

JMBAG KolegijSf ProfesorIme ProfesorPrezime IspitDatum Ocjena

112233 12345 Nikola Antić 12.2.2014 3

112233 23456 Pero Perić 13.2.2014 1

112233 23456 Pero Perić 14.7.2014 2 Sifra Ime

223344 12345 Nikola Antić 12.2.2014 2 12345 Automatika

223344 23456 Pero Perić 14.7.2014 2 23456 Fizika

Primjer 2.5.5. 2NF - tablice Ispit i Kolegij

Konačno, da bismo provjerili zadovoljava li tablica treću normalnu formu (3NF) potrebno je

ispuniti sljedeće kriterije:

▪ Tablica već zadovoljava 2NF.

▪ Svi stupci koji nisu primarni ključevi ne smiju ovisiti o bilo kojim drugim stupcima

koji nisu primarni ključevi.

U tablici Student iz primjera 2.5.3, koja ujedno zadovoljava i 2NF, može se primijetiti

međusobnu ovisnost neključnih stupaca Grad i PostanskiBroj. Ukoliko se promijeni naziv

grada, to će utjecati i na promjenu poštanskog broja i obrnuto. Zbog toga je suvišne stupce

potrebno izbaciti iz tablice Student i prebaciti u novu tablicu.

JMBAG Ime Prezime Ulica KucniBroj PostanskiBroj Spol PostanskiBroj Naziv

112233 Ante Antić Vrbik 42 10000 M 10000 Zagreb

223344 Ivana Marić Brig 12 23000 Ž 23000 Zadar

Primjer 2.5.6. 3NF - tablice Student i Grad

Tablica Student sada sadrži samo stupac PostanskiBroj koji ima ulogu stranog ključa u

vezi "jedan prema više" s tablicom Grad.

Tablica Ispit iz Primjera 2.5.5 također ima dva neključna stupca koji su međusobno ovisni,

a to su stupci ProfesorIme i ProfesorPrezime. Ukoliko se promijeni ime profesora koji

održava ispit, to vjerojatno znači i promjenu prezimena (i obrnuto) jer je riječ o sasvim

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 48

drugom profesoru. Zbog toga je ta dva stupca potrebno izbaciti iz tablice Ispit i smjestiti ih

u novu tablicu, po uzoru na Primjer 2.5.6.

JMBAG KolegijSf ProfesorID IspitDatum Ocjena

112233 12345 1 12.2.2014 3

112233 23456 2 13.2.2014 1

112233 23456 2 14.7.2014 2 ID Ime Prezime

223344 12345 1 12.2.2014 2 1 Nikola Antić

223344 23456 2 14.7.2014 2 2 Pero Perić

Primjer 2.5.7. 3NF - tablice Ispit i Profesor

Općenito se smatra da nije potrebno normalizirati dalje od 3NF jer su sada uklonjene sve

anomalije pri dodavanju, izmjeni i brisanju podataka.

Slika 2.5.1. Tablice i veze nakon provođenja 3NF

Konačni rezultat normalizacije nakon provođenja 3NF prikazan je slikom 2.5.1. Baza

podataka u ovom obliku osigurava bolji integritet podataka uz minimalnu redundanciju.

Ipak, veći broj tablica u konačnici uzrokuje slabije performanse baze podataka zbog

potrebe spajanja tablica pri izvršavanju SQL upita.

2.6. Analiza podataka SQL upitima

Dizajn baze podataka izrazito je bitan prilikom analize podataka jer izravno utječe

na način na koji se dohvaćaju podaci. Štoviše, loš dizajn najčešće će uzrokovati sporo

izvršavanje upita zbog nepotrebnog spajanja jedne ili više tablica kako bi se došlo do

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 49

željenog rezultata. Za primjer analize podataka u nastavku ćemo koristiti fizički model

podataka sa Slike 2.3.7.

Zadatak 2.6.1

Koliko računa ima koji kupac? Za svakog kupca potrebno je u zasebnom retku vratiti ime

kupca i ukupan broj njegovih računa.

SELECT Kupac.ime, COUNT(*) FROM Racun INNER JOIN Kupac ON Kupac.id = Racun.idkupac GROUP BY Kupac.ime

Popis svih računa nalazi se u tablici Racun. Zato se prilikom analize računa podaci čitaju

upravo iz te tablice (izraz "FROM Racun"). Međutim, u toj tablici ne postoji ime kupca već

tek strani ključ pomoću kojeg se ime kupca može doznati. Upravo zbog toga bilo je

potrebno spojiti (INNER JOIN) tablice Racun i Kupac pomoću primarnog ključa tablice

Kupac (Kupac.id) i stranog ključa u tablici Racun (Racun.idkupac).

Funkcija COUNT jedna je od agregatnih funkcija, a njima se vrše upiti nad skupinama

zapisa. Konkretno, COUNT (*) vraća ukupan broj svih zapisa u tablici. Budući da se uz tu

agregatnu funkciju ispisuje i ime kupca (Kupac.ime) onda je krajnji rezultat potrebno

grupirati (GROUP BY) po imenu kupca kako bi agregatna funkcija COUNT za svakog od

njih mogla vratiti njegov broj zapisa (računa).

Zadatak 2.6.2

Koliko novaca potroši svaki od kupaca pri svakom posjetu dućanu? Za svakog kupca

potrebno je u zasebnom retku vratiti ime kupca i prosječno potrošenu količinu novca.

SELECT Kupac.ime, AVG(Racun.ukupnitrosak) from Racun INNER JOIN Kupac on Kupac.id = Racun.idkupac GROUP BY Kupac.ime

Alternativa Zadatku 2.6.1: umjesto brojanja svih računa iz tablice Racun (COUNT *) koristi

se agregatna funkcija AVG kako bi se vratila prosječna vrijednost ukupnog troška računa

po pojedinom kupcu. U SQL Serveru moguće je koristiti i neke druge agregatne funkcije

poput MIN, MAX, SUM itd.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 50

Zadatak 2.6.3

Vratite prvih 5 najčešće posjećenih dućana. Za svaki dućan potrebno je vratiti njegov naziv

i ukupan broj posjeta, a rezultat sortirati po učestalosti posjeta (od dućana s najviše posjeta

prema dućanima s manje posjeta).

SELECT TOP 5 Ducan.naziv, COUNT(*) AS BrojPosjeta FROM Racun INNER JOIN Ducan on Ducan.sifra = Racun.sifraducana GROUP BY Ducan.naziv ORDER BY BrojPosjeta DESC

Da bismo vratili samo prvih 5 zapisa koristi se izraz "TOP 5", a da bismo odredili kojih točno

5 zapisa rezultat upita potrebno je sortirati (ORDER BY) po broju posjeta. Izrazom ORDER

BY sortiraju se stupci, pa je stoga potrebno imenovati stupac koji se dobije kao rezultat

agregatne funkcije COUNT izrazom "AS BrojPosjeta". Također, dodatkom ključne riječi

DESC podaci se sortiraju od najveće vrijednosti prema manjoj.

Zadatak 2.6.4

Za svakog kupca potrebno je vratiti broj posjeta po pojedinom dućanu. U rezultatu se treba

nalaziti ime kupca, naziv dućana te broj posjeta. Također, rezultat je potrebno sortirati po

učestalosti posjeta (od dućana s najviše posjeta prema dućanima s manje posjeta).

SELECT Kupac.ime, Ducan.naziv AS Ducan, count(*) AS BrojPosjeta FROM Racun INNER JOIN Ducan on Ducan.sifra = Racun.sifraducana INNER JOIN Kupac on Kupac.id = Racun.idkupac GROUP BY Kupac.ime, Ducan.naziv ORDER BY BrojPosjeta DESC

Prikazani zadatak blago je proširenje Zadatka 2.6.3. Razlika je tek u tome što se rezultat

grupira po dva podatka (Kupac.ime i Ducan.naziv), zbog čega je potrebno napraviti dva

spajanja (INNER JOIN) kako bi se dohvatili potrebni podaci.

Zadatak 2.6.5

Koji artikl je najviše puta kupljen u 2015. godini? Potrebno je vratiti naziv artikla i količinu.

SELECT TOP 1 Artikl.naziv AS Artikl, COUNT(Artikl.sifra) AS Kolicina FROM Racun INNER JOIN Stavka ON Stavka.sifraracuna = Racun.sifra INNER JOIN Artikl ON Artikl.sifra = Stavka.sifraartikla WHERE Racun.datum BETWEEN '1.1.2015' AND '12.31.2015' GROUP BY Artikl.naziv ORDER BY Kolicina DESC

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 51

Da bismo došli do traženog rezultata potrebno je izvršiti pregled svih računa (FROM

Racun). Pregledom modela sa Slike 2.3.7 može se primijetiti da svaki račun sadrži stavke,

a svaka stavka pojedini artikl pa je istim tim redoslijedom potrebno povezati (INNER JOIN)

tablice Racun, Stavka i Artikl. Konačni rezultat filtrira se izrazom WHERE te se sortira po

učestalosti kupljenog artikla. Konačno, izrazom "TOP 1" vraćaju se podaci samo za

najčešće kupljeni artikl.

Zadatak 2.6.6

Potrebno je vratiti prvih 5 tipova artikala koji su se najrjeđe kupovali u 2015. godini. U

rezultatu je za svaki od tipova artikala potrebno vratiti naziv i kupljenu količinu.

SELECT TOP 5 Tipartikla.naziv, COUNT(Tipartikla.id) AS Kolicina FROM Racun INNER JOIN Stavka ON Stavka.sifraRacuna = Racun.sifra INNER JOIN Artikl ON Artikl.sifra = Stavka.sifraArtikla INNER JOIN Tipartikla ON TipArtikla.id = Artikl.idtip WHERE Racun.datum BETWEEN '1.1.2015' AND '12.31.2015' GROUP BY Tipartikla.naziv ORDER BY Kolicina

Vrlo slično kao i u Zadatku 2.6.5, analizom podataka iz tablice Racun potrebno je doći do

podataka u tablici TipArtikla. Pregledom modela sa Slike 2.3.7 može se primijetiti da je u

tu svrhu potrebno spajanje (INNER JOIN) tablica Racun->Stavka->Artikl->TipArtikla po

njihovim primarnim i stranim ključevima.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 52

3. Objekti baze podataka

3.1. Tablice

Komponente baze podataka koje se koriste za spremanje i manipulaciju podacima

nazivamo objektima baze podataka. Većina baza podataka sadrži nekoliko zajedničkih

tipova objekata poput tablica, pogleda (eng. views), indeksa itd. Međutim, neke baze

podataka mogu sadržavati i sebi svojstvene tipove objekata poput izvještaja (eng. reports),

obrazaca (eng. forms) i makroa, kao što je slučaj u Microsoft Access bazi podataka.

Tablice su tipovi objekata koji služe za spremanje podataka. Sastoje se od redaka i

stupaca, gdje jedan redak sadrži jedan zapis. Dijelovi pojedinog zapisa identificirani su

stupcima koji imaju svoje ime i tip, a dodatno mogu biti opisani ograničenjima (eng.

constraints) i svojstvima poput maksimalne duljine, podrazumijevane vrijednosti itd.

Tablice se kreiraju izvršavanjem DDL SQL upita, kao u Primjeru 1.2.2.

Slika 3.1.1. Kreiranje tablice korištenjem SSMS alata

SQL Server Management Studio (SSMS) također nudi mogućnost jednostavnog kreiranja

i uređivanja tablica bilo korištenjem interaktivnog grafičkog sučelja (Slika 3.1.1) ili izravnim

izvršavanjem SQL upita. U konačnici, i pristup preko interaktivnog grafičkog sučelja

rezultirat će pozadinskim generiranjem i izvršavanjem odgovarajućih SQL upita, kao u

sljedećem primjeru.

Primjer 3.1.1 – Generirani SQL upit za kreiranje tablice 'Osoba'

CREATE TABLE [dbo].[Osoba]( [OIB] [nvarchar](50) NOT NULL, [Ime] [nvarchar](50) NULL, [Prezime] [nvarchar](50) NULL,

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 53

[Starost] [int] NULL, CONSTRAINT [PK_Osoba] PRIMARY KEY CLUSTERED ( [OIB] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

U generiranom SQL upitu može se vidjeti struktura tablice Osoba. Osim popisa stupaca s

pripadajućim tipovima, svojstvima i ograničenjima, također se vide ključevi i indeksi te svi

drugi dodatni objekti i svojstva tablice Osoba. SQL upit iz Primjera 3.1.1 može se generirati

za svaku postojeću tablicu na način da se u SSMS alatu desnim klikom na tablicu odabere

stavka "Script Table as / CREATE To".

Pri kreiranju tablice uvijek treba paziti na postojanost primarnog ključa. Iako nije nužno da

tablica mora imati primarni ključ njegovo nepostojanje može narušiti konzistentnost baze

podataka (pojava duplikata) te vrlo često može ukazivati na pogrešan dizajn i biti uzrokom

loših performansi pri pretraživanju i spajanju s drugim tablicama.

Ukoliko u tablici nema stupca ili kombinacije stupaca koji bi mogli biti primarni ključevi,

najčešće se dodaje novi cjelobrojni stupac (ID) sa svojstvom identiteta. Njegova vrijednost

automatski se određuje (povećava) svaki puta kada se dodaje novi zapis. Upravo zato on

je idealan kandidat za primarni ključ u takvim tablicama.

Slika 3.1.2. Primarni ključ sa svojstvom identiteta

Kreiranje navedenog primarnog ključa u SSMS alatu prikazano je Slikom 3.1.2. Cjelobrojni

stupac ID ima svojstvo identiteta ("Identity Specification = Yes"). Vrijednost ovog stupca za

prvi zapis u tablici definirana je izrazom „Identity Seed", a za svaki sljedeći zapis njegova

vrijednost uvećava se za broj definiran izrazom "Identity Increment". Tako će u ovom

slučaju vrijednost stupca ID započeti od 1, te će se za svaki sljedeći zapis uvećavati za 1.

Jednako tako mogli smo izvršiti i sljedeći SQL upit.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 54

ALTER TABLE NazivTablice ADD ID INT IDENTITY(1,1) PRIMARY KEY

Ako bismo htjeli da vrijednost stupca ID započinje od 2, a uvećava se za 5 izvršili bismo

sljedeći SQL upit.

ALTER TABLE NazivTablice ADD ID INT IDENTITY(2, 5) PRIMARY KEY

Svaka tablica može imati samo jedan stupac sa svojstvom identiteta. Čak i kada umetanje

novog zapisa u tablicu ne uspije ili se poništi (eng. rollback), dodijeljena vrijednost tom

stupcu smatra se iskorištenom te se za sljedeći zapis generira i dodjeljuje nova vrijednost.

Takav tijek događaja može uzrokovati "rupe" u nizu dodijeljenih vrijednosti, a one se mogu

dogoditi i zbog rušenja baze podataka ili resetiranja servera ukoliko je on u predmemoriju

(eng. cache) unaprijed već generirao i spremio neke vrijednosti za taj stupac. [23]

U svrhu očuvanja konzistentnosti i integriteta baze podataka u svakoj tablici moguće je

definirati pravila za podatke. Ona se implementiraju kao ograničenja (eng. constraints) nad

pojedinim stupcima tablice. Ograničenja su objekti baze podataka koji mogu biti tipa

PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE, DEFAULT, INDEX i CHECK.

Neka od ovih ograničenja međusobno se podrazumijevaju. Primjerice, ograničenje

PRIMARY KEY kombinacija je ograničenja NOT NULL i UNIQUE. Međutim, i stupac koji

nije primarni ključ može imati ta ograničenja. Ukoliko pak želimo napraviti UNIQUE

ograničenje nad kombinacijom dvaju ili više stupaca, to je moguće na više načina;

ALTER TABLE Osoba ADD CONSTRAINT UQ_JedinstvenoImePrezime UNIQUE(Ime, Prezime);

ili

CREATE UNIQUE INDEX IX_JedinstvenoImePrezime ON Osoba(Ime, Prezime);

U SSMS alatu oba ograničenja moguće je pronaći u popisima ključeva i indeksa tablice.

Ako je potrebno provjeravati intervale vrijednosti i karakteristike podataka (primjerice,

minimalna i maksimalna duljina) u pojedinim stupcima koristi se ograničenje tipa CHECK.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 55

Primjer 3.1.2 – CHECK ograničenja

-- Starost mora biti u intervalu [0, 100] ALTER TABLE [dbo].[Osoba] WITH CHECK ADD CONSTRAINT [CK_OsobaGodine] CHECK (([Starost]>=(0) AND [STAROST]<=(100))) -- Ime mora imati više od 0 i manje od 50 znakova ALTER TABLE [dbo].[Osoba] WITH CHECK ADD CONSTRAINT [CK_OsobaIme] CHECK ((len([Ime])>(0) AND len([Ime])<(50)))

Ograničenja tipa CHECK vidljiva su u SSMS alatu u popisu ograničenja tablice.

SQL Server može sadržavati i privremene tablice, a one se dijele na lokalne i globalne.

Privremene tablice smještene su u sistemskoj Tempdb bazi podataka i automatski se

uništavaju nakon što više nisu potrebne.

Primjer 3.1.3 – Kreiranje lokalne privremene tablice

CREATE TABLE #Privremena( ID INT IDENTITY(1,1) PRIMARY KEY, Zapis NVARCHAR(100) )

Naziv lokalne privremene tablice započinje znakom "#", a u Tempdb bazi podataka bit će

spremljena u sljedećem (skraćenom) obliku:

[dbo].[#Privremena_______________________________________________________000000000007]

Obično objekti unutar baze podataka mogu imati naziv do maksimalno 128 znakova.

Međutim, lokalne privremene tablice mogu imati naziv do 116 znakova, dok zadnjih 12

znakova dodjeljuje server. Naime, svaka lokalna privremena tablica dostupna je samo

jednoj konekciji, i to onoj u kojoj je napravljena. I druge konekcije također mogu kreirati

svoju lokalnu privremenu tablicu istog imena (#Privremena), a da bi server znao koja od

njih pripada kojoj konekciji koristi zadnjih 12 znakova kao identifikator konekcije.

Primjerice,

[dbo].[#Privremena_______________________________________________________000000000007]

[dbo].[#Privremena_______________________________________________________000000000008]

Sada izvršavanje upita

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 56

SELECT * FROM #Privremena

neće nužno dati isti rezultat. Jedna će se konekcija referencirati na privremenu tablicu sa

završnom oznakom 7, a druga konekcija na drugu tablicu.

Lokalna privremena tablica automatski se uništava iz Tempdb baze podataka nakon

završetka konekcije. Ukoliko je takva tablica kreirana unutar uskladištene procedure (eng.

stored procedure) automatski će biti uništena nakon njenog izvršavanja. Također ju je

moguće uništiti i "ručno" korištenjem naredbe DROP. [24]

Primjer 3.1.4 – Kreiranje globalne privremene tablice

IF NOT EXISTS(SELECT * FROM tempdb.sys.objects WHERE name = '##Privremena') CREATE TABLE ##Privremena( ID INT IDENTITY(1,1) PRIMARY KEY, Zapis NVARCHAR(100) )

Naziv globalne privremene tablice započinje znakovima "##". Za razliku od lokalne, ova

tablica vidljiva je i dostupna svim konekcijama. Njen vijek trajanja ograničen je trajanjem

konekcije u kojoj je kreirana ili se može ručno uništiti korištenjem naredbe DROP. Globalna

privremena tablica neće automatski biti uništena nakon završetka uskladištene procedure

u kojoj je kreirana, kao što je to slučaj s lokalnom privremenom tablicom.

Tablice mogu biti kreirane i korištene kao varijable. Tada su kao i sve druge varijable

vidljive samo unutar bloka naredbi, funkcije ili procedure u kojoj su kreirane.

Primjer 3.1.5 – Kreiranje tablice kao varijable

DECLARE @Privremena TABLE( ID INT IDENTITY(1,1) PRIMARY KEY, Zapis NVARCHAR(100) )

Ovakvi tipovi tablica kao u Primjeru 3.1.5 ne mogu sadržavati strane ključeve niti se za njih

mogu kreirati objekti poput okidača (eng. triggers). Također, tablice kao varijable mogu se

koristiti kao parametri uskladištenih procedura, a u tom slučaju njihov sadržaj dostupan je

samo za čitanje.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 57

3.2. Pogledi

Pogled (eng. view) objekt je baze podataka koji sadrži tekst spremljenog SELECT

upita. Najčešće se koristi kako bismo SELECT upitom mogli povezati podatke iz više

različitih tablica te ih na pojednostavljen način prikazati i koristiti kao da su smješteni samo

u jednoj (virtualnoj) tablici. Pogled (njegov SELECT upit) ne može se izvršiti sam od sebe,

već se pri njegovom referenciranju unutar nekog drugog SQL upita ili pogleda stvara

rezultantna virtualna tablica.

Kao i u slučaju tablica, poglede je moguće kreirati interaktivno korištenjem SSMS alata ili

izravnim izvršavanjem SQL upita.

Slika 3.2.1. Kreiranje i izvršavanje pogleda korištenjem SSMS alata

U primjeru sa Slike 3.2.1 prikazan je način izrade pogleda koji ispisuje sve studente i

njihove upisane kolegije. Podaci se čitaju iz međutablice Polaznik, a u njoj su samo strani

ključevi tablica Student i Kolegij. Stoga su u pogledu te tri tablice povezane na način kako

je prikazano prvim dijelom slike (oznaka 1).

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 58

Nakon odabira tablica potrebno je odrediti stupce koji će biti vidljivi kao rezultat izvršavanja

pogleda (oznaka 2). Već pri odabiru stupaca automatski se generira i nadopunjuje

odgovarajući SQL upit pogleda (oznaka 3). U konačnici, izvršavanjem pogleda, tj. njegovog

SQL upita, stvara se virtualna tablica s rezultatima (oznaka 4).

Primjer 3.2.1 – Kreiranje pogleda izvršavanjem SQL upita

CREATE VIEW [dbo].[vPolaznici] AS SELECT TOP (100) PERCENT dbo.Polaznik.JMBAG, dbo.Student.Ime, dbo.Student.Prezime, dbo.Polaznik.SifraKolegija, dbo.Kolegij.Naziv AS NazivKolegija FROM dbo.Polaznik

INNER JOIN dbo.Student ON dbo.Student.JMBAG = dbo.Polaznik.JMBAG INNER JOIN dbo.Kolegij ON dbo.Polaznik.SifraKolegija = dbo.Kolegij.Sifra

Ukoliko bismo pogled sa Slike 3.2.1 kreirali izravno izvršavanjem SQL upita, taj upit

izgledao bi kao u Primjeru 3.2.1. Općenito, pogled se kreira na sljedeći način:

CREATE VIEW Naziv_sheme.Naziv_pogleda ([Aliasi stupaca)] AS SELECT upit;

Iako je to u praksi rijetko, pri kreiranju pogleda moguće je navesti aliase rezultantnih

stupaca. Tako bismo kreiranje pogleda iz Primjera 3.2.1 mogli napraviti i na sljedeći način:

Primjer 3.2.2 – Kreiranje pogleda sa unaprijed definiranim aliasima stupaca

CREATE VIEW [dbo].[vPolaznici] (JMBAG, Ime, Prezime, SifraKolegija, NazivKolegija) AS SELECT TOP (100) PERCENT dbo.Polaznik.JMBAG, dbo.Student.Ime, dbo.Student.Prezime, dbo.Polaznik.SifraKolegija, dbo.Kolegij.Naziv FROM dbo.Polaznik

INNER JOIN dbo.Student ON dbo.Student.JMBAG = dbo.Polaznik.JMBAG INNER JOIN dbo.Kolegij ON dbo.Polaznik.SifraKolegija = dbo.Kolegij.Sifra

Razlika između primjera 3.2.1 i 3.2.2 u tome je što zadnji primjer u SELECT upitu ne navodi

alias za stupac Kolegij.Naziv budući da su aliasi svih rezultantnih stupaca već unaprijed

definirani pri kreiranju pogleda. S druge strane, u Primjeru 3.2.1 nisu unaprijed definirani

aliasi rezultantnih stupaca pa se unutar SELECT upita "ručno" dodijelio alias stupcu

Kolegij.Naziv.

Nakon kreiranja pogleda, moguće ga je koristiti u SQL upitima. Primjerice,

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 59

Primjer 3.2.3 – Korištenje pogleda u SQL upitu

SELECT * FROM [dbo].[vPolaznici] WHERE JMBAG <= 2 ORDER BY JMBAG

Pogledi imaju više ograničenja, a jedno od njih je i nepouzdano korištenje izraza ORDER

BY. Ukoliko je potrebno sortirati zapise koji se dobiju kao rezultat izvršavanja pogleda to

se radi korištenjem izraza ORDER BY pri referenciranju pogleda iz nekog drugog SQL

upita (Primjer 3.2.3), a ne korištenjem tog izraza u samoj definiciji pogleda. [25]

Od ostalih ograničenja i nedostataka pogleda mogu se spomenuti i sljedeći:

▪ Nemogućnost kreiranja pogleda s parametrima.

▪ Nemogućnost korištenja varijabli i privremenih tablica unutar pogleda.

▪ Pogled je samo jedan SELECT upit.

▪ Unutar pogleda ne mogu se stvarati nove tablice (SELECT INTO).

Iako je rezultat pogleda virtualna tablica, nju je također vrlo često moguće ažurirati. Takvi

ažurirajući pogledi (eng. updatable views) zapravo ažuriraju tablice na osnovu kojih je

nastao rezultat pogleda.

Primjer 3.2.4 – Ažuriranje pogleda

SELECT * FROM vPolaznici UPDATE vPolaznici SET Ime = 'Anita' WHERE JMBAG = 1 and SifraKolegija = 1 SELECT * FROM vPolaznici

Izvršavanjem prvog SELECT upita u Primjeru 3.2.4 prvi se puta izvršava pogled vPolaznici.

Kao njegov rezultat dobit ćemo set podataka, tj. virtualnu tablicu sa sljedećim sadržajem.

JMBAG Ime Prezime SifraKolegija NazivKolegija

1 Ante Antić 1 Matematika

1 Ante Antić 2 Fizika

2 Ivica Ivić 2 Fizika

Tablica 3.2.1. Rezultat prvog izvršavanja pogleda vPolaznici

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 60

U narednoj UPDATE naredbi pogled je ažuriran na način da je stupcu Ime dodijeljena

vrijednost "Anita". Dodatno, uvjetom u UPDATE naredbi definirali smo da se ažuriranje

ograničava samo na prvi zapis pogleda (JMBAG vrijednost = 1, SifraKolegija = 1).

JMBAG Ime Prezime SifraKolegija NazivKolegija

1 Anita Antić 1 Matematika

1 Anita Antić 2 Fizika

2 Ivica Ivić 2 Fizika

Tablica 3.2.2. Rezultat drugog izvršavanja pogleda vPolaznici

Sada rezultat drugog izvršavanja pogleda vPolaznici može djelovati zbunjujuće (Tablica

3.2.2). Iako je možda očekivano da će biti ažuriran samo prvi zapis pogleda, zapravo su

ažurirani svi njegovi zapisi u kojima je JMBAG vrijednost jednaka 1 (prijašnje ime "Ante").

Razlog je upravo u tome što ažuriranje pogleda zapravo znači ažuriranje tablica na osnovu

kojih je nastao rezultat tog pogleda.

U pogledu vPolaznici (Primjer 3.2.1) definirano je da se vrijednost stupca Ime čita iz tablice

Student. Stoga, ažuriranje pogleda, odnosno vrijednosti stupca Ime, znači ažuriranje

referentnog zapisa u tablici Student, nakon čega se ponovnim izvršavanjem pogleda

svugdje vidi nova vrijednost tog stupca ("Anita"). Rezultat pogleda tek referira na podatke

u drugim tablicama. Zato ažuriranje jedne vrijednosti pogleda najčešće kao posljedicu ima

izmjenu rezultata pogleda na više mjesta.

I ažurirajući pogledi imaju neka ograničenja i nedostatke. Primjerice, naredba UPDATE

može ažurirati samo jednu referentnu tablicu pogleda. Probleme pri ažuriranju mogu

uzrokovati i agregatne funkcije te podupiti unutar pogleda koji sadrže derivirane tablice.

Također, iz pogleda moguće je brisati podatke naredbom DELETE samo ukoliko je pogled

baziran na jednoj tablici.

Unatoč svim nedostatcima, pogledi ipak nude neke sigurnosne prednosti. Unutar pogleda

moguće je sakriti informacije o svim shemama, referentnim tablicama i drugim korištenim

pogledima, a korisniku dati dozvolu samo za čitanje podataka dobivenih pogledom.

Također, SQL Server dopušta i enkripciju definicije pogleda, procedure i funkcije.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 61

Primjer 3.2.5 – Kreiranje kriptiranog pogleda

CREATE VIEW [dbo].[vPolaznici] WITH ENCRYPTION AS SELECT TOP (100) PERCENT dbo.Polaznik.JMBAG, dbo.Student.Ime, dbo.Student.Prezime, dbo.Polaznik.SifraKolegija, dbo.Kolegij.Naziv AS NazivKolegija FROM dbo.Polaznik

INNER JOIN dbo.Student ON dbo.Student.JMBAG = dbo.Polaznik.JMBAG INNER JOIN dbo.Kolegij ON dbo.Polaznik.SifraKolegija = dbo.Kolegij.Sifra

Za razliku od inicijalnog pogleda iz Primjera 3.2.1, ovom pogledu više nije moguće dohvatiti

definiciju. Međutim, on je i dalje funkcionalan te se može koristiti u drugim SQL upitima i

pogledima. Za kriptirani pogled, SSMS alat podrazumijevano neće omogućiti generiranje

skripte za ažuriranje jer ne može dohvatiti njegovu trenutnu definiciju, ali je zato moguće

takvu skriptu "ručno" napisati u slučaju potrebe izmjene definicije pogleda.

3.3. Grupirajući i negrupirajući indeksi

Veće količine podataka u tablicama i pogledima usporavaju izvršavanje SQL upita

zbog sporije pretrage i dohvata tih podataka. Primjerice, pretraga nekog podatka u skupu

od par milijuna zapisa u najgorem slučaju može značiti sekvencijalni pregled svih zapisa

sve dok se ne pronađe traženi podatak. Takav način pretrage naziva se skeniranje (eng.

table scan) te najčešće predstavlja "najskuplji" način pretrage u smislu potrošnje

procesorskog vremena. Da bismo ga izbjegli koristimo indekse, a najčešći su tipovi indeksa

grupirajući (eng. clustered) i negrupirajući (eng. non-clustered) indeksi.

Grupirajući indeks možemo zamisliti kao telefonski imenik u kojem su svi telefonski brojevi

poredani po prezimenu. Kada bismo željeli pronaći telefonski broj neke osobe na osnovi

njenog prezimena, do rezultata bismo vrlo brzo došli binarnom pretragom. Međutim, kada

bismo telefonski imenik htjeli pretraživati po imenu osobe, morali bismo sekvencijalno

pregledavati svaki pojedini zapis.

Grupirajućim indeksom definira se fizički razmještaj zapisa u tablici, a može biti samo jedan

u zadano vrijeme. Primjerice, ne možemo u isto vrijeme zapise u tablici (telefonskom

imeniku) imati sortirane po imenu i po prezimenu jer bi za to trebalo imati dvije različite

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 62

tablice (telefonska imenika). Zbog toga u tablici može postojati samo jedan grupirajući

indeks, a ukoliko je potrebno stvoriti drugi prvi se prethodno mora izbrisati.

Slika 3.3.1. Struktura tablica Zaposlenik

Da bismo uvidjeli prednosti grupirajućeg indeksa možemo se poslužiti tablicom Zaposlenik

sa Slike 3.3.1. Ta tablica nema primarni ključ! Naime, pri dodavanju primarnog ključa

automatski se stvara i grupirajući indeks nad stupcem primarnog ključa, a to sada želimo

izbjeći kako bismo mogli testirati performanse prije i poslije dodavanja indeksa.

Za potrebe testiranja u tablici Zaposlenik nalazi se popis od 10000 zaposlenika sa slučajno

dodijeljenim iznosima plaće i mjesecima radnog staža.

Primjer 3.3.1 – Pretraga svih zaposlenika čija plaća iznosi više od 5000 kn

SELECT * FROM Zaposlenik WHERE IznosPlace > 5000

Na koji način se izvršava upit iz Primjera 3.3.1 najbolje pokazuje njegov izvedbeni plan

(eng. execution plan).

Slika 3.3.2. Izvedbeni plan – skeniranje tablice

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 63

SQL Server koristi Query Optimizer kako bi pronašao najbolji izvedbeni plan za izvršavanje

nekog SQL upita. Ovisno o količini podataka, njihovom fizičkom razmještaju, postojećim

indeksima, vezama među tablicama, statistikama itd. Query Optimizer stvara mnogo

kandidata za najbolji izvedbeni plan te se u konačnici odlučuje na jednog od njih.

U upitu iz Primjera 3.3.1 Query Optimizer odlučio se na jedini mogući izvedbeni plan, tj.

skeniranje tablice. Kako ne postoji indeks nad stupcem IznosPlace jedini način za

pronalazak svih plaća većih od 5000 kn jest da se pregleda svaki zapis u tablici. Upravo to

je i prikazano Slikom 3.3.2 gdje se vidi da je za potrebe izvršavanja tog upita pročitano

(provjereno) svih 10000 zapisa, a da ih tek 4914 zadovoljava traženi kriterij. Kako bismo

izbjegli skeniranje tablice, odnosno pregled svih 10000 zapisa, možemo kreirati grupirajući

indeks nad stupcem IznosPlace.

Primjer 3.3.2 – Kreiranje grupirajućeg indeksa

CREATE CLUSTERED INDEX IX_IznosPlace on Zaposlenik(IznosPlace ASC)

Nakon kreiranja indeksa IX_IznosPlace svi zapisi u tablici Zaposlenik fizički su sortirani po

vrijednosti stupca IznosPlace, što se jednostavno može provjeriti sljedećim upitom:

SELECT * FROM Zaposlenik

Kreirani indeks IX_IznosPlace nema ograničenje tipa UNIQUE. Međutim, ako je grupirajući

indeks kreiran automatski kao posljedica dodavanja primarnog ključa tada

podrazumijevano uvijek ima takvo ograničenje. Zbog toga sada je moguća prisutnost

dvostrukih vrijeednosti u stupcu IznosPlace jer više zaposlenika može imati isti iznos plaće.

Slika 3.3.3. Indeks i statistika indeksa

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 64

SQL Server će za svaki indeks stvoriti i statistički objekt (Slika 3.3.3). Njega koristi Query

Optimizer pri kreiranju i odabiru izvedbenih planova jer se u statističkom objektu nalaze

informacije o distribuciji podataka unutar tablice. Na osnovi tih informacija može se

procijeniti kardinalnost, tj. očekivani broj vraćenih zapisa nakon izvršenja upita, što Query

Optimizer može iskoristiti pri odlučivanju o optimalnom načinu pretrage tih podataka. [26]

I konačno, nakon kreiranja grupirajućeg indeksa IX_IznosPlace, ponovno izvršavanje upita

iz Primjera 3.3.1 sada će rezultirati puno bržim izvedbenim planom.

Slika 3.3.4. Izvedbeni plan – pretraga po grupirajućem indeksu

Izvedbeni plan kao na Slici 3.3.4 smatra se optimalnim jer nije utrošeno nimalo

procesorskog vremena na nepotrebna čitanja. Umjesto čitanja svih 10000 zapisa

(skeniranja tablice) pročitani su samo oni zapisi koji trebaju biti vraćeni kao rezultat upita.

Rezultat je to postojanja grupirajućeg indeksa koji omogućava pretragu podataka

pretraživanjem indeksa (eng. index seek).

Zbog činjenice da se zapisi u tablici fizički sortiraju po grupirajućem indeksu (sama tablica

predstavlja indeks), Query Optimizer se u određenim situacijama može odlučiti na

skeniranje grupirajućeg indeksa (eng. clustered index scan). Primjerice, u upitu

SELECT * FROM Zaposlenik

ne postoji uvjet (klauzula WHERE) pa se pristupa metodi skeniranja grupirajućeg indeksa.

I metoda skeniranje tablice bi u konačnici pročitala sve zapise, ali skeniranje grupirajućeg

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 65

indeksa je brže budući da su zapisi sada organizirani po strukturi balansiranog B-stabla

(eng. B-tree), kao na Slici 3.3.5.

Slika 3.3.5. Struktura grupirajućeg indeksa (B-stablo) [27]

Pri pretraživanju podataka pomoću grupirajućeg indeksa prvo se provjerava korijenski čvor

(eng. root node), odnosno svi zapisi u njegovoj indeksnoj stranici (eng. index rows). Svaki

zapis u indeksnoj stranici sadrži ključnu vrijednost i pokazivač na jedan od međučvorova

na srednjoj razini (eng. intermediate level) ili pokazivač na odgovarajući list (eng. leaf

node/data page) ukoliko je traženi podatak pronađen. Također, stranice na pojedinim

razinama međusobno su povezane dvostruko povezanim listama, što doprinosi boljim

performansama pri operaciji skeniranja grupirajućeg indeksa.

Zbog ovakve strukture, metoda skeniranja grupirajućeg indeksa brža je od metode

skeniranja tablice. Ukoliko nema grupirajućeg indeksa, podaci su spremljeni kao

neorganizirana gomila (eng. heap). Dohvat podataka tada je sporiji jer ne postoje

pokazivači iz jedne stranice na drugu, već se za dohvat svake sljedeće stranice mora

koristiti IAM (Index Allocation Map).

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 66

Zbog ograničenja tablice na tek jedan grupirajući indeks vrlo se često moraju koristiti i

negrupirajući (eng. non-clustered) indeksi. Počevši od SQL Servera 2008 u svakoj tablici

može postojati čak i do 999 negrupirajućih indeksa.

Iako indeksi ubrzavaju pretragu podataka, sa svakim novim indeksom padaju performanse

pri operacijama dodavanja, izmjene i brisanja podataka. Nakon svake od tih operacija

najčešće će trebati ažurirati i sve postojeće indekse, što može oduzeti mnogo

procesorskog vremena. Zbog toga indekse treba pažljivo odabrati kako upravo oni ne bi

bili uzrokom loših performansi baze podataka.

Slika 3.3.6. Struktura negrupirajućeg indeksa [28]

Negrupirajući indeks kreira se na vrlo sličan način kao i grupirajući indeks.

Primjer 3.3.3 – Kreiranje negrupirajućeg indeksa

CREATE /* NONCLUSTERED */ INDEX IX_RadniStaz on Zaposlenik (MjeseciRadnogStaza)

Za razliku od grupirajućeg indeksa, podaci u tablici Zaposlenik ovaj puta nisu fizički

sortirani po indeksu (indeksiranom stupcu) već se stvara nova podatkovna struktura B-

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 67

stabla za svaki negrupirajući indeks (Slika 3.3.6). Ta struktura vrlo je slična strukturi B-

stabla grupirajućeg indeksa, s razlikom da listovi B-stabla negrupirajućeg indeksa sadrže

tek pokazivače na podatke umjesto stvarnih podataka.

SQL Server omogućava i kreiranje filtriranih negrupirajućih indeksa. Njih se koristi u

slučajevima kada se učestalo rade pretrage određenog podskupa podataka.

Primjer 3.3.4 – Kreiranje filtriranog negrupirajućeg indeksa

CREATE INDEX IX_PostojeciRadniStaz on Zaposlenik (MjeseciRadnogStaza) WHERE MjeseciRadnogStaza IS NOT NULL

Pretpostavimo da učestalo radimo upite bazirane na radnom stažu zaposlenika. Korištenje

klasičnog negrupirajućeg indeksa uzrokovalo bi indeksiranje svih zapisa u tablici

Zaposlenik. Međutim, ukoliko nemamo koristi od nepostojećih podataka (NULL vrijednosti

u stupcu MjeseciRadnogStaza) onda nema niti potrebe da indeksiramo takve zapise.

Stoga, filtriranim negrupirajućim indeksom iz Primjera 3.3.4 indeksiramo samo one zapise

o zaposlenicima koji imaju podatak o radnom stažu.

Filtrirani negrupirajući indeks omogućuje bržu pretragu jer je njegovo B-stablo manje

veličine. Također, ažuriranje podataka ne mora svaki puta uzrokovati i ažuriranje

filtrirajućeg negrupirajućeg indeksa, pa su i performanse pri radu sa podacima bolje.

Učestale promjene nad podacima (dodavanje, izmjena i brisanje) mogu uzrokovati

fragmentaciju indeksa. Indeksne stranice najčešće postanu razbacane po disku ili nisu

dobro popunjene (koristi se više stranica nego što je potrebno), što u konačnici loše utječe

na performanse. SQL Server tada nudi mogućnost reorganizacije ili obnove indeksa.

Primjer 3.3.5 – Reorganizacija i obnova indeksa

ALTER INDEX IX_RadniStaz ON ZAPOSLENIK REORGANIZE -- Fragmentacija do 30% ALTER INDEX IX_RadniStaz ON ZAPOSLENIK REBUILD -- Fragmentacija > 30%

Reorganizacija indeksa podrazumijeva reorganizaciju indeksnih stranica, a preporučuje se

kada fragmentacija indeksa iznosi do maksimalnih 30%. U protivnom, preporuka je

napraviti obnovu indeksa (njegovo brisanje i ponovno kreiranje). Ovisno o količini podataka

u tablici, obnova indeksa može dugo trajati pa ju je poželjno raditi tek kada je broj upita

prema bazi najmanji (primjerice, po noći).

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 68

3.4. Uskladištene procedure i funkcije

Korisnički definiranim procedurama i funkcijama moguće je centralizirati i nametnuti

istu poslovnu logiku svim klijentima baze podataka. Na taj način možemo osigurati da svi

klijenti koriste iste rutine (postupke) pri obradi podataka te da niti jedan od klijenata ne

može od njih odstupati. Ovakvim pristupom postiže se konzistentnost u radu svih klijenata

te se olakšava i eventualna izmjena same poslovne logike.

Izmjena centralizirane poslovne logike najčešće znači tek izmjenu procedura i funkcija u

bazi podataka. Dodatnih izmjena na klijent strani nema ili su minimalne (eventualne

promjene povratnih vrijednosti ili listi argumenata procedura i funkcija). Klijent aplikacije

tada je lakše pisati i održavati jer umjesto kompleksne poslovne logike moraju

implementirati tek sučelja za unos i prikaz podataka.

SQL Server nudi mogućnost pisanja vlastitih uskladištenih procedura, skalarnih funkcija i

funkcija s tabličnim vrijednostima (eng. table-valued functions). Za pisanje vlastitih

agregatnih funkcija potrebno je koristiti CLR (Microsoft .NET Framework Common

Language Runtime).

Uskladištene procedure omogućuju spremanje T-SQL upita u bazi podataka. Umjesto

slanja kompleksnih upita mrežom dovoljno je tek pozvati uskladištenu proceduru koja

sadrži taj upit. Uskladištene procedure izvršavaju se na serveru, što značajno doprinosi

performansama. Među ostalim, omogućuju i dodatne razine sigurnosti. Korisnik ne mora

imati ovlasti za rad s objektima (tablicama, pogledima itd.) niti ovlasti za izvršavanje upita

koji se nalaze u uskladištenoj proceduri, ali može biti ovlašten izvršiti uskladištenu

proceduru koja sve te objekte i upite sadrži.

Primjer 3.4.1 – Uskladištena procedura usp_SviZaposlenici

CREATE PROCEDURE usp_SviZaposlenici AS BEGIN SELECT * FROM Zaposlenik END

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 69

Kao i svi drugi tipovi objekata i uskladištene procedure kreiraju se naredbom CREATE

(Primjer 3.4.1). Prilikom njihova imenovanja preporuka je ne koristiti prefiks "sp_" jer on je

rezerviran za sistemske uskladištene procedure. Umjesto njega poželjno je koristiti neki

drugi prefiks poput "usp_" (eng. user stored procedure) ili sl. [29]

Tijelo uskladištene procedure može sadržavati više naredbi pa je uvijek omeđeno ključnim

riječima BEGIN i END, a za njeno izvršavanje koristi se naredba EXECUTE (skraćeno

EXEC):

EXEC usp_SviZaposlenici

Uskladištene procedure mogu imati i parametre, a oni mogu sadržavati i podrazumijevane

vrijednosti.

Primjer 3.4.2 – Uskladištena procedura usp_UvecajPlacu

CREATE PROCEDURE usp_UvecajPlacu (@Od float = 0, @Do float, @Iznos float) AS BEGIN UPDATE Zaposlenik SET IznosPlace = IznosPlace + @Iznos WHERE IznosPlace BETWEEN @Od and @Do END

Jedna od najvažnijih mogućnosti uskladištenih procedura jest da mogu mijenjati sadržaj

baze podataka. Tako procedura u Primjeru 3.4.2 uvećava plaću svim zaposlenicima čiji je

trenutni iznos plaće između vrijednosti @Od i @Do. Parametar @Od ima podrazumijevanu

vrijednost 0, što omogućuje poziv uskladištene procedure na sljedeće načine:

-- najčešći oblik predaje vrijednosti proceduri EXEC usp_UvecajPlacu 0, 3500, 500 -- drugačiji raspored ulaznih vrijednosti EXEC usp_UvecajPlacu @Do = 3500, @Od = 0, @IznosUvecanja = 500 -- korištenje podrazumijevane vrijednosti parametra @Od = 0 EXEC usp_UvecajPlacu @Do = 3500, @IznosUvecanja = 500

Kada redoslijed predanih vrijednosti odgovara redoslijedu parametara najbrže je koristiti

prvi oblik predaje vrijednosti. U protivnom, za svaku predanu vrijednost treba naglasiti

kojem parametru pripada. Ukoliko vrijednost nekog parametra nije navedena, u proceduri

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 70

se koristi njegova podrazumijevana vrijednost ili se javlja greška ukoliko podrazumijevana

vrijednost ne postoji.

Uskladištena procedura može vratiti set podataka (Primjer 3.4.1), cjelobrojnu vrijednost

korištenjem naredbe RETURN ili vrijednosti drugih tipova korištenjem izlaznih (eng. output)

tipova parametara (Primjer 3.4.3).

Primjer 3.4.3 – Uskladištena procedura usp_SrednjaStarostZaposlenika

CREATE PROCEDURE [dbo].[usp_SrednjaStarostZaposlenika] (@srednjaStarost float output) AS BEGIN DECLARE @sumaPlaca float = (SELECT SUM(IznosPlace) FROM Zaposlenik) DECLARE @brojZaposlenika int = (SELECT COUNT(*) FROM Zaposlenik) IF @brojZaposlenika > 0 BEGIN SET @srednjaStarost = @sumaPlaca / @brojZaposlenika RETURN 0 -- uspješno izvršena procedura END ELSE RETURN 1 -- dijeljenje s nulom (prazan popis zaposlenika) END

Povratna vrijednost koja se definira naredbom RETURN zamišljena je tek da vrati status

izvršavanja procedure (0 – uspješno izvršena, ili neki drugi cijeli broj u slučaju greške). Za

sve ostale povratne vrijednosti koriste se izlazni tipovi parametara kojih može biti više i koji

mogu biti proizvoljnih tipova. Tako je proceduru iz Primjera 3.4.3 moguće pozvati na

sljedeći način:

DECLARE @sredina float DECLARE @status int -- poziv uskladištene procedure i vraćanje vrijednosti EXEC @status = usp_SrednjaStarostZaposlenika @sredina OUTPUT IF @status = 0 SELECT @sredina ELSE PRINT 'Ne postoji niti jedan zaposlenik!'

Prije ispisa srednje starosti zaposlenika provjerava se status izvršavanja uskladištene

procedure (varijabla @status). Naime, ukoliko u tablici Zaposlenik nema zapisa onda nije

niti moguće izračunati prosječnu starost pa će uskladištena procedura za taj slučaj

naredbom RETURN vratiti vrijednost 1. Za dohvat srednje starosti (realan broj) putem

izlaznih parametara predana je varijabla @sredina sa ključnom riječi OUTPUT.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 71

Za razliku od uskladištenih procedura, skalarne funkcije uvijek vraćaju samo jednu

vrijednost. Također, moraju biti determinističke, tj. za iste vrijednosti ulaznih parametara

uvijek moraju dati istu povratnu vrijednost. Zbog toga se unutar skalarne funkcije ne mogu

pozivati nedeterminističke funkcije poput RAND, GETDATE itd.

Primjer 3.4.4 – Skalarana funkcija 'fn_Kvadrat'

CREATE FUNCTION dbo.fn_Kvadrat (@broj float) RETURNS FLOAT AS BEGIN RETURN @broj * @broj END

Svaka skalarna funkcija treba imati povratnu vrijednost koja se definira naredbom

RETURN (Primjer 3.4.4), a pri njenom pozivu uvijek treba koristiti obje komponente imena,

tj. naziv vlasnika ili sheme te naziv skalarne funkcije. Primjerice,

SELECT dbo.fn_Kvadrat(10) -- 100

Argumenti se predaju unutar zagrada nakon imena funkcije, dok sama skalarna funkcija

može imati i podrazumijevane vrijednosti parametara.

Primjer 3.4.5 – Skalarana funkcija 'fn_IzracunPlace'

CREATE FUNCTION dbo.fn_IzracunPlace (@broj_sati int, @bolovanje bit = 0) RETURNS FLOAT AS BEGIN DECLARE @satnica int = 25 IF @bolovanje = 1 -- ako je zaposlenik bio na bolovanju… RETURN @broj_sati * @satnica * 0.7 -- 70% plaće RETURN @broj_sati * @satnica END

Ipak, parametri funkcija s podrazumijevanim vrijednostima nisu neobavezni. Ukoliko se pri

pozivu funkcije ne navede konkretna vrijednost takvog parametra već se želi koristiti

njegova podrazumijevana vrijednost potrebno je koristiti ključnu riječ DEFAULT. To

omogućuje poziv funkcije fn_IzracunPlace (primjer 3.4.5) na sljedeći način:

SELECT dbo.fn_IzracunPlace(10, DEFAULT) – 250 (nije na bolovanju)

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 72

Za razliku od skalarnih funkcija koje isključivo vraćaju jednu vrijednost, možemo kreirati i

dva tipa funkcija koje vraćaju setove podataka, odnosno tablične vrijednosti. To su:

▪ Inline Table-Valued Functions

▪ Multistatement Table-Valued Functions

Prvi tip predstavlja jednostavni oblik funkcije s tabličnom vrijednošću. Njeno tijelo sadrži

samo jednu SELECT naredbu kojom se definira povratna vrijednost funkcije, tj. rezultantna

virtualna tablica. To ju čini vrlo sličnom pogledu (eng. view) koji također rezultira virtualnom

tablicom. Ipak, kao i svaka druga funkcija može imati parametre dok ih pogled nema. Zbog

toga se vrlo često taj tip funkcije koristi kao zamjena za pogled.

Primjer 3.4.6 – Jednostavni oblik funkcije sa tabličnom vrijednošću

CREATE FUNCTION Place_Zaposlenika (@Od float, @Do float) RETURNS TABLE AS RETURN -- povratna je vrijednost novi set podataka ( SELECT Ime, Prezime, IznosPlace from Zaposlenik WHERE IznosPlace between @Od and @Do )

Funkcija iz Primjera 3.4.6 kao rezultat vraća virtualnu tablicu s popisom svih zaposlenika

čija plaća iznosi između vrijednosti definiranih parametrima @Od i @Do. Njen poziv

možemo napraviti na sljedeći način:

SELECT Ime, Prezime, IznosPlace FROM dbo.Place_Zaposlenika(5000, 10000)

Ukoliko je potrebno da funkcija s tabličnom vrijednošću može sadržavati više naredbi, tj.

imati kompleksnost skalarnih funkcija, mora koristiti njen složeni oblik (eng. multistatement

table-valued function).

Primjer 3.4.7 – Složeni oblik funkcije sa tabličnom vrijednošću

CREATE FUNCTION IznadprosjecnePlace() RETURNS @RezultatTablica TABLE (-- struktura rezultantne tablice Ime nvarchar(50), Prezime nvarchar(50), IznosPlace float ) AS BEGIN -- izračun prosjeka plaće DECLARE @ProsjekPlace float

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 73

SET @ProsjekPlace = (SELECT AVG(IznosPlace) FROM Zaposlenik) -- popuni rezultantnu tablicu... INSERT INTO @RezultatTablica SELECT Ime, Prezime, IznosPlace FROM Zaposlenik WHERE IznosPlace > @ProsjekPlace RETURN -- vrati sadržaj tablice @RezultatTablica END

Kod složenog oblika funkcije s tabličnom vrijednošću eksplicitno je potrebno definirati

strukturu rezultante tablice (Primjer 3.4.7). Također, blok naredbi (tijelo) takve funkcije

mora biti omeđeno ključnim riječima BEGIN i END jer može sadržavati više od jedne

naredbe. Unutar tijela funkcije popunjava se rezultantna tablica, a njen sadržaj vraća se

naredbom RETURN.

Bilo da je riječ o funkcijama ili pogledima možemo ih kreirati i korištenjem dodatne izjave

"WITH SCHEMABINDING". Tom izjavom zabranjujemo svaku modifikaciju referentnih

objekata koja bi utjecala na izvršavanje te funkcije ili pogleda. [30]

Primjer 3.4.8 – Korištenje izjave "WITH SCHEMABINDING"

CREATE FUNCTION Place_Zaposlenika2 (@Od float, @Do float) RETURNS TABLE WITH SCHEMABINDING AS RETURN ( SELECT Ime, Prezime, IznosPlace from dbo.Zaposlenik WHERE IznosPlace between @Od and @Do )

Nakon kreiranja funkcije Place_Zaposlenika2 (Primjer 3.4.8) sljedeće naredbe neće biti

moguće uspješno izvršiti:

DROP TABLE dbo.Zaposlenik -- Cannot DROP TABLE 'dbo.Zaposlenik' because it is being referenced by object -- 'Place_Zaposlenika2'. ALTER TABLE dbo.Zaposlenik ALTER COLUMN IME nvarchar(100) -- The object 'Place_Zaposlenika2' is dependent on column 'IME'.

Izjavom "WITH SCHEMABINDING" neće se zabraniti brisanje (DROP) i izmjena (ALTER)

nereferenciranih dijelova objekata. Primjerice, bez zabrane mogli bismo brisati i mijenjati

sve stupce tablice Zaposlenik koji nisu referencirani unutar funkcije Place_Zaposlenika2.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 74

Korištenje ove izjave nameće dva dodatna pravila:

▪ Unutar funkcije ili pogleda zabranjeno je korištenje izraza SELECT *.

▪ Svi referentni objekti moraju sadržavati i naziv sheme prije svog imena.

Funkcije u SQL Serveru ograničene su na način da ne mogu mijenjati sadržaj baze

podataka. Unutar njih nije dopušteno koristiti naredbe INSERT, UPDATE i DELETE osim

ako se njima ne djeluje na tablične varijable (Primjer 3.4.7). Također, nije moguće pozivati

uskladištene procedure, koristiti i vraćati kursore i BLOB (eng. binary large object) objekte,

obrađivati greške (TRY-CATCH, RAISERROR) itd. Da bi se nadišla sva ova ograničenja

najčešće se umjesto funkcija koriste uskladištene procedure.

3.5. DML i DDL okidači

Okidač (eng. trigger) posebna je vrsta uskladištene procedure koja se izvršava

automatski umjesto (eng. instead of) ili nakon (eng. after) nekog događaja. Ovisno o

tipovima događaja u SQL Serveru moguće je kreirati DML, DDL, CLR i Logon okidače.

Najčešće se koriste DML i DDL okidači pomoću kojih je moguće uvesti dodatna pravila

konzistentnosti, očuvati integritet te kontrolirali strukturu baza podataka.

DML okidači koriste se kada je nad tablicom potrebno kontrolirati operacije dodavanja

(INSERT), ažuriranja (UPDATE) i brisanja (DELETE) podataka. Primjerice, pretpostavimo

da u tablici Zaposlenik želimo nametnuti sljedeća poslovna pravila pri radu sa podacima:

1. Ime zaposlenika mora započeti velikim slovom, a ostala slova moraju biti mala.

2. Spremiti datum i vrijeme svake izmjene podataka u stupac ZadnjaIzmjena.

3. Nije moguće izbrisati osobu (zaposlenika) koja je još uvijek zaposlena.

Navedena pravila možemo primijeniti kreiranjem odgovarajućih okidača, pri čemu se koristi

sljedeća sintaksa:

CREATE [ ili ALTER ] TRIGGER [naziv_sheme.]ime_okidaca ON { TABLE | VIEW } { AFTER | INSTEAD OF } { [INSERT] [,] [UPDATE] [,] [DELETE] } AS { tijelo_okidaca }

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 75

DML okidače moguće je kreirati nad tablicama i pogledima, a unatoč velikoj fleksibilnosti

imaju i nekoliko ograničenja. Unutar tijela okidača nije moguće kreiranje (CREATE),

mijenjanje (ALTER) i brisanje (DROP) baze podataka, a ista ograničenja vrijede i za

indekse tablice i samu tablicu nad kojom se okidač izvršava. [31] Također, nad istom

tablicom dopušteno je kreiranje većeg broja AFTER, ali samo jednog INSTEAD OF

okidača.

Primjer 3.5.1 – Okidač nakon (AFTER) operacija INSERT i UPDATE

CREATE TRIGGER tr_ImeVrijeme ON ZAPOSLENIK AFTER INSERT, UPDATE AS BEGIN -- Dohvati OIB (identifikator) DECLARE @OIB NVARCHAR(50) = (SELECT OIB from Inserted) -- Dohvati ime zaposlenika DECLARE @ime NVARCHAR(50) = (SELECT Ime from Inserted) UPDATE Zaposlenik SET -- Prvi znak imena pretvori u veliko slovo, a ostale znakove u mala slova Ime = UPPER(LEFT(@ime, 1)) + LOWER(SUBSTRING(@ime, 2, LEN(@ime))), -- Spremi datum i vrijeme zadnje izmjene zapisa ZadnjaIzmjena = SYSDATETIME() WHERE OIB = @OIB END

Okidačem iz Primjera 3.5.1 implementirana su prva dva poslovna pravila. Prilikom svakog

dodavanja novog ili ažuriranja postojećeg zapisa, ime zaposlenika prepravlja se tako da

počinje velikim slovom (ostala slova su mala) te se u stupac ZadnjaIzmjena sprema datum

i vrijeme izvršene operacije. Taj okidač možemo testirati na sljedeći način:

-- Dodaj novog zaposlenika (OIB, Ime, Prezime, IznosPlace, Zaposlen?) INSERT INTO Zaposlenik VALUES ('111222', 'ante', 'Antic', 4500, 1) SELECT Ime, ZadnjaIzmjena FROM Zaposlenik WHERE OIB = '111222' -- Ante 2017-07-13 18:36:11.957

ili

-- Ažuriraj ime postojećeg zaposlenika UPDATE Zaposlenik SET Ime = 'aNTON' WHERE OIB = '111222' SELECT Ime, ZadnjaIzmjena FROM Zaposlenik WHERE OIB = '111222' -- Anton 2017-07-13 18:36:11.970

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 76

U tijelu okidača moguće je koristiti specijalne tablice Inserted i Deleted (Primjer 3.5.1). To

su privremene tablice koje se nalaze u memoriji te služe kao međuspremnici za sve zapise

koji su zahvaćeni operacijama INSERT, UPDATE i DELETE.

Operacija Tablica Inserted Tablica Deleted

INSERT Sadrži nove zapise -

DELETE - Sadrži zapise koji se brišu

UPDATE Sadrži nove inačice zapisa Sadrži stare inačice zapisa

Tablica 3.5.1. Sadržaji tablica Inserted i Deleted

Tako bi se nakon operacije

UPDATE Zaposlenik SET Ime = 'aNTON' WHERE OIB = '111222'

u tablici Inserted nalazio zapis

OIB Ime Prezime IznosPlace Zaposlen ZadnjaIzmjena

111222 aNTON Antic 4500 1 2017-08-14 12:22:13.553

a u tablici Deleted prethodna inačica tog zapisa

OIB Ime Prezime IznosPlace Zaposlen ZadnjaIzmjena

111222 Ante Antic 4500 1 2017-08-14 12:22:13.553

U konačnici, okidač iz Primjera 3.5.1 koristi vrijednost stupca Ime iz tablice Inserted

(aNTON) kako bi nad tom vrijednošću primijenio poslovno pravilo 1 te zajedno s datumom

i vremenom izmjene sve spremio u tablicu Zaposlenik.

Okidač se izvršava jednom po operaciji, a ne jednom po svakom zahvaćenom zapisu

(retku). Zbog toga je potreban veliki oprez pri operacijama u kojima se zahvaća više zapisa

odjednom. Tako će izvršavanje sljedećeg upita rezultirati greškom unutar okidača:

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 77

UPDATE Zaposlenik SET Ime = 'aNTON' -- Nema WHERE – mijenja se ime svih zaposlenika!

Postojeći okidač (Primjer 3.5.1) nije u mogućnosti primijeniti poslovna pravila 1 i 2 nad više

zahvaćenih zapisa odjednom, već tek nad INSERT i UPDATE operacijama u kojima se

zahvaća jedan po jedan zapis. U takvim slučajevima potrebno je kreirati okidače na način

kao u Primjeru 3.5.2.

Primjer 3.5.2 – Okidač nad više zahvaćenih zapisa

CREATE TRIGGER tr_ImeVrijeme2 ON ZAPOSLENIK AFTER INSERT, UPDATE AS BEGIN UPDATE Zaposlenik SET Ime = UPPER(LEFT(i.ime, 1)) + LOWER(SUBSTRING(i.ime, 2, LEN(i.ime))), ZadnjaIzmjena = SYSDATETIME() FROM Zaposlenik INNER JOIN Inserted i ON Zaposlenik.OIB = i.OIB END

Spajanjem (INNER JOIN) tablica Zaposlenik i Inserted dobit ćemo sve zapise koji su

zahvaćeni izvršenom INSERT ili UPDATE operacijom, nakon čega nad svima njima

odjednom možemo primijeniti poslovna pravila 1 i 2. Za implementaciju pravila broj 3

idealno je koristiti INSTEAD OF DELETE okidač (Primjer 3.5.3).

Primjer 3.5.3 – Okidač INSTEAD OF DELETE

CREATE TRIGGER tr_ZabranaBrisanja ON ZAPOSLENIK INSTEAD OF DELETE AS BEGIN /* ...na razini jednog zahvaćenog zapisa */ -- DECLARE @OIB NVARCHAR(50) = (SELECT OIB from Deleted) -- DECLARE @Zaposlen bit = (SELECT Zaposlen from Deleted) -- IF @Zaposlen = 0 -- DELETE FROM Zaposlenik WHERE OIB = @OIB -- ELSE -- PRINT 'Nije moguće izbrisati aktivnog zaposlenika!' /* ...brisanje višestruko zahvaćenih zapisa */ DELETE Zaposlenik FROM Zaposlenik Z INNER JOIN Deleted D ON Z.OIB = D.OIB and Z.Zaposlen = 0 END

Unutar tijela okidača moguće je detektirati promjenu vrijednosti pojedinih stupaca, za što

se koristi funkcija UPDATE. Primjerice,

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 78

IF UPDATE(Ime) PRINT 'Promijenili ste ime!'

Detekcija promjene vrijednosti unutar stupca može pomoći pri optimizaciji jer se umjesto

izvršavanja cijelog koda unutar okidača može izvršiti samo onaj dio koji je bitan pri

promijeni nekog konkretnog stupca.

DML okidačima kontroliramo sadržaj, a za kontrolu strukture objekata koristimo DDL

okidače. Operacije poput CREATE, ALTER i DROP moguće je spriječiti, uvjetovati ili uz

njih definirati i neke druge operacije. DDL okidači izvršavaju se isključivo nakon operacije,

odnosno ne postoji INSTEAD OF tip DDL okidača.

Primjer 3.5.4 – DDL okidač na razini baze podataka

CREATE TRIGGER tr_ZabranaTablice ON DATABASE AFTER DROP_TABLE, ALTER_TABLE AS BEGIN PRINT 'Ne možete mijenjati ili brisati tablicu!' ROLLBACK END

Postoje dva područja djelovanja DDL okidača – na razini baze podataka (ON DATABASE)

ili na razini servera (ON ALL SERVER). U Primjeru 3.5.4 zabranjeno je brisanje i mijenjanje

strukture bilo koje tablice u bazi podataka nad kojom je kreiran okidač. Kako se DDL okidač

uvijek izvršava nakon operacije, zadnjom naredbom (ROLLBACK) poništavamo prethodno

obavljenu DROP TABLE ili ALTER TABLE operaciju.

Ukoliko bismo htjeli definirati DDL okidač koji se izvršava nad bilo kojom bazom podataka

na serveru (instanci), koristili bismo ON ALL SERVER specifikaciju, kao u Primjeru 3.5.5.

Primjer 3.5.5 – DDL okidač na razini servera (instance)

CREATE TRIGGER tr_ZabranaSvugdje ON ALL SERVER AFTER CREATE_TABLE AS BEGIN PRINT 'Ne možete kreirati tablicu!' ROLLBACK END

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 79

Pokušaj kreiranja nove tablice u bilo kojoj bazi podataka na serveru sada više nije moguć.

Zbog ovakvih i sličnih situacija DML i DDL okidače privremeno je moguće onemogućiti,

izvršiti potrebne operacije, a zatim ponovno omogućiti.

DISABLE TRIGGER tr_ZabranaSvugdje ON ALL SERVER -- CREATE TABLE ... ENABLE TRIGGER tr_ZabranaSvugdje ON ALL SERVER

U SSMS alatu DML okidače moguće je pronaći unutar svake tablice pod stavkom

"Triggers". DDL okidači na razini baze podataka su pod stavkom "Database Triggers", a

okidači na razini servera u stavci "Server Objects/Triggers".

3.6. Sekvence

Počevši od SQL Servera 2012 moguće je kreirati i koristiti sekvence. To su objekti

koji generiraju uzlazno ili silazno sortirane nizove cjelobrojnih vrijednosti. Sekvence mogu

podsjećati na stupce sa svojstvom IDENTITY, ali takvi stupci vezani su isključivo za tablicu

u kojoj postoje, dok se jedna sekvenca može koristiti u svim tablicama baze podataka.

Također, sekvence se mogu resetirati automatski ili proizvoljno, te im je moguće definirati

minimalnu i maksimalnu vrijednost.

Primjer 3.6.1 – Kreiranje sekvence 'Rb'

CREATE SEQUENCE Rb START WITH 1 -- INCREMENT BY 1 -- MINVALUE ... -- MAXVALUE ... -- CYCLE ?

Pri kreiranju sekvence poželjno je definirati početnu vrijednost niza (START WITH).

Ukoliko nije drugačije definirano, podrazumijevana vrijednost prirasta (INCREMENT BY)

je broj 1, dok minimalna i maksimalna vrijednost te svojstvo CYCLE nisu definirani. Kada

želimo generirati i dohvatiti novi broj u nizu (sekvenci) možemo izvršiti sljedeći upit:

SELECT NEXT VALUE FOR Rb

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 80

Prvo izvršavanje ovog upita ispisat će vrijednost 1, a zatim vrijednost 2, pa 3 itd. Svaka

generirana vrijednost može se iskoristiti za, primjerice, numeriranje zapisa u tablicama,

numeriranje izvršenih operacija u log tablicama itd. naredbama poput

INSERT INTO LogTablica VALUES (NEXT VALUE FOR Rb, 'Login korisnika', SYSDATETIME())

Sekvence mogu biti generirane i silazno, kao u Primjeru 3.6.2.

Primjer 3.6.2 – Kreiranje silazne sekvence

CREATE SEQUENCE Silazna START WITH 10 INCREMENT BY -1 MINVALUE 1 MAXVALUE 10 CYCLE

Početna i maksimalna vrijednost sekvence Silazna je broj 10, a svaka sljedeća vrijednost

umanjena je za 1. Kada se dođe do minimalne vrijednosti (1), sljedeća generirana

vrijednost opet je broj 10, što je osigurano svojstvom CYCLE. Ukoliko je potrebno resetirati

sekvencu prije nego što je došla do svoje granične vrijednosti, možemo izvršiti sljedeći

upit:

ALTER SEQUENCE Silazna RESTART WITH 10

Gdje god se javlja potreba za numeriranjem uvijek je poželjno koristiti sekvence umjesto

stupaca sa svojstvom identiteta. Sekvence imaju šire djelovanje, lakše ih je kontrolirati te

uvijek generiraju predviđene vrijednosti. Vrijednosti generirane stupcem sa svojstvom

identiteta ne moraju nužno uvijek biti u istom razmaku te ih je moguće generirati samo

prilikom kreiranja novog zapisa.

3.7. Sinonimi

Sinonimi su pomoćni objekti koji se koriste kako bismo kreirali alternativna imena

za objekte u bazi podataka. Njihovim korištenjem pojednostavljuje se pristup objektima s

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 81

dugačkim nazivima, uz manje posljedica moguće je izmijeniti postojeću strukturu baze

podataka te se doprinosi i sigurnosnim aspektima administracije.

Primjer 3.7.1 – Kreiranje i korištenje sinonima 'LjudskiResursi'

CREATE SYNONYM LjudskiResursi FOR TestDB.dbo.Zaposlenik SELECT * FROM LjudskiResursi -- SELECT * FROM TestDB.dbo.Zaposlenik

Sinonime je moguće kreirati za uskladištene procedure, funkcije, tablice i poglede (Primjer

3.7.1). Štoviše, u trenutku kreiranja sinonima, stvarni objekt ne mora niti postojati već se

on provjerava tek prilikom referenciranja sinonima.

Upotrebom sinonima, aplikacije uvijek mogu koristiti iste upite prema bazi podataka.

Umjesto da se referenciraju na stvarne objekte, referenciranjem na sinonime uklanja se

potreba za modifikacijom aplikacije u slučaju promjene naziva stvarnih objekata. Tada je u

bazi podataka tek potrebno nanovo kreirati iste sinonime tako da ovaj puta referenciraju

na nova imena objekata.

U području sigurnosti i administracije sinonimi također imaju svoju ulogu. Potencijalni

napadač puno će teže doznati ime stvarnog objekta na osnovi imena sinonima, a pri

administraciji prava i dozvola korisniku se može omogućiti korištenje sinonima ne znajući

o kojem stvarnom objektu zaista riječ.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 82

4. Organizacija i sigurnost

4.1. Sheme

U starijim inačicama SQL Servera svaki objekt morao je imati svog vlasnika (eng.

owner). Vlasnik objekta najčešće bi bio korisnik koji je kreirao objekt i imao je trajne

(nepovratne) ovlasti nad tim objektom. Problemi bi nastali kada bismo htjeli izbrisati

korisnika iz baze podataka jer tada bismo sve objekte u njegovom vlasništvu prethodno

trebali prebaciti u vlasništvo nekog drugog korisnika. Također, pojavio bi se i problem s

referenciranjem tih objekata (NoviVlasnik.Objekt) što dodatno zahtjeva i promjenu koda

unutar uskladištenih procedura, funkcija i aplikacija. [32]

Izlaskom SQL Servera 2005 uvode se sheme koje uvelike pojednostavljuju organizaciju,

administraciju i pristup objektima baze podataka. Shemu možemo zamisliti kao imenovani

prostor (eng. namespace) u kojemu se nalazi jedan ili više objekata. Svaki objekt baze

podataka može pripadati samo jednoj shemi (podrazumijevano dbo), a referencira ga se

upravo preko imena sheme kojoj pripada (Server.BazaPodataka.Shema.Objekt).

Slika 4.1.1. Primjer organizacije tablica po shemama

Sheme omogućuju organizaciju (grupiranje) objekata baze podataka bilo po namjeni,

sadržaju ili nekom drugom kriteriju. Tako u primjeru na Slici 4.1.1 postoje tri sheme:

HumanResources, Person i Production, a svaka od njih sadrži odgovarajuće tablice. Osim

tablica, sheme mogu sadržavati i poglede, uskladištene procedure, funkcije itd. Baza

podataka može sadržavati i više objekata s istim imenom, a u tom slučaju svaki od tih

objekata mora biti smješten u različitoj shemi.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 83

Korištenjem SSMS alata, sve sheme u bazi podataka moguće je pronaći pregledom stavke

"Security / Schemas", a desnim klikom na tu stavku moguće je kreirati novu shemu.

Slika 4.1.2. Kreiranje sheme – naziv i vlasnik

Objekti pripadaju shemi, a svaka shema ima vlasnika (Slika 4.1.2). Ukoliko ne definiramo

vlasnika sheme, tada korisnik dbo podrazumijevano postaje njen vlasnik. Korisnik dbo

podrazumijevano uvijek postoji u bazi podataka i upravo zato ovakav pristup je najčešći. U

protivnom, za sve ostale korisnike vlasnike treba voditi računa o prijenosu vlasništva pri

pokušaju njihovog brisanja iz baze podataka.

Slika 4.1.3. Kreiranje sheme – ovlasti

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 84

Jedna od prednosti shema je i jednostavnija administracija. Umjesto da korisniku

definiramo ovlasti nad svakim objektom pojedinačno, možemo mu definirati ovlasti nad

shemom. Tada te ovlasti automatski ima i za sve objekte unutar te sheme.

Tako u primjeru na Slici 4.1.3 korisnik test_user ima ovlasti za izvršavanje uskladištenih

procedura te dodavanje, mijenjanje i dohvaćanje podataka iz svih objekata unutar sheme.

Korisnik test_user automatski dobiva navedene ovlasti i za svaki novi objekt unutar sheme,

dok se iste ovlasti mogu definirati i za skupine korisnika (eng. database role) te aplikacije

(eng. application role). Korisnicima je moguće odobriti (GRANT) ili zabraniti (DENY) neku

operaciju, a opcijom WITH GRANT omogućiti da tu operaciju odobre i drugim korisnicima.

Prilikom kreiranja sheme (i mnogih drugih tipova objekata) moguće je definirati i korisnički

definirana svojstava (eng. extended properties). To su tekstualno-opisna svojstva koja

imaju naziv i vrijednost, a koriste se kako bismo na dodatni način opisali kreirani objekt.

Primjerice, naziv svojstva može biti "Autor", a njegova vrijednost "Ante Antić".

Klikom na gumb "Script" (Slika 4.1.3) moguće je generirati T-SQL upit čijim će se

izvršavanjem kreirati shema s prethodno definiranim svojstvima i postavkama, kao u

Primjeru 4.1.1.

Primjer 4.1.1 – Kreiranje sheme izvršavanjem T-SQL upita

CREATE SCHEMA [MojaShema] GO GRANT EXECUTE ON SCHEMA::[MojaShema] TO [test_user] GRANT INSERT ON SCHEMA::[MojaShema] TO [test_user] GRANT SELECT ON SCHEMA::[MojaShema] TO [test_user] GRANT UPDATE ON SCHEMA::[MojaShema] TO [test_user]

Naziv odredišne sheme objekta definira se prilikom njegovog kreiranja, dok naredbom

TRANSFER možemo prebaciti objekt iz jedne sheme u drugu. Primjerice,

ALTER SCHEMA MojaShema TRANSFER dbo.Zaposlenik; -- MojaShema.Zaposlenik

Ukoliko se prilikom referenciranja objekta ne navede naziv sheme, SQL Server će prvo

potražiti taj objekt u korisnikovoj podrazumijevanoj shemi, a zatim u dbo shemi. Ukoliko

objekt i tada nije pronađen vraća se greška.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 85

4.2. Prijavni nalozi

Prijavni nalog (eng. login) koristi se u svrhu autentifikacije i spajanja korisnika na

SQL Server. Svaki prijavni nalog može biti povezan s više korisničkih računa baza

podataka (jednim korisničkim računom po bazi), a oni se koriste za autorizaciju, odnosno

pristup bazama podataka.

Slika 4.2.1. Prijavni nalozi i korisnički računi baza podataka

U primjeru na Slici 4.2.1 prijavni nalog "Login 1" povezan je s tri korisnička računa baza

podataka. Nakon uspješne autentifikacije, korisnik je automatski autoriziran koristiti sve te

baze podataka sukladno pravima i dozvolama koje su definirane povezanim korisničkim

računima.

Odvajanje autentifikacije od autorizacije ima svoje prednosti prilikom, primjerice,

prebacivanja baze podataka s jedne instance SQL Servera na drugu. U tom slučaju

prebacit će se i svi korisnički računi baze podataka pa je u drugoj instanci potrebno tek

povezati prijavne naloge s tim prenesenim korisničkim računima.

Prijavni nalog kreira se na razini instance, a moguće ga je kreirati korištenjem SSMS alata

odabirom stavke "Security / Logins / New login…" ili izravno upotrebom T-SQLa.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 86

Slika 4.2.2. Kreiranje prijavnog naloga upotrebom SSMS alata

Ime prijavnog naloga može biti ime postojećeg Windows korisnika ili skupine (Slika 4.2.2).

U tom slučaju koristi se Windows autentifikacija pa za takve korisnike nije potrebno

definirati lozinku. Ovakav tip autentifikacije najčešće se koristi u intranetskim mrežama,

dok nije pogodan za korisnike koji se nalaze u drugim domenama ili pristupaju SQL

Serveru preko interneta.

Za podršku najšireg spektra korisnika koristi se SQL Server autentifikacija. Korisničko ime

i lozinka spremaju se u SQL Serveru, a takvi korisnici mogu se autentificirati i spojiti na

SQL Server iz drugih domena, mreža ili preko interneta. Takvim korisnicima moguće je

nametnuti i pravila o lozinkama, poput da lozinka traje samo određeno vrijeme ili da ju

korisnik mora promijeniti pri sljedećoj prijavi. Pravila o lozinkama ne definiraju se u SQL

Serveru već u operacijskom sustavu server računala ("Start / Control Panel / Administrative

Tools / Local Security Policy"). [33]

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 87

Neovisno o načinu autentifikacije, svakom prijavnom nalogu moguće je definirati

podrazumijevanu bazu podataka i jezik. Loša je praksa za podrazumijevanu bazu

podataka ostaviti ponuđenu sistemsku master bazu jer bi korisnici u njoj najčešće

nepažnjom mogli izvršiti neželjene SQL upite.

Ukoliko odabrana podrazumijevana baza podataka nije dostupna (izbrisana je ili sl.)

autentifikacija neće biti moguća. Zato je u praksi čest slučaj da se za podrazumijevanu

bazu podataka odabire sistemska tempdb baza podataka jer ona uvijek postoji. Čak i da

korisnici izvršavaju neželjene upite u tempdb bazi podataka, potencijalna šteta je puno

manja nego da se ti upiti izvršavaju u master bazi podataka.

Prijavni nalog može pripadati jednoj ili više server uloga (eng. server roles). Njih možemo

zamisliti kao skupine korisnika koji imaju određene ovlasti na razini SQL Servera. Tako,

primjerice, članovi sysadmin uloge (skupine) nemaju nikakvih ograničenja i mogu raditi bilo

što u SQL Serveru. Uloga dbcreator omogućava korisnicima kreiranje novih baza

podataka, dok se securityadmin ulogom može kontrolirati sigurnost na SQL Serveru.

Postoje i druge unaprijed definirane (stalne) server uloge poput processadmin, diskadmin,

bulkadmin itd., a po potrebi se mogu kreirati i vlastite.

Slika 4.2.3. Kreiranje i povezivanje korisničkih računa baza podataka

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 88

Pri kreiranju prijavnog naloga moguće je kreiranje i povezivanje novih korisničkih računa

baza podataka. Tako je na Slici 4.2.3 prikazano povezivanje prijavnog naloga TestLogin s

bazama podataka TestDB i Posudba na način da se unutar njih kreiraju korisnički računi

koji imaju isto ime kao i prijavni nalog.

Svaki od ovih korisničkih računa može imati različito ime te može pripadati različitim

ulogama baza podataka (eng. database roles). Slično kao i server uloge koje služe za

kreiranje skupine korisnika na razini instance, tako postoje i uloge baza podataka, odnosno

skupine korisnika na razini pojedine baze podataka. I u ovom slučaju postoje unaprijed

definirane (stalne) uloge poput db_datareader, db_datawritter, db_owner itd. (Slika 4.2.3),

a mogu se kreirati i nove. Tako će se primjerom na Slici 4.2.3 u bazi podataka TestDB

kreirati novi korisnički račun TestLogin koji će pripadati db_datareader ulozi, tj. automatski

će imati ovlasti čitati podatke iz te baze podataka.

Potrebno je primijetiti da se korisnički račun može istovremeno dodijeliti ulogama

db_datareader i db_denydatareader te ulogama db_datawritter i db_denydatawritter.

Primjerice, skupini korisničkih računa (ulozi) Profesori omogućeno je čitanje svih podataka

(db_datareader), ali jednom dijelu te skupine (npr. podgrupi VanjskiSuradnici) čitanje

podataka je zabranjeno (db_denydatareader). Ukoliko je profesor Ante član podgrupe

VanjskiSuradnici, prevladat će zabrana (DENY) iako je ta podgrupa član grupe Profesori.

Prijavnom nalogu moguće je dodijeliti ovlasti na razini servera (stavke "Securables" i

"Status"). Primjerice, to mogu biti ovlasti za spajanje i gašenje servera, pregled, kreiranje i

izmjenu baza podataka, izmjenu prijavnih naloga itd.

SSMS aplikacija u konačnici će kreirati odgovarajući prijavni nalog sa svim novim

povezanim korisničkim računima baza podataka i odabranim postavkama. Alternativno,

mogli smo i samostalno napisati odgovarajući T-SQL upit za kreiranje tog prijavnog naloga,

kao u Primjeru 4.2.1.

Primjer 4.2.1 – Kreiranje prijavnog naloga izvršavanjem T-SQL upita

USE [master] CREATE LOGIN [TestLogin] WITH PASSWORD=N'12345', DEFAULT_DATABASE=[TestDB], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 89

GO USE [Posudba] GO CREATE USER [TestLogin] FOR LOGIN [TestLogin] GO USE [TestDB] GO CREATE USER [TestLogin] FOR LOGIN [TestLogin]

U slučaju potrebe brisanja ili izmjene prijavnog naloga ili korisničkih računa, opet se koriste

naredbe DROP i ALTER. Međutim, brisanjem prijavnog naloga ne brišu se i povezani

korisnički računi. Oni postaju siročad (eng. orphaned users), te ih je tada moguće povezati

s drugim prijavnim nalozima.

4.3. Korisnički računi

Korisničkim računima vrši se autorizacija, odnosno dodjeljivanje prava i dozvola za

rad u bazi podataka. Najčešće se koriste u kombinaciji s prijavnim nalozima gdje se nakon

uspješne autentifikacije, ovisno o povezanim korisničkim računima, korisniku dodjeljuju

prava i dozvole nad jednom ili više baza podataka. Korisnički računi smješteni su unutar

baze podataka, a može ih biti čak 11 tipova. [34]

SSMS alat podrazumijevano će ponuditi izradu korisničkog računa baze podataka za

sljedeće tipove korisnika:

▪ Windows korisnik

▪ SQL korisnik s prijavnim nalogom

▪ SQL korisnik bez prijavnog naloga

▪ Korisnik povezan s certifikatom

▪ Korisnik povezan s asimetričnim ključem

Prva dva standardni su tipovi korisnika, dok su ostali tipovi korisnika posebne namjene.

Također, izlaskom SQL Servera 2012, baze podataka moguće je pretvoriti u djelomično

neovisne baze podataka (eng. partially contained databases). One su minimalno ovisne o

instanci SQL Servera te zato sadrže i korisničke račune s lozinkama (eng. SQL user with

password). Pomoću takvih korisničkih računa može se vršiti i autentifikacija korisnika bez

potrebe korištenja prijavnog naloga koji se nalazi na serveru.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 90

Slika 4.3.1. Kreiranje korisničkog računa baze podataka upotrebom SSMS alata

Ukoliko korisnički račun baze podataka nije kreiran prilikom kreiranja prijavnog naloga

(Slika 4.2.3), moguće ga je kreirati naknadno upotrebom T-SQLa ili u SSMS alatu odabirom

stavke "<BAZA_PODATAKA> / Security / Users / New user…". Tada se pojavljuje dijalog

kao na Slici 4.3.1 u kojemu je prvo potrebno odabrati odgovarajući tip korisnika.

Najčešće će korisnički račun baze podataka biti kreiran na osnovu postojećeg Windows

korisnika ili skupine, ili će biti riječ o SQL korisniku s prijavnim nalogom (Slika 4.3.1). Oba

tipa korisničkih računa povezuju se s prijavnim nalogom, a mogu biti vlasnici jedne ili više

shema te članovi jedne ili više uloga baze podataka.

Slika 4.3.2. Dodjela dozvola korisničkom računu baze podataka

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 91

Autorizacija, odnosno prava i dozvole u bazi podataka, dodjeljuju se unutar stavke

"Securables". Tako u primjeru na Slici 4.3.2 novom korisniku Ante bit će dodijeljena

dozvola izvršavanja SELECT upita nad tablicom Student. Štoviše, budući da je riječ o

tablici možemo tu dozvolu dodijeliti na razini pojedinog stupca tablice klikom na gumb

"Column Permissions…". Tada se pojavljuje dijalog kao na Slici 4.3.3.

Slika 4.3.3. Dodjela SELECT dozvole na razini stupca

Iako će korisnik Ante imati dozvolu izvršavanja SELECT upita nad tablicom Student, ta

dozvola se u ovom slučaju neće odnositi na stupac Ime (Slika 4.3.3). Zbog toga neće biti

moguće izvršiti upit SELECT * FROM Student, već će se u SELECT naredbi moći navesti

samo oni stupci nad kojima korisnika Ante ima dozvolu.

Primjer 4.3.1 – Kreiranje korisničkog računa baze podataka izvršavanjem T-SQL upita

USE [TestDB] CREATE USER [Ante] FOR LOGIN [Login1] DENY SELECT ON [dbo].[Student] ([Ime]) TO [Ante] -- Zabrana za stupac 'Ime'! GRANT SELECT ON [dbo].[Student] ([izmjena_DatumVrijeme]) TO [Ante] GRANT SELECT ON [dbo].[Student] ([izmjena_Korisnik]) TO [Ante] GRANT SELECT ON [dbo].[Student] ([JMBAG]) TO [Ante] GRANT SELECT ON [dbo].[Student] ([Prezime]) TO [Ante]

U konačnici, SSMS alat generirat će i izvršiti skriptu za kreiranje korisničkog računa Ante

koja izgleda kao u Primjeru 4.3.1.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 92

Od korisnika posebne namjene vrlo često se upotrebljava SQL korisnik bez prijavnog

naloga (eng. SQL user without login). Koristi se kao alternativa aplikacijskoj ulozi (eng.

application role) tj. najčešće kada je riječ o autorizaciji klijent aplikacija. Ovakav tip

korisničkog računa nema lozinku već se pomoću impersonacije prelazi u sigurnosni

kontekst nekog drugog korisničkog računa koji ima sva potrebna prava i dozvole.

Primjer 4.3.1 – Kreiranje i korištenje korisničkog računa bez prijavnog naloga

USE [master] CREATE LOGIN [Login1] WITH PASSWORD=N'12345', DEFAULT_DATABASE=[tempdb] DENY VIEW ANY DATABASE TO [Login1] GO USE [TestDB] CREATE USER [User1] FOR LOGIN [Login1] -- User1 povezan s prijavnim nalogom CREATE USER [User2] WITHOUT LOGIN -- User2 bez prijavnog naloga! -- User2 ima ovlasti za čitanje podataka iz tablice! GRANT SELECT ON [dbo].[Student] TO [User2] -- User1 može impersonirati korisnika User2 GRANT IMPERSONATE ON USER::User2 to User1

Kada se korisnik (aplikacija) prijavi na server korištenjem prijavnog naloga Login1

kreiranog u Primjeru 4.3.1 moći će pročitati sve zapise iz tablice Student na sljedeći način:

USE TestDB EXECUTE AS USER = 'User2' -- Izvrši upite u sigurnosnom kontekstu korisnika User2 SELECT * FROM Student -- Uspješno izvršen upit!

Prijavni nalog Login1 povezan je s korisničkim računom User1 koji nema nikakve ovlasti u

TestDB bazi podataka. Unatoč tome, korisnik će uspjeti pristupiti željenim podacima

(popisu studenata) tako što će upit biti izvršen u sigurnosnom kontekstu korisnika User2

koji ima dozvolu dohvata podataka (SELECT) u tablici Student.

4.4. Uloge

Slično kao i sheme u bazi podataka koje se koriste za grupiranje objekata, uloge

(eng. roles) najčešće se koriste za grupiranje korisnika. Pomoću uloga (skupina)

jednostavnije je organizirati i administrirati korisnike jer im se prava i dozvole mogu

automatski dodijeliti na osnovi članstva u nekoj ulozi.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 93

U SQL Serveru moguće je kreirati tri tipa uloga:

▪ Serverske uloge (eng. server roles)

▪ Uloge baze podataka (eng. database roles)

▪ Aplikacijske uloge (eng. application roles)

Primjerice, umjesto da svakom zaposleniku odjela informatičke podrške na razini prijavnog

naloga ili korisničkog računa dodjeljujemo ista prava i dozvole kao i ostalim zaposlenicima

tog odjela, možemo ga dodijeliti ulozi "IT_Podrska". Samim članstvom u toj ulozi zaposlenik

može imati ista prava i dozvole na serveru (ili u bazi podataka) kao i ostali članovi te uloge.

Slika 4.4.1. Kreiranje server uloge "IT_Podrska"

Serverskom ulogom definira se skupina članova koja ima prava i dozvole na razini SQL

Server instance, a članovi serverske uloge mogu biti prijavni nalozi i druge serverske uloge.

U primjeru na Slici 4.4.1 svi zaposlenici (prijavni nalozi) odjela informatičke podrške imat

će prava i dozvole za zaustavljanje rada instance SQL Servera (Shutdown), za pregled

popisa svih baza podataka (View any database) i definicije objekata (View any definition)

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 94

te za uvid u stanje označene instance (View server state). Među ostalim, server ulogom

moguće je dodijeliti prava i dozvole za upravljanje pristupnim točkama (eng. endpoints),

prijavnim nalozima itd.

Slika 4.4.2. Članovi server uloge "IT_Podrska"

Bilo pri kreiranju nove ili uređivanju postojeće serverske uloge, moguće joj je dodijeliti nove

članove odabirom stavke "Members", kao na Slici 4.4.2. Također, ukoliko je potrebno da

navedena serverska uloga bude član neke druge serverske uloge (njena poduloga) to se

može definirati u stavci "Membership".

Primjer 4.4.1 – Kreiranje server uloge "IT_Podrska" izvršavanjem T-SQL upita

USE [master] CREATE SERVER ROLE [IT_Podrska] ALTER SERVER ROLE [IT_Podrska] ADD MEMBER [Login1] GRANT SHUTDOWN TO [IT_Podrska] GRANT VIEW ANY DATABASE TO [IT_Podrska] GRANT VIEW ANY DEFINITION TO [IT_Podrska] GRANT VIEW SERVER STATE TO [IT_Podrska]

Za kreiranje serverske uloge "IT_Podrska", SSMS alat generirat će i izvršiti T-SQL upit kao

u Primjeru 4.4.1.

Svaka SQL Server instanca ima već unaprijed definiran niz stalnih serverskih uloga koje

se mogu iskoristiti pri dodjeljivanju najčešćih administrativnih prava i dozvola. Stalne

serverske uloge ne mogu se mijenjati već im je tek moguće kontrolirati članstvo. Neke od

njih već su opisane u poglavlju 4.2, a Slikom 4.4.3 prikazane su i ostale.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 95

Slika 4.4.3. Stalne serverske uloge i njihove dozvole [35]

Jednako tako, za grupiranje i lakšu administraciju korisničkih računa baze podataka koriste

se uloge baze podataka (eng. database roles). Osim korisničkih računa, članovi te uloge

mogu biti i druge (pod)uloge baze podataka.

Slika 4.4.4. Dodjela prava i dozvola ulozi baze podataka

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 96

Kao i obični korisnik, uloga baze podataka može biti vlasnik sheme. Mogu joj se dodijeliti

prava i dozvole nad bazom podataka općenito, nad skupinama objekata (shemama) ili

zasebno nad svakim pojedinim objektom baze podataka (Slika 4.4.4).

Sva prava i dozvole dodijeljene ulozi baze podataka automatski se dodjeljuju i njenim

članovima. Izuzetak su situacije u kojima pojedini član uloge ima eksplicitnu zabranu

(DENY) za korištenje i pristup nekom resursu. U tom slučaju uvijek će prevladati zabrana,

bez obzira na eventualnu dozvolu (GRANT) dodijeljenu ulogom.

Slika 4.4.5. Stalne uloge baze podataka i njihove dozvole [36]

Kada god je to moguće korisnička prava i dozvole poželjno je dodjeljivati članstvom u ulozi

jer se tako pojednostavljuje i ubrzava administracija. Zbog toga, kao i u slučaju serverskih

uloga, svaka baza podataka sadrži niz stalnih uloga (Slika 4.4.5). Ukoliko korisnik nije

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 97

prikladan za članstvo niti u jednoj od tih uloga, može se kreirati nova ili se prava i dozvole

tom korisniku mogu dodijeliti eksplicitno, izvan uloge.

Baza podataka može sadržavati i aplikacijske uloge (eng. application roles). Za razliku od

serverskih uloga i uloga baze podataka, one ne služe za grupiranje određenog tipa

korisnika već za autorizaciju klijent aplikacija. Svaka aplikacija trebala bi se autorizirati

preko jedne aplikacijske uloge, pri čemu aplikacija mora znati naziv uloge i njenu lozinku.

Slika 4.4.6. Kreiranje aplikacijske uloge "Blagajna"

Ukoliko pretpostavimo da klijent aplikacija "Blagajna" želi imati određena prava i dozvole u

bazi podataka, za nju možemo kreirati aplikacijsku ulogu (Slika 4.4.6). Sva prava i dozvole

za aplikaciju definirale bi se korištenjem stavke "Securables", a proces autorizacije

izgledao bi ovako:

1) Aplikacija se spaja na bazu podataka pomoću prijavnog naloga koji je povezan s

korisničkim računom željene baze podataka. Iz sigurnosnih razloga tom korisničkom

računu baze podataka ne dodjeljuju se nikakva prava i dozvole!

2) Da bi aplikacija dobila potrebna prava i dozvole treba se autorizirati postojećom

aplikacijskom ulogom. U tu svrhu iz aplikacije poziva se i izvršava sistemska

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 98

uskladištena procedura sp_setapprole. Njoj se kao argumenti predaju naziv

aplikacijske uloge, njena lozinka i enkripcija (none), nakon čega aplikacija dobiva

sva prava i dozvole definirane tom aplikacijskom ulogom.

Ukoliko bi uljez i uspio doći do pristupnih podataka sadržanih u izrazu "Connection string",

od njih ne bi imao koristi jer mu ne pružaju nikakve dozvole u bazi podataka. Uz te podatke

trebao bi mu dodatno i naziv aplikacijske uloge te njena lozinka koji su poznati samo

aplikaciji te nisu dio izraza "Connection string".

Ipak, ukoliko na razvoju aplikacije radi više programera, lozinku aplikacijske uloge najčešće

će trebati mijenjati kada jedan od tih programera napusti projekt. U tom slučaju mora se

mijenjati i aplikacija, pa se zbog toga umjesto aplikacijskih uloga danas češće koriste

korisnički računi baza podataka bez prijavnog naloga i lozinke, kao u Primjeru 4.3.1.

4.5. Kriptografija u SQL Serveru

Dodjeljivanjem odgovarajućih prava i dozvola moguće je ograničiti pristup

podacima. Ipak, uljezi dosta često korištenjem socijalnog inženjeringa i drugih metoda

uspijevaju doći do korisničkih podataka, pa u tom trenutku imaju pristup i potencijalno

osjetljivim podacima koji se nalaze u bazi podataka (osobni podaci kupaca, lozinke, brojevi

kreditnih kartica itd.). Da bi se izbjegla takva šteta, osjetljive podatke uvijek je poželjno

dodatno zaštiti. U tu svrhu SQL Server omogućuje korištenje funkcija sažimanja (eng.

hash) te simetričnih i asimetričnih kriptografskih algoritama.

Funkcije sažimanja koriste se kao jednosmjerni kriptografski algoritmi bez ključa. Kada se

neki sadržaj (tekst, datoteka ili sl.) kriptira funkcijom sažimanja više nije moguće u realnom

vremenu iz kriptiranog sadržaja dobiti nazad izvorni sadržaj. Zbog toga se funkcije

sažimanja često koriste za zaštitu lozinki.

Rezultat funkcije sažimanja mora biti jedinstven te uvijek isti za pojedinu ulaznu vrijednost,

a bez obzira na veličinu ulaznog podatka funkcija sažimanja kao rezultat uvijek mora vratiti

binarni zapis iste veličine.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 99

Pri odabiru funkcije sažimanja treba uzeti u obzir da se zbog već otkrivenih slabosti i

nedostataka mnoge od njih danas više ne koriste. Tako se primjerice funkcije MD4, MD5 i

SHA-1 zbog otkrivenih kolizija i uspješnih metoda napada danas više ne smatraju dovoljno

sigurnima, već se umjesto njih preporučuju SHA-2 i SHA-3 funkcije.

SQL Server 2016 omogućuje korištenje funkcija MD2, MD4, MD5, SHA-0, SHA-1, SHA-2

(256) i SHA-2 (512). Sve osim SHA-2 funkcija smatraju se zastarjelima te će se pri

njihovom korištenju javiti upozorenje. [37]

Primjer 4.5.1 – Zaštita lozinki korištenjem SHA2 – 256 funkcije

-- Kreiranje tablice 'Korisnik' CREATE TABLE [dbo].[Korisnik]( [ID] [int] IDENTITY(1,1) NOT NULL, [Ime] [nvarchar](50) NULL, [Lozinka] [varbinary](256) NULL, PRIMARY KEY (ID) ) GO -- Kreiranje uskladištene procedure za dodavanje novog korisnika CREATE PROCEDURE DodajKorisnika (@Ime varchar(50), @Lozinka varchar(256)) AS BEGIN INSERT INTO Korisnik (Ime, Lozinka) VALUES (@Ime, HASHBYTES('SHA2_256', @Lozinka)) END

Izvršavanjem T-SQL koda iz Primjera 4.5.1 stvorit će se tablica "Korisnik" s tri stupca. Iako

je svaka lozinka zapravo niz znakova otvorenog teksta, stupac "Lozinka" definiran je kao

VARBINARY (binarni) tip jer se u njemu neće spremati otvoreni tekst već rezultat funkcije

sažimanja odnosno binarni zapis. Primjerice,

EXEC DodajKorisnika 'User1', 'TajnaLozinka' SELECT Lozinka FROM Korisnik WHERE Ime = 'User1' -- 0x9453CAAD51A1C84C917B9C57BAB7C7401405179F1509E925AD13803DBC5E5471

Pri provjeri lozinke klijent aplikacija računa rezultat sažimanja unesene lozinke te ga

uspoređuje s rezultatom sažimanja koji je spremljen u bazi podataka. Ukoliko su oba

rezultata identična lozinka je ispravna. U protivnom korisnik će najčešće ponovno morati

unijeti lozinku. Kako je rezultat sažimanja (lozinka) spremljen kao binarni zapis najčešće

ga se predstavlja u heksadecimalnom obliku, u kojem je prikladan i za uspoređivanje.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 100

Da bi se spriječilo lako otkrivanje rezultata funkcije sažimanja često se koristi i metoda

"soljenja" otvorenog teksta (Primjer 4.5.2).

Primjer 4.5.2 – "Soljenje" otvorenog teksta

DECLARE @Lozinka varchar(256) = 'Lozinka' DECLARE @Sol varchar(256) = 'DodatakNaKrajLozinkeOtvorenogTeksta' SELECT HASHBYTES('SHA2_256', @Lozinka + @Sol)

Fiksni niz znakova veće duljine (sol) može se dodati prije, poslije ili negdje u sredini

otvorenog teksta (lozinke), nakon čega se sve spojeno kriptira funkcijom sažimanja. Na

identičan način "sol" se treba koristi i pri provjeri unesene lozinke.

Funkcije sažimanja korisne su u ovakvim situacijama gdje podatke nije potrebno vraćati u

izvorni oblik. U protivnom, umjesto funkcija sažimanja potrebno je koristiti simetrične i

asimetrične kriptografske algoritme.

Simetrični kriptografski algoritmi koriste jedan tajni ključ. Jednom kriptiran, sadržaj se može

dekriptirati samo pomoću istog ključa. Ipak, da bi se tajni ključ na siguran način mogao

dostaviti drugoj strani potrebno je koristiti asimetrične kriptografske algoritme koji koriste

dva ključa (javni i privatni). Javni ključ svima je dostupan, a sadržaj kriptiran javnim ključem

može biti dekriptiran samo odgovarajućim privatnim ključem kojeg posjeduje samo osoba

kojoj je poruka namijenjena.

Slika 4.5.1. Hijerarhija ključeva u SQL Serveru [38]

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 101

Za korištenje kriptografskih algoritama u SQL Serveru potrebno je slijediti hijerarhiju

ključeva (Slika 4.5.1). Primjerice, pretpostavimo da tablica "Kupac" sadrži stupac

"BrojKreditneKartice". Kako je taj podatak osjetljiv potrebno ga je zaštiti kriptiranjem, i to

na način da je po potrebi moguće pročitati izvorni sadržaj, tj. broj kreditne kartice. Zbog

toga u ovom slučaju nije moguće koristiti funkcije sažimanja već možemo upotrijebiti

simetrični kriptografski algoritam AES-256.

Primjer 4.5.3 – Implementacija hijerarhije ključeva

USE TestDB -- 0) Kreiranje tablice 'Kupac' CREATE TABLE [dbo].[Kupac]( [ID] [int] IDENTITY(1,1) NOT NULL, [OIB] [nvarchar](50) NULL, [BrojKreditneKartice] [varbinary](4000) NULL, PRIMARY KEY (ID) ) GO -- 1) Kreiranje glavnog ključa baze podataka CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKeyPass' GO -- 2) Kreiranje asimetričnog ključa kriptiranog glavnim ključem baze podataka CREATE ASYMMETRIC KEY MojAsimetricniKljuc WITH ALGORITHM = RSA_2048 GO -- 3) Kreiranje simetričnog ključa kriptiranog asimetričnim ključem CREATE SYMMETRIC KEY MojSimetricniKljuc WITH ALGORITHM = AES_256 ENCRYPTION BY ASYMMETRIC KEY MojAsimetricniKljuc GO

Stupac "BrojKreditneKartice" sadržavat će kriptiranu vrijednost, pa je stoga VARBINARY

tipa (Primjer 4.5.3). Za kriptiranje tog stupca koristit će se AES-256 algoritam pomoću

simetričnog ključa "MojSimetricniKljuc". Da bi se zaštitio taj simetrični ključ kreiran je

asimetrični ključ "MojAsimetricniKljuc" s algoritmom RSA (2048) čiji je privatni ključ također

potrebno zaštiti. Podrazumijevano, štiti ga se pomoću glavnog enkripcijskog ključa baze

podataka (eng. database master key, DMK) kao u Primjeru 4.5.3 ili proizvoljno definiranom

lozinkom.

Primjer 4.5.4 – Asimetrični ključ kriptiran proizvoljno definiranom lozinkom

CREATE ASYMMETRIC KEY MojAsimetricniKljuc WITH ALGORITHM = RSA_2048 ENCRYPTION BY PASSWORD = 'AsymmetricKeyPass' GO

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 102

Ukoliko je privatni ključ asimetričnog algoritma zaštićen proizvoljno definiranom lozinkom

nije nužno potrebno kreirati i koristiti DMK ključ. Ipak, iz sigurnosnih razloga to nije

preporučljivo jer korištenjem DMK ključa dodaju se nove razine enkripcije budući da je i

sam DMK ključ dodatno zaštićen ključem instance SQL Servera (eng. service master key,

SMK) i lozinkom.

Primjer 4.5.5 – Izrada rezervnih kopija SMK i DMK ključeva

-- Rezervna kopija servisnog ključa BACKUP SERVICE MASTER KEY TO FILE = 'C:\SQLServer_Backup\SMK_backup.bak' ENCRYPTION BY PASSWORD = 'ServiceBackupPass' -- Rezervna kopija glavnog ključa baze podataka BACKUP MASTER KEY TO FILE = 'C:\SQLServer_Backup\DMK_backup.bak' ENCRYPTION BY PASSWORD = 'DatabaseBackupPass'

Na disku je uvijek poželjno imati rezervne kopije SMK i DMK ključeva (Primjer 4.5.5) te

korištenih certifikata. U slučaju gubitka tih ključeva ili certifikata, bez njihovih rezervnih

kopija nije moguće dekriptirati simetrične i asimetrične ključeve unutar baza podataka, pa

time i dekriptirati podatke.

DMK ključ nalazi se u dvije baze podataka – u sistemskoj bazi podataka master gdje je

zaštićen SMK ključem te u lokalnoj bazi podataka gdje je zaštićen lozinkom koja je

definirana pri kreiranju tog ključa.

Primjer 4.5.6 – Korištenje simetričnog kriptografskog algoritma

-- Otvaranje simetričnog ključa USE TestDB OPEN SYMMETRIC KEY MojSimetricniKljuc DECRYPTION BY ASYMMETRIC KEY MojAsimetricniKljuc GO -- Umetanje kriptiranog sadržaja INSERT INTO Kupac(OIB, BrojKreditneKartice) VALUES ('111111', ENCRYPTBYKEY(KEY_GUID('MojSimetricniKljuc'), '1234-5678-9012')) GO -- Sadržaj kriptiranog stupca SELECT BrojKreditneKartice FROM Kupac WHERE OIB = '111111' -- 0x00FE30C185C69B42BF5D0D0432F8F518010000004B926B64E5... GO -- Dekriptiranje podataka SELECT CONVERT(VARCHAR(50), DECRYPTBYKEY(BrojKreditneKartice)) FROM Kupac WHERE OIB = '111111' -- 1234-5678-9012

Nakon implementacije željene hijerarhije ključeva iz Primjera 4.5.3 moguće je koristiti

simetrični ključ "MojSimetricniKljuc" za kriptiranje i dekriptiranje brojeva kreditnih kartica iz

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 103

tablice "Kupac" (Primjer 4.5.6). Simetrični ključ prvo je potrebno otvoriti, a nakon toga za

kriptiranje i dekriptiranje sadržaja koristiti funkcije ENCRYPTBYKEY i DECRYPTBYKEY.

Odgovarajuće inačice ovih funkcija postoje i u slučajevima kada se za kriptiranje i

dekriptiranje koriste certifikati i asimetrični kriptografski algoritmi.

Moglo se odabrati i neki drugi plan. Primjerice, stupac "BrojKreditneKartice" mogao je

izravno biti kriptiran asimetričnim ključem, ali zbog brzine i performansi baze podataka to

nije preporuka. Također, za zaštitu simetričnog ključa mogli smo umjesto asimetričnog

ključa kreirati certifikat itd.

4.6. Transparentna enkripcija podataka

Osim pojedinih stupaca, moguće je kriptirati i kompletnu bazu podataka korištenjem

transparentne enkripcije podataka (eng. transparent data encryption, TDE). Cilj je ove

enkripcije zaštiti podatke u slučaju krađe pa se u tu svrhu kriptiraju sve datoteke baze

podataka, uključujući dnevnik transakcija i datoteke rezervnih kopija.

Slika 4.6.1. Arhitektura transparentne enkripcije podataka [39]

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 104

Za kriptiranje sadržaja baze podataka i njenih datoteka koristi se simetrični algoritam čiji

se ključ (Database Encryption Key, DEK) kriptira certifikatom smještenim u master bazi

podataka ili asimetričnim ključem smještenim u EKM (eng. extensible key management)

modulu (Slika 4.6.1). Bez tog certifikata (ili asimetričnog ključa) uljez neće moći dekriptirati

DEK pa time niti sadržaj baze podataka.

Primjer 4.6.1 – Kreiranje DMK ključa i server certifikata

USE master GO -- Kreiranje DMK ključa master baze podataka CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKeyPass' GO -- Kreiranje server certifikata USE master CREATE CERTIFICATE TDE_Certifikat WITH SUBJECT = 'TDE certifikat' GO

Prije korištenja TDE-a potrebno je pobrinuti se da u master bazi podataka postoji DMK

ključ i certifikat koji će biti zaštićen tim ključem (Primjer 4.6.1). Tek nakon toga moguće je

generirati DEK ključ i kriptirati bazu podataka.

Slika 4.6.2. Kriptiranje baze podataka (TDE) SSMS alatom

Nakon kreiranja certifikata uvijek je poželjno izraditi njegovu rezervnu kopiju jer se u slučaju

gubitka certifikata neće moći dekriptirati DEK ključevi zaštićeni tim certifikatom. Ukoliko

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 105

prije uključivanja TDE-a rezervna kopija certifikata ne postoji javit će se upozorenje poput

onoga na Slici 4.6.2.

Kriptiranje baze podataka korištenjem TDE-a može se inicirati SSMS alatom tako da se

desnim klikom na željenu bazu podataka odabere stavka "Tasks / Manage Database

Encryption". Tada se pojavljuje dijalog kao na Slici 4.6.2, gdje se prilikom klika na gumb

"OK" generira i izvršava sljedeći T-SQL kod.

Primjer 4.6.2 – Kreiranje DEK ključa i kriptiranje baze podataka

-- Kreiranje DEK ključa TestDB baze podataka kriptiranog certifikatom USE TestDB; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE TDE_Certifikat; GO -- Uključi kriptiranje baze podataka DEK ključem ALTER DATABASE TestDB SET ENCRYPTION ON; GO

Izvršavanjem upita iz Primjera 4.6.2 kreira se DEK ključ zaštićen server certifikatom te se

njime u konačnici kriptira TestDB baza podataka. Ukoliko bi uljez ukrao TestDB bazu

podataka (TestDB.mdf, TestDB.ldf itd.) te ju pokušao pripojiti svojoj instanci dobio bi

poruku kao na Slici 4.6.3.

Slika 4.6.3. Greška: nije pronađen odgovarajući certifikat

U master bazi podataka uljeza neće postojati odgovarajući certifikat za dekriptiranje DEK

ključa ukradene baze podataka pa ju uljez neće moći dekriptirati i pripojiti svojoj instanci

SQL Servera. Greška kao na Slici 4.6.3 dogodit će se i ukoliko uljez pokuša doći do

podataka obnovom ukradene rezervne kopije.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 106

4.7. Uvijek kriptirani podaci

Izlaskom SQL Servera 2016 sadržaj pojedinih stupaca tablice moguće je zaštiti

korištenjem značajke "Always Encrypted". Ova značajka omogućuje klijent aplikacijama

čitanje i obradu kriptiranog sadržaja u čitljivom, dekriptiranom obliku, dok se prilikom

spremanja izmjena ti podaci kriptiraju prije slanja nazad u bazu podataka.

Upotrebom ove značajke, baza podataka u svakom trenutku sadrži kriptirane podatke koje

ne mogu dekriptirati niti korisnici s najvećim ovlastima u SQL Serveru. Time se ujedno

postiže i separacija onih koji održavaju podatke (administratori baza podataka) i onih koji

su vlasnici podataka i trebaju imati uvid u njih (korisnici). [40]

Osim korištenjem T-SQL izjava, značajku "Always Encrypted" moguće je konfigurirati i

pomoću ugrađenog čarobnjaka u SSMS alatu minimalne inačice 17.0. Pokreće se desnim

klikom na ime tablice ili stupca tablice te odabirom stavke "Encrypt Columns…".

Slika 4.7.1. Generiranje certifikata i glavnog ključa stupaca (CMK)

Sadržaj pojedinog stupca kriptira se ključem stupca (eng. column encryption key, CEK), a

ključevi stupaca kriptiraju se glavnim ključem stupaca (eng. column master key, CMK).

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 107

Ključevi stupaca spremljeni su unutar instance SQL Servera, a glavni ključ stupaca sprema

se u nekom vanjskom resursu kao što je osobni certifikat. Nakon odabira destinacijskog

certifikata (ili kreiranja novog) moguće je kreirati i spremiti CMK ključ (Slika 4.7.1).

Da bismo kreirali CMK ključ, možemo koristiti SSMS alat koji će se generirati i izvršiti T-

SQL kod na uzoru iz Primjera 4.7.1.

Primjer 4.7.1 – Kreiranje CMK ključa

USE [TestDB] /****** Object: ColumnMasterKey [CMK] CREATE COLUMN MASTER KEY [CMK] WITH ( KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE', KEY_PATH = N'CurrentUser/My/63FEFDE48A2F7099DAAD246B6ADDCAA9692CF093' ) GO

SQL Server sadrži tek metapodatke koji ukazuju na lokaciju CMK ključa (Primjer 4.7.1), a

nakon njegovog kreiranja potrebno je kreirati i barem jedan ključ stupca (CEK).

Slika 4.7.2. Generiranje ključa stupca

Za potrebe primjera pretpostavimo da želimo kriptirati stupac "BrojKreditneKartice" tipa

varchar(50). U tu svrhu kreirat ćemo CEK ključ "CEK_KreditnaKartica" koji će biti kriptiran

prethodno generiranim CMK ključem (Slika 4.7.2).

Primjer 4.7.2 – Kreiranje CEK ključa

USE [TestDB] CREATE COLUMN ENCRYPTION KEY [CEK_KreditnaKartica] WITH VALUES

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 108

( COLUMN_MASTER_KEY = [CMK], ALGORITHM = 'RSA_OAEP', ENCRYPTED_VALUE = 0x016E000001630075007200720065006E00740075007300650072002F006D0079002F003600330066006500660064006500340038006100320066003700300039003900640061006100640032003400360062003600610064006400630061006100390036003900320063006600300039003300A17E2E6CC56BF1D80604098F7AB06EA39892D6A9CFF108E41D9CE1942846887037D9D25311EF3467297C34B31E1F0421256467E9B37D87BDBA427B8306DB1C4EA1E2FFBE3F9D97268490D99547ADA0C607D2A8529E7E4AAF5E328079FA845DF04F454B4BC150F2E75B90B6B9258A50243D7A7EB9616D069F98F9AB156A5AFEE841384CC51B8824B402A2D2654594E9734DE1C509EEFA0A9E0E585BADD1B506A126CD5AEF42E5D1464052A2F6933A1D83A07AC1DD5556515A821C90FF145AB362269D9AC595AC87770D23AF43D983D5530B63B3649149934B984C7DE1D8EB593A3CFF93FCF8D9D96F4CC358A5A7FF2463AED4ED0BC506C2FDD06BE1EC1311B13669F0619FA5A93BC7BA83AEDB4CBB2BE015E0D51CE057885106262AF074397E047AECA7A2D5B5CFD4BAE026B36E9AA939A63EC5B47D10CBBB5B4D93053E013FB59C0ABE168CB974EB0D7D3AE643D5F8ABEE1FE9F3F754C87BE6CC0E74049FFDA6A718C7469401D06C5A294C7B75A6220B004D6A7877B2055CDD95B29F2EEA46F90C1F1E6EAE31A384DE0D7526F9289227BEA06767332033DD7E831482F6BCD1EFDF4CFF07A16DD08476DA4FC7F0E79504476BBB4C484D8AD523A61E7177B2B2CF55BB475FD8B6802FB70DCB1F3A6C85E8B0B553FF6589533A680391D5CA548FEF582F486857759A503B83063B0954C87B2429086B23D3E0EE0242C88B98009D0D )

SQL Server ima uvid u kriptiranu vrijednost CEK ključa te algoritam kojim je ključ kriptiran

(Primjer 4.7.2). Međutim, za njegovo dekriptiranje bit će potreban CMK ključ, odnosno

certifikat u kojem je spremljen.

Slika 4.7.3. Odabir stupca za kriptiranje

Nakon što postoji CMK i barem jedan CEK ključ može se pristupiti kriptiranju sadržaja

stupaca (Slika 4.7.3). Jednim CEK ključem moguće je kriptirati sve stupce tablice, a svaki

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 109

od stupaca može biti kriptiran determinističkim ili slučajnim tipom ključa. Ključevi

determinističkog tipa uvijek će generirati istu kriptiranu vrijednost za jedan podatak, dok će

se korištenjem slučajnog tipa ključa uvijek generirati različita kriptirana vrijednost za isti

podatak. Deterministički ključ dozvoljava operacije poput grupiranja, filtriranja i spajanja

tablica, ali manje je siguran od slučajnog tipa ključa. Primjerice, u situacijama kada stupac

sadrži podatke poput spola osobe (M/Z) ili vrijednosti tipa True/False svakako je preporuka

koristiti slučajni tip ključa.

Za primjer uzmemo sljedeći sadržaj tablice "Kupac":

ID OIB BrojKreditneKartice

1 111111 1111-2222-3333-4444

2 222222 2222-3333-4444-5555

Nakon korištenja čarobnjaka "Always Encrypted" s postavkama kao na Slici 4.7.3 definicija

stupca "BrojKreditneKartice" bit će izmijenjena (Primjer 4.7.3).

Primjer 4.7.3 – Definicija kriptiranog stupca "BrojKreditneKartice"

[BrojKreditneKartice] [varchar](50) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_KreditnaKartica], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL

Ukoliko sada pokušamo dohvatiti sadržaj tablice "Kupac" naredbom SELECT kao rezultat

dobit ćemo kriptirane podatke u stupcu "BrojKreditneKartice".

ID OIB BrojKreditneKartice

1 111111 0x011A51BB80E9EFE9DE45952ED5C1E3….

2 222222 0x012C1EE64B88B4C886150AF7F91C20D….

Da bi klijent aplikacije mogle vidjeti dekriptirani oblik tih podataka, moraju koristiti jedan od

upravljačkih programa (eng. driver) koji podržava značajku "Always Encrypted". Trenutno

postoje tri takva upravljačka programa:

▪ .NET Framework Data Provider for SQL Server

▪ JDBC

▪ Windows ODBC

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 110

Primjerice, u slučaju korištenja prvog upravljačkog programa, .NET aplikacije moraju

koristiti minimalno .NET Framework 4.6. U izrazu "Connection string" potrebno je dodati

"Column Encryption Setting=enabled", nakon čega će ta aplikacija biti u mogućnosti vidjeti

kriptirani sadržaj stupaca u čitljivom obliku.

Za primjer može se iskoristiti i SSMS kao klijent aplikacija baze podataka. Prilikom prijave

potrebno je kliknuti na gumb "Options >>", a zatim na "Additional Connection Parameters".

Enkripciju stupaca potrebno je omogućiti dodavanjem izraza "Column Encryption

Setting=enabled" (Slika 4.7.4).

Slika 4.7.4. Omogućavanje enkripcije stupaca u SSMS alatu

Nakon prijave naredbom SELECT moguće je dohvatiti sadržaj kriptiranog stupca

"BrojKreditneKartice" u čitljivom (dekriptiranom) obliku. SSMS alat ponudit će i mogućnost

automatske parametrizacije T-SQL varijabli za potrebe kriptiranja i spremanja podataka

nazad u bazu podataka. Parametrizacija se može uključiti i ručno korištenjem stavke

"Query / Query Options… / Execution / Advanced / Enable Parametrization for Always

Encrypted".

Primjer 4.7.4 – Dodavanje novog zapisa i vrijednosti u kriptirani stupac

DECLARE @Kartica varchar(50) = '3333-4444-5555-6666' INSERT INTO Kupac(OIB, BrojKreditneKartice) VALUES (333333, @Kartica)

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 111

Zbog uključene parametrizacije, upit iz Primjera 4.7.4 bit će uspješno izvršen, a u tablicu

"Kupac" bit će spremljen novi zapis s kriptiranim brojem kreditne kartice.

Ukoliko u nekom trenutku više ne želite kriptirati stupce korištenjem "Always Encrypted"

značajke potrebno je ponovno pokrenuti čarobnjak sa Slike 4.7.3 te za tip enkripcije

odabrati "Plaintext".

4.8. Dinamičko maskiranje podataka

Značajka dinamičkog maskiranja podataka (eng. dynamic data masking, DDM)

predstavljena je izlaskom SQL Servera 2016. Njom je omogućeno skrivanje osjetljivih

podataka od neovlaštenih korisnika korištenjem funkcija maskiranja. DDM značajkom

podaci se ne kriptiraju već se tek prikazuju u teško razumljivom ili nepotpunom obliku.

Funkcija Opis

Default Za skrivanje tekstualnih tipova podataka koriste se XXXX

znakovi, a za numeričke tipove podataka 0 (nula). Datum i

vrijeme skrivaju se vrijednošću 01.01.1900 00:00:00.0000000.

Email Prikazuje se samo prvi znak adrese e-pošte s konstantnim

".com" sufiksom. Npr. aXXX.XXXX.com.

Random Koristi se za skrivanje numeričkih tipova podataka nekom

slučajnom vrijednošću unutar definiranog intervala.

Partial Prikazuje određen broj početnih i krajnjih znakova, a središnji

dio teksta skriven je proizvoljnim znakovima.

Tablica 4.8.1. Funkcije maskiranja u SQL Serveru [41]

Za demonstraciju DDM značajke pretpostavimo da postoji tablica "Kupac" sa sljedećim

sadržajem:

OIB Naziv email DatumUclanjenja BrojKreditneKartice

111111 ABC d.o.o. [email protected] 2017-07-17 1111-2222-3333-4444

222222 DEF j.d.o.o. [email protected] 2015-05-16 2222-3333-4444-5555

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 112

Ukoliko zadnja tri stupca proglasimo osjetljivim podacima te ih želimo zaštiti DDM

značajkom, to bismo napravili na sljedeći način (Primjer 4.8.1).

Primjer 4.8.1 – Upotreba funkcija maskiranja

ALTER TABLE KUPAC ALTER COLUMN email ADD MASKED WITH(FUNCTION = 'email()') ALTER TABLE KUPAC ALTER COLUMN DatumUclanjenja ADD MASKED WITH(FUNCTION = 'default()') ALTER TABLE KUPAC ALTER COLUMN BrojKreditneKartice ADD MASKED WITH(FUNCTION = 'partial(0,"XXXX-XXXX-",4)')

Naredbom ALTER potrebno je tek promijeniti definicije stupaca s osjetljivim podacima.

Tada se podaci u tim stupcima podrazumijevano maskiraju svakom korisniku koji nema

administratorske ovlasti i nije vlasnik (eng. owner) baze podataka (Primjer 4.8.2).

Primjer 4.8.2 – Demonstracija DDM značajke

-- Kreiranje korisnika koji ima ovlasti za dohvat podataka USE TestDB CREATE USER [Korisnik1] WITHOUT LOGIN GRANT SELECT ON [dbo].[Kupac] TO [Korisnik1] GO -- Izvrši upit u sigurnosnom kontekstu kreiranog korisnika EXECUTE AS USER = 'Korisnik1' SELECT * FROM Kupac REVERT

Izvršavanjem T-SQL koda iz Primjera 4.8.2 kreirat će se korisnik bez prijavnog naloga koji

ima ovlasti za dohvat podataka naredbom SELECT. Prelaskom u njegov sigurnosni

kontekst te izvršavanjem SELECT naredbe kao rezultat dobije se sljedeće:

OIB Naziv email DatumUclanjenja BrojKreditneKartice

111111 ABC d.o.o. [email protected] 1900-01-01 XXXX-XXXX-XXXX-4444

222222 DEF j.d.o.o. [email protected] 1900-01-01 XXXX-XXXX-XXXX-5555

Naredbom GRANT moguće je dodijeliti UNMASK dozvolu i nekom drugom korisniku baze

podataka, a naredbom ALTER COLUMN može se ukinuti korištenje maske za odabrani

stupac (npr. ALTER COLUMN email DROP MASKED).

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 113

Unatoč nedostatku UNMASK dozvole korisnik i dalje može umetati nove i mijenjati

postojeće zapise u tablici. Također, u slučaju pokušaja umetanja maskiranih podataka u

drugu tablicu (SELECTI INTO, INSERT INTO) rezultat će biti maskirani podaci u odredišnoj

tablici.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 114

5. Održavanje i nadzor

5.1. Izrada rezervnih kopija

Da bi se minimalizirao rizik od gubitka podataka uslijed neočekivanih kvarova

sklopovlja, pogrešnog rukovanja podacima ili u slučaju katastrofe poželjno je periodički

izrađivati rezervne kopije baza podataka. Odabir odgovarajuće strategije za izradu i povrat

rezervnih kopija jedna je od ključnih stavki kvalitetnog održavanja, a o tome svjedoče i

mnogobrojne knjige napisane na tu temu.

SQL Server podržava tri osnovna tipa rezervnih kopija, a to su:

▪ Potpuna rezervna kopija (eng. full backup)

▪ Diferencijalna rezervna kopija (eng. differential backup)

▪ Rezervna kopija dnevnika transakcija (eng. transaction log backup)

Potpuna rezervna kopija najsigurniji je oblik rezervne kopije, a njeno je postojanje i

preduvjet za izradu diferencijalne kopije i kopije dnevnika transakcija.

Slika 5.1.1. Izrada potpune rezervne kopije u SSMS alatu

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 115

Periodičke potpune rezervne kopije najčešće su dovoljne kada je riječ o malim bazama

podataka. S obzirom da tada ne zauzimaju puno diskovnog prostora lako ih je spremati, a

i povrat baze podataka iz takve rezervne kopije traje jako kratko vrijeme. Potpuna rezervna

kopija može se kreirati u bilo kojem trenutku upotrebom SSMS alata, odnosno desnim

klikom na željenu bazu podataka i korištenjem stavke "Tasks / Backup…" (Slika 5.1.1).

Alternativno, rezervna kopija može se kreirati i izvršavanjem odgovarajućeg T-SQL koda.

Nakon odabira željene baze podataka i tipa rezervne kopije (Full) moguće je odabrati i

stavku "Copy-only Backup" (Slika 5.1.1). Ova stavka koristi se samo u slučajevima kada

se izrađuje rezervna kopija kojom se ne želi prekinuti već postojeći lanac (ciklus) rezervnih

kopija. Primjerice, za potrebe prebacivanja baze podataka u testno okruženje izradom

ovakvog tipa rezervne kopije ne utječe se na kasnije diferencijalne i rezervne kopije

dnevnika transakcija. One neće kao polaznu točku koristiti kreiranu "Copy-only Backup"

rezervnu kopiju već tek zadnju potpunu rezervnu kopiju baze podataka. [42]

Izrada rezervne kopije može se odnositi na kompletnu bazu podataka ili na samo neke

njene dijelove (odabrane datoteke ili datotečne grupe). Tada je riječ o parcijalnoj rezervnoj

kopiji. Također, rezervna kopija može imati i vijek trajanja, a u tom razdoblju (definiranom

brojem dana ili krajnjim datumom) datoteka rezervne kopije ne može biti prepisana drugom

rezervnom kopijom.

Odredište rezervne kopije najčešće je datoteka na disku, a može biti i traka (eng. tape) te

URL. Svaki od ovih odredišta može biti zasebno kreiran i korišten kao uređaj rezervne

kopije (eng. backup device) koji postoji na razini SQL Server instance (stavka "Server

objects / Backup devices").

Na Slici 5.1.1 odredište rezervne kopije jedna je datoteka na disku. U najčešćim

slučajevima ovo će biti zadovoljavajući pristup jer će kompletan sadržaj rezervne kopije biti

smješten samo na jednom mjestu. Međutim, kada je riječ o velikim bazama podataka

izrada rezervnih kopija i njihov povrat može iziskivati puno vremena. Da bi se ti procesi

ubrzali, kao odredište može se definirati više datoteka rezervne kopije. Tada će se prilikom

njene izrade paralelno upotrebom više dretvi pisati sadržaj tih datoteka, kao što će se

paralelno i čitati sadržaj iz tih datoteka prilikom vraćanja rezervne kopije.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 116

Za maksimalnu učinkovitost preporuka je da se sve takve datoteke nalaze rasprostranjene

kroz više diskova. Ipak, tada je veći rizik od gubitka podataka budući da su za povrat takve

rezervne kopije potrebne sve odredišne datoteke.

Slika 5.1.2. Postavke rezervne kopije

U stavci "Options" (Slika 5.1.2) definiramo želimo li novu rezervnu kopiju dodati na kraj

datoteke (medija) rezervne kopije ili tu datoteku želimo prepisati novom rezervnom

kopijom. Tako bi se u prvom slučaju unutar jedne datoteke mogle nalaziti višestruke

rezervne kopije (bilo kojeg tipa), a u drugom slučaju tek zadnja rezervna kopija.

Rezervnu je kopiju uvijek poželjno provjeriti nakon kreiranja kako bi se sa sigurnošću znalo

je li čitljiva i može li se koristiti za povrat baze podataka (stavke "Verify backup when

finished" i "Perform checksum before writting to media"). Iz istog razloga najčešće nije

poželjno nastaviti s izradom rezervne kopije u slučaju greške (stavka "Continue on error").

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 117

Konačno, moguće je koristiti i kompresiju datoteka rezervne kopije kako bi se smanjila

njihova veličina, a klikom na gumb "OK" generira se i izvršava odgovarajući T-SQL kod za

izradu rezervne kopije (Primjer 5.1.1).

Primjer 5.1.1 – Izrada potpune rezervne kopije korištenjem T-SQL koda

BACKUP DATABASE [TestDB] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MAIN\MSSQL\Backup\TestDB.bak' WITH NOFORMAT, NOINIT, NAME = N'TestDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

Zbog svoje veličine, česte potpune rezervne kopije nisu najbolje rješenje kada je riječ o

velikim bazama podataka. Da bi se uštedio prostor na disku preporuka je češća izrada

diferencijalnih rezervnih kopija, a one sadrže tek izmjene koje su nastale nakon zadnje

potpune rezervne kopije.

Slika 5.1.3. Potpune i diferencijalne rezervne kopije [43]

Diferencijalne rezervne kopije nisu inkrementalne već kumulativne. Tako će svaka

diferencijalna rezervna kopija u sebi sadržavati i sadržaj svake prethodne diferencijalne

rezervne kopije, i tako sve dok se ne napravi sljedeća potpuna rezervna kopija (Slika 5.1.3).

Bez obzira na postojanost diferencijalne rezervne kopije za povrat baze podataka (eng.

restore) i dalje je potrebna potpuna rezervna kopija. Prvo se vraća potpuna rezervna kopija,

a nakon nje odgovarajuća diferencijalna rezervna kopija.

Primjer 5.1.2 – Izrada diferencijalne rezervne kopije korištenjem T-SQL koda

BACKUP DATABASE [TestDB] TO DISK = N'Diferencijalna.bak' WITH DIFFERENTIAL

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 118

Diferencijalnu rezervnu kopiju moguće je izraditi korištenjem SSMS alata na sličan način

kao i potpunu rezervnu kopiju ili izvršavanjem T-SQL koda kao u Primjeru 5.1.2.

U kombinaciji s potpunim i diferencijalnim rezervnim kopijama najčešće se koriste i

rezervne kopije dnevnika transakcija (eng. transaction log backups). Za razliku od

diferencijalnih, rezervne kopije dnevnika transakcija inkrementalne su, tj. svaka od njih

sadrži samo izmjene napravljene od posljednje rezervne kopije dnevnika transakcija.

Moguće ih je izrađivati samo ukoliko baza podataka prethodno ima izrađenu potpunu

rezervnu kopiju te ukoliko koristi potpuni model oporavka. Također, jedino ovaj tip rezervne

kopije omogućuju povrat baze podataka u željenu točku u vremenu (eng. point in time

recovery, PITR).

Slika 5.1.4. Potpuna, diferencijalne i rezervne kopije dnevnika transakcija

Ovisno o veličini baze podataka, broju transakcija u zadanom vremenu, osjetljivosti

podataka i sigurnosnoj politici tvrtke može postojati veliki broj različitih strategija izrade

rezervnih kopija. Jedna od njih prikazana je Slikom 5.1.4 gdje se potpune rezervne kopije

izrađuju jednom dnevno. Svakih 6 sati izrađuju se diferencijalne rezervne kopije, a između

pojedinih diferencijalnih izrađuju se rezervne kopije dnevnika transakcija, svaka u razmaku

od sat vremena.

U slučaju neželjenog gubitka podataka moguće je napraviti povrat baze podataka do

najnovije rezervne kopije dnevnika transakcija. Sve transakcije koje su se dogodile nakon

toga mogu se vratiti samo ukoliko postoji rezervna kopija repa dnevnika transakcija (eng.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 119

tail of the transaction log), a nju je moguće kreirati upotrebom stavke "Back up the tail of

the log…" sa Slike 5.1.2 ili u nekim slučajevima prilikom povrata baze podataka.

Ukoliko su datoteke dnevnika transakcija u potpunosti popunjene korisnici više neće moći

koristiti bazu podataka. Da bismo spriječili rast tih datoteka i oslobodili njihov sadržaj

potrebno je periodički izrađivati rezervne kopije dnevnika transakcija korištenjem stavke

"Truncate the transaction log" (Slika 5.1.2). Alternativno, isti rezultat nije moguće dobiti

samo izradom potpune ili diferencijalne rezervne kopije jer one ne podrazumijevaju i izradu

rezervne kopije dnevnika transakcija.

5.2. Povrat rezervnih kopija

Prilikom povrata baze podataka treba vratiti kompletan lanac rezervnih kopija koji

vodi do željenog datuma i vremena. Primjerice, za povrat baze podataka sa Slike 5.1.4 u

najnovije vrijeme prvo je potrebno vratiti zadnju potpunu rezervnu kopiju, a nakon nje i

zadnju diferencijalnu rezervnu kopiju. Tek nakon toga vrši se povrat svih rezervnih kopija

dnevnika transakcija koje su iz vremena nakon zadnje diferencijalne rezervne kopije.

Slika 5.2.1. Primjer lanca rezervnih kopija

Za svaku rezervnu kopiju moguće je vidjeti odakle počinje i završava, odnosno informacije

o početnim i završnim log sekvencama (eng. log sequence numbers, LSN). Tako je na Slici

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 120

5.2.1 vidljivo da zadnja rezervna kopija dnevnika transakcija počinje točno ondje gdje

završava prethodna, a to je upravo iz razloga što su rezervne kopije tog tipa inkrementalne,

tj. nadovezuju se jedna na drugu. Također je moguće vidjeti i vezu između potpune i

diferencijalnih rezervnih kopija uspoređujući potpune LSN brojeve (eng. full LSN) i LSN

brojeve kontrolnih točki (eng. checkpoint LSN).

Za povrat baze podataka u točno određenu točku u vremenu (datum i vrijeme) potrebno je

imati odgovarajuće rezervne kopije dnevnika transakcija. Zatim, klikom na gumb "Timeline"

(Slika 5.2.1) pojavljuje dijalog kao na Slici 5.2.2.

Slika 5.2.2. Povrat baze podataka u određenu točku u vremenu

Na grafički način prikazane su sve već postojeće rezervne kopije, a klikom na gumb "OK"

lanac rezervnih kopija sa Slike 5.2.1 automatski će se reorganizirati tako da se omogući

povrat baze podataka u odabranu točku u vremenu. To uključuje automatski odabir

odgovarajuće potpune, diferencijalne i svih potrebnih rezervnih kopija dnevnika

transakcija.

Da bismo testirali povrat baze podataka možemo ju prvo pokušati vratiti pod novim

imenom, a ono se može definirati u polju "Destination / Database" (Slika 5.2.1). Sukladno

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 121

novom imenu, potrebno je promijeniti i imena odredišnih datoteka u stavci "Files" kako ne

bismo pokušali prepisati već postojeću bazu podataka u produkciji.

Slika 5.2.3. Postavke povrata baze podataka

Povrat baze podataka najčešće znači prijepis već postojeće baze podataka, pa je stavku

"Overwrite the existing database" (Slika 5.2.3) potrebno označiti ukoliko odredišna baza

podataka već postoji. U protivnom neće biti moguće napraviti njen povrat u prijašnje stanje.

Jedna od najvažnijih stavki povrata baze podataka status je oporavka, a on može biti:

▪ RESTORE WITH RECOVERY – Baza podataka dostupna je korisnicima odmah

nakon završenog povrata rezervne kopije. Ukoliko se vrši povrat više rezervnih

kopija odjednom tek nakon povrata zadnje od njih baza podataka treba biti u

oporavljenom stanju.

▪ RESTORE WITH NORECOVERY – Koristi se prilikom vraćanja višestrukih

rezervnih kopija. Korisnici nemaju pristup bazi podataka sve dok se ne povrate sve

željene rezervne kopije. Tek nakon povrata zadnje od njih bazu podataka potrebno

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 122

je postaviti u oporavljeno stanje naredbom RESTORE. Primjerice, RESTORE

DATABASE TestDB WITH RECOVERY.

▪ RESTORE WITH STANDBY – Baza podataka dostupna je samo za čitanje. Sve

nedovršene transakcije neće biti će izvršene, ali će biti spremljene u zasebnu

datoteku za slučaj da se predomislimo, odnosno želimo se vratiti u vrijeme prije

zadnjeg povrata baze podataka. [44]

Kada se baza podataka vraća u vrijeme zadnje rezervne kopije, može biti nepoželjno

izgubiti sve one transakcije koje su se dogodile nakon tog vremena. Zato se

podrazumijevano prilikom ovakvog tipa povrata izrađuje i rezervna kopija repa dnevnika

transakcija. Upravo u ovom slučaju bazu podataka potrebno je ostaviti u statusu WITH

NORECOVERY kako bi se nakon povrata potrebnog lanca rezervnih kopija kao zadnja

mogla uredno vratiti i rezervna kopija repa dnevnika transakcija.

Povrat baze podataka moguć je samo ukoliko ne postoje druge aktivne konekcije prema

bazi podataka. Njih je moguće i nasilno prekinuti odabirom stavke "Close existing

connections to destination database" sa Slike 5.2.3 ili naredbom SET SINGLE USER WITH

ROLLBACK IMMEDIATE (Primjer 5.2.1).

Primjer 5.2.1 – Povrat lanca rezervnih kopija korištenjem T-SQL koda

USE [master] ALTER DATABASE [TestDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [TestDB] FROM DISK = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.FULLSERVER\MSSQL\Backup\testdb.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 5 RESTORE DATABASE [TestDB] FROM DISK = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.FULLSERVER\MSSQL\Backup\testdb.bak' WITH FILE = 3, NORECOVERY, NOUNLOAD, STATS = 5 RESTORE LOG [TestDB] FROM DISK = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.FULLSERVER\MSSQL\Backup\testdb.bak' WITH FILE = 4, NORECOVERY, NOUNLOAD, STATS = 5 RESTORE LOG [TestDB] FROM DISK = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.FULLSERVER\MSSQL\Backup\testdb.bak' WITH FILE = 5, NOUNLOAD, STATS = 5 ALTER DATABASE [TestDB] SET MULTI_USER GO

Za povrat kompletnog lanca rezervnih kopija sa Slike 5.2.1 generirat će se i izvršiti T-SQL

kod iz Primjera 5.2.1. Iako je na Slici 5.2.3 odabran status oporavka RESTORE WITH

RECOVERY on se odnosi samo na zadnju rezervnu kopiju u postojećem lancu.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 123

5.3. SQL Server Agent

Uz odgovarajuću strategiju izrade rezervnih kopija održavanje baze podataka

podrazumijeva i periodičku provjeru integriteta, održavanje indeksa, čišćenje nepotrebnih

datoteka itd. Da bi se proces redovnog održavanja baza podataka automatizirao u SQL

Serveru moguće je koristiti komponente SQL Server Agent servisa te ih kombinirati s

planovima održavanja (eng. maintenance plans).

SQL Server Agent je Windows servis zadužen za automatizaciju administrativnih poslova

u SQL Serveru. [45] Postoji kao sastavni dio svake instance te se podrazumijevano ne

pokreće automatski podizanjem operacijskog sustava. Međutim, te postavke moguće je

definirati prilikom instalacije instance (Slika 1.4.6), naknadno izmijeniti upotrebom SQL

Server Configuration Manager aplikacije ili u popisu svih Windows servisa na računalu.

SQL Server Agent sastoji se od četiri komponente:

▪ Poslovi (eng. jobs)

▪ Rasporedi (eng. schedules)

▪ Upozorenja (eng. alerts)

▪ Operateri (eng. operators)

Najvažnija su komponenta SQL Server Agenta poslovi jer se pomoću njih definiraju

administrativne zadaće. Svaki posao izvršava se na osnovu rasporeda, generiranog

upozorenja ili na zahtjev (izvršavanjem uskladištene procedure sp_start_job). Također,

posao može biti i jednokratan, pri čemu se automatski briše nakon uspješnog završetka.

Slika 5.3.1. Kreiranje posla u SQL Server Agentu

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 124

Prilikom kreiranja pojedinog posla moguće je definirati njegovo ime, vlasnika, kategoriju i

opis (Slika 5.3.1). S obzirom da su za upravljanje i izvršavanje poslova potrebne neke od

najviših ovlasti u SQL Serveru vrlo često se kao vlasnik posla koristi prijavni nalog "sa" ili

jedan od drugih prijavnih naloga koji je član sysadmin uloge.

Slika 5.3.2. Kreiranje koraka posla

Svaki posao sastoji se od barem jednog koraka. Ukoliko pretpostavimo da je cilj našeg

posla napraviti potpunu rezervnu kopiju TestDB baze podataka, potrebno je napraviti korak

tipa "Transact-SQL script (T-SQL)" te u polje "Command" kopirati T-SQL kod iz Primjera

5.1.1. Da bismo testirali ispravnost T-SQL koda moguće je kliknuti gumb "Parse" (Slika

5.3.2), nakon čega se dobije odgovarajuća povratna informacija.

Rezultat izvršavanja pojedinog koraka posla ne mora nužno biti uspješan. Ovisno o

njegovoj kritičnosti moguće je u slučaju neuspješnog završetka koraka zaustaviti ostatak

posla (naredne korake) ili definirati neku drugu akciju. Sve akcije nakon uspješnog ili

neuspješnog završetka koraka moguće je definirati u kartici "Advanced" sa Slike 5.3.2.

Ukoliko je riječ o poslu izrade rezervnih kopija, taj posao poželjno je izvršavati periodički,

odnosno unaprijed definiranim rasporedom (Slika 5.3.3).

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 125

Slika 5.3.3. Raspored izvršavanja posla

Tipom rasporeda definira se trenutak i učestalost izvršavanja posla. To može biti posao

koji se ponavlja, izvršava samo jedanput ili se izvršava u posebnim situacijama (prilikom

pokretanja SQL Server Agenta ili kada je procesor u stanju mirovanja). Učestalost posla

može biti na dnevnoj, tjednoj ili mjesečnoj bazi, sa ili bez krajnjeg datuma izvršavanja.

Također, svaki posao može se izvršavati sukladno jednom ili više rasporeda.

Posao može biti izvršen i kao rezultat generiranog upozorenja (eng. alert). Upozorenje je

automatski odgovor na određeni događaj, pri čemu može biti riječ o SQL Server događaju,

problematičnim performansama izvedbe ili WMI (Windows Management Instrumentation)

događajima. [45] Primjerice, upozorenje se može generirati prilikom neuspješno

obavljenog posla, nedovoljnih prava i dozvola, nedostatka resursa, kvara na sklopovlju itd.

U tom trenutku može biti kontaktiran i operater, odnosno jedna od osoba zadužena za

administriranje i održavanje SQL Servera.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 126

Komponente SQL Server Agenta imaju jednu od ključnih uloga u procesu automatiziranog

održavanja. Također, vrlo se često koriste i za potrebe automatizirane replikacije baza

podataka.

5.4. Izrada plana održavanja

Plan održavanja (eng. maintenance plan) na vizualan način omogućuje

implementaciju, pregled i izmjenu strategije održavanja. Možemo ga zamisliti kao SQL

Server Agent posao, s time da su koraci unutar plana održavanja vizualno prikazani tokom

(eng. workflow) iz kojeg su jasno vidljivi strategija i scenariji održavanja.

Plan održavanja kreira se na razini instance SQL Servera, a korištenjem SSMS alata

moguće ga je kreirati upotrebom stavke "Management / Maintenance Plans / New

Maintenance Plan…".

Slika 5.4.1. Zadaci plana održavanja

Prilikom njegove izrade moguće je koristiti 11 unaprijed definiranih tipova zadataka (Slika

5.4.1). Ovisno o željenoj strategiji održavanja, zadatke je moguće proizvoljno kombinirati,

a pomoću toka definirati njihov redoslijed izvršavanja. Štoviše, redoslijed izvršavanja

zadataka može biti i uvjetno definiran, uzimajući u obzir i da se neki od zadataka možda

neće uspješno izvršiti.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 127

Slika 5.4.2. Plan održavanja Test DB baze podataka

Svaki plan održavanja ima jedan ili više podplanova. Tako se u primjeru na Slici 5.4.2 plan

održavanja TestDB baze podataka sastoji od 3 podplana, svakog za pojedini tip rezervne

kopije. Primjerice, podplan za izradu potpune rezervne kopije počinje provjerom integriteta

baze podataka. U slučaju uspjeha tog zadatka nastavlja se s obnovom indeksa (zelena

linija) te dalje tim tokom, dok se u slučaju neuspjeha kontaktira operater (crvena linija).

Pojedini zadaci poput provjere integriteta, obnove indeksa ili izrade rezervnih kopija mogu

se odnositi i na više baza podataka odjednom.

Ukoliko postavke pojedinog zadatka nisu dobro definirane, na njegovom mjestu pojavit će

se oznaka "X". Tako na Slici 5.4.2 zadatak kontaktiranja operatera treba dodatno definirati

jer nije navedeno ime operatera.

Za svaki podplan kreira se SSIS (SQL Server Integration Services) paket koji se izvršava

SQL Server Agent poslom, bilo automatski (definiranim rasporedom) ili na zahtjev. [46]

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 128

Tako će zbog plana održavanja definiranog Slikom 5.4.2 biti kreirana tri zasebna SQL

Server Agent posla (Slika 5.4.3).

Slika 5.4.3. SQL Server Agent poslovi održavanja

Rezultat generiran izvršavanjem plana održavanja može biti spremljen u tekstualnoj (log)

datoteci ili u sistemskoj msdb bazi podataka. Također, povijest izvršavanja pojedinih

planova i podplanova moguće je pregledati u SSMS alatu odabirom stavke "Management

/ Maintenance Plans / View History".

5.5. Elektronička pošta baze podataka

Pri pojavi nekog problema u radu SQL Servera dobra je praksa automatski o tome

obavijestiti odgovarajuće operatere. U tu svrhu SQL Server nudi mogućnost slanja

elektroničke pošte. Ona se najčešće šalje zbog neuspješnog izvršavanja kritičnih zadataka

u planu održavanja ili kao odgovor na upozorenje (eng. alert).

Slika 5.5.1. Konfiguracija elektroničke pošte baze podataka

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 129

Za konfiguraciju e-pošte u SSMS alatu potrebno je odabrati stavku "Management /

Database Mail / Configure Database Mail", nakon čega se pojavljuje čarobnjak kao na Slici

5.5.1. Pomoću njega moguće je kreirati i uređivati profile i korisničke račune e-pošte te

konfigurirati sigurnosne postavke korištenja.

Slika 5.5.2. Izrada profila i korisničkog računa e-pošte

Da bi SQL Server mogao poslati e-poštu, prethodno je potrebno kreirati barem jedan profil

i korisnički račun e-pošte u SQL Serveru (Slika 5.5.2). Profil e-pošte služi kao zbirka

korisničkih računa e-pošte, pri čemu svaki od korisničkih računa ima svoj prioritet u listi. U

slučaju da se e-pošta nije uspješno poslala pomoću prvog korisničkog računa, ista će se

pokušati poslati sljedećim korisničkim računom itd.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 130

Slika 5.5.3. Podrazumijevani profil e-pošte

Pri slanju e-pošte najčešće se koriste korisnički računi iz podrazumijevanog profila (Slika

5.5.3). Ipak, SQL Server Agent može biti konfiguriran tako da koristi neki drugi profil, a

njega se može definirati u postavkama tog servisa (Slika 5.5.4).

Slika 5.5.4. Profil e-pošte SQL Server Agenta

Slanje e-pošte može se inicirati kontaktiranjem operatera ili izravnim izvršavanjem T-SQL

koda pozivajući uskladištenu proceduru sp_send_dbmail (Primjer 5.5.1). Navedenoj

proceduri potrebno je predati ime profila e-pošte, nakon čega će ona biti poslana s jednog

od korisničkih računa u tom profilu, ovisno o njihovom prioritetu.

Primjer 5.5.1 – Slanje e-pošte izvršavanjem T-SQL koda

USE msdb GO EXEC sp_send_dbmail @profile_name='Administratori', @recipients='[email protected]', @subject='Popis svi zaposlenika', @body='U prilogu se nalazi popis svih zaposlenika tvrtke!' -- prilog e-pošti! @query= 'SELECT * from TestDB.dbo.Zaposlenik', @attach_query_result_as_file=1, @query_attachment_filename = 'SviZaposlenici.txt'

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 131

Sadržaj e-pošte može uključivati i priloge, a na taj način je u Primjeru 5.5.1 direktoru tvrtke

poslan popis svih zaposlenika. Na identičan način e-poštu moguće je poslati i iz

uskladištenih procedura, okidača itd.

5.6. Kopiranje baze podataka

Potreba za kopiranjem baze podataka javlja se u velikom broju situacija. Primjerice,

prilikom razvoja aplikacija, nadogradnje baze podataka ili njenog testiranja često ju je

potrebno kopirati iz produkcijskog u testno okruženje. Također, baza podataka inicijalno

se kopira i za potrebe zrcaljenja (eng. mirroring) ili jednostavno zbog kreiranja dodatne

rezervne kopije.

SQL Server i SSMS alat nude nekoliko metoda kopiranja baze podataka:

1. Metoda "odspoji-kopiraj-spoji"

2. Skriptiranje baze podataka

3. Čarobnjak za kopiranje baze podataka

4. Izrada i povrat rezervne kopije

Odabir odgovarajuće metode ovisi o nekoliko čimbenika poput veličine baze podataka,

potrebe za dostupnošću tijekom kopiranja, sadržaju i strukturi te brzini samog kopiranja.

Slika 5.6.1. Odspajanje i spajanje baze podataka

Prva metoda ("odspoji-kopiraj-spoji") koristi se kada se datoteke baze podataka fizički

kopira s jedne lokacije na drugu. Da bismo na takav način mogli kopirati bazu podataka

prethodno ju je potrebno odspojiti od instance SQL Servera (desni klik na bazu podataka,

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 132

stavka "Tasks / Detach…"), a nakon kopiranja ponovno pripojiti instanci (desni klik na popis

baza podataka, stavka "Attach…"), kao što je prikazano Slikom 5.6.1.

Ipak, nedostatak je ove metode nedostupnost baza podataka tijekom kopiranja, odnosno

sve dok ju se opet ne pripoji instanci SQL Servera. Zato je ovu metodu preporučljivo koristiti

tek kada je broj upita prema bazi podataka minimalan ili ih uopće nema (npr. tijekom noći).

Ponekad je u testno okruženje potrebno kopirati praznu inačicu baze podataka, odnosno

samo njenu strukturu (definicije tablica, pogleda, uskladištenih procedura, uloga itd.).

SSMS alat tada nudi mogućnost generiranja odgovarajuće SQL skripte desnim klikom na

bazu podataka i upotrebom stavke "Tasks / Generate Scripts…". Izvršavanjem generirane

skripte u drugom (testnom) okruženju kreirat će se navedena baza podataka i svi njeni

odabrani objekti. [47]

Slika 5.6.2. Izrada skripte za kompletnu baze podataka

SQL skriptu moguće je generirati za kompletnu bazu podataka ili samo za neke od njenih

objekata (Slika 5.6.2). Generiranu SQL skriptu moguće je iz SSMS alata objaviti na web

servisu, spremiti u jednu ili više datoteka (jedna datoteka za sve objekte ili zasebna

datoteka za svaki objekt), spremiti u međuspremnik (eng. clipboard) ili prikazati u novom

uređivačkom prozoru.

Prilikom odabira odredišta skripte moguće je kliknuti i na gumb "Advanced" kojim se mogu

urediti neke od naprednih postavki za generiranja skripte. Primjerice, postavkom "Types of

data to script" moguće je odabrati jednu od ponuđenih vrijednosti:

▪ Schema only

▪ Schema and data

▪ Data only

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 133

Ovisno o potrebama možemo generirati SQL skriptu samo za strukturu baze podataka

(eng. schema only), samo za podatke sadržane u objektima (eng. data only) ili za oboje.

U skriptu je moguće uključiti i definicije prijavnih naloga, okidača, statistika itd.

Generiranje SQL skripte ne zahtjeva odspajanje (eng. detach) baze podataka te je uvijek

prikladno za kopiranje njene strukture. Međutim, generiranje SQL skripte u svrhu kopiranja

podataka ipak nije preporučljivo jer traje iznimno duže nego bilo koja druga metoda

kopiranja sadržaja baze podataka.

SSMS alat nudi i ugrađen čarobnjak za kopiranje baze podataka, a pokreće ga se desnim

klikom na bazu podataka te odabirom stavke "Tasks / Copy Database…".

Slika 5.6.3. Metoda prijenosa podataka

Nakon odabira izvorišne i odredišne instance SQL Servera potrebno je odabrati metodu

prijenosa podataka (Slika 5.6.3). Prvom metodom ("Use the detach and attach method")

zapravo radimo identični postupak kao i prethodno opisanom metodom "odspoji-kopiraj-

spoji". Baza podataka odspoji se od instance SQL Servera, nakon čega se njene datoteke

fizički kopiraju na lokaciju druge instance. Obje baze podataka zatim se automatski pripoje

svojim instancama.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 134

Metoda "Use the SQL Management Object method" podsjeća na kreiranje SQL skripte.

Čita se definicija svakog objekta iz izvorišne baze podataka, a zatim se na osnovu definicije

takav objekt kreira u odredišnoj bazi podataka. Nakon kreiranja objekata kopiraju se

podaci, ponovno se kreiraju indeksi, metapodaci itd. [48]

Slika 5.6.4. Odabir baza podataka

U sljedećem koraku moguće je odabrati jednu ili više baza podataka iz izvorišne instance,

a za svaku od njih odabrati operaciju kopiranja (eng. copy) ili prijenosa (eng. move) u

odredišnu instancu (Slika 5.6.4). Ukoliko odredišna baza podataka već postoji u drugoj

instanci, čarobnjak će ponuditi mogućnost promjene imena nove odredišne baze podataka.

Unatoč mnogim automatiziranim značajkama ovog čarobnjaka, vrlo često postupak

kopiranja nije uspješno izvršen. Da bi se to izbjeglo potrebno je osigurati da je SQL Server

Agent pokrenut u odredišnoj instanci, da su podatkovne datoteke i datoteke dnevnika

transakcija izvorišne baze podataka dostupne iz instance odredišne baze podataka itd.

[48] U protivnom, uvijek je moguće kopirati bazu podataka "ručno" korištenjem metode

"odspoji-kopiraj-spoji" ili skriptiranjem baze podataka.

Kao jedna od vrlo čestih metoda kopiranja baze podataka koristi se izrada i povrat

rezervnih kopija. Takva (potpuna) rezervna kopija najčešće se kreira na način da ne utječe

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 135

na već postojeći lanac rezervnih kopija izvorišne baze podataka (Copy-only Backup), a u

drugoj instanci njen povrat moguće je napraviti pod istim ili drukčijim imenom (Slika 5.2.1).

5.7. SQL Server Profiler

Kontinuirano nadgledanje rada SQL Servera i pripadnih baza podataka poželjno je

zbog pravovremenog otkrivanja grešaka i sigurnosnih propusta, analize u svrhu

poboljšanja performansi te vođenja dnevnika aktivnosti (eng. log). Za nadgledanje i

optimizaciju rada moguće je koristiti mnogo značajki i alata, a ovisno o instaliranoj inačici

SQL Servera, neki od njih dostupni su izravno iz SSMS-a. Primjerice,

▪ SQL Server Profiler

▪ SQL Server Database Engine Tuning Advisor

▪ SQL Server Audit

▪ SQL Server Logs

▪ SQL Server Activity Monitor

Također, na tržištu postoje i mnoga druga komercijalna i besplatna rješenja poput SQL

Server Monitoring Software (Spiceworks), SQL Check, SQL Query Store Optimizer (Idera),

ApexSQL, AppDynamics itd. [49]

SQL Server stalno nadgleda 34 različita događaja (default trace), a po potrebi moguće je

napraviti i prilagođeno nadgledanje specifičnih baza podataka i upita. Nadgledanje je

moguće kreirati T-SQL kodom ili alatom poput SQL Server Profilera koji nudi grafičko

sučelje za izradu te prikaz rezultata nadgledanja. [50]

Slika 5.7.1. Pokretanje SQL Server Profilera

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 136

SQL Server Profiler moguće je pokrenuti izravno iz SSMS-a klikom na stavku "Tools / SQL

Server Profiler" (Slika 5.7.1). Ukoliko tamo nije prisutan potrebno je nadopuniti instalaciju

instance SQL Servera odabirom stavke "Management Tools – Complete", kao na Slici

1.4.4. Tada će se instalirati i alat Database Engine Tuning Advisor.

Slika 5.7.2. Odabir događaja i povratnih podataka

Nakon pokretanja SQL Server Profilera moguće je napraviti novo nadgledanje (eng. trace)

odabirom stavke "File / New Trace…". U konačnici, pojavljuje se dijalog kao na Slici 5.7.2

koji sadrži dvije kartice – "General" i "Event Selection".

U kartici "General" moguće je odabrati jedan od već postojećih predložaka kojim se

definiraju promatrane klase događaja i povratni podaci. Osim standardnog

(podrazumijevanog) predloška koji služi za općenito nadgledanje rada SQL Servera

moguće je koristiti i sljedeće predloške:

▪ SP_Counts – podaci o izvršavanju uskladištenih procedura

▪ TSQL – nadgledanje upita iz klijent aplikacija za potrebe otkrivanja grešaka

▪ TSQL_Duration – prikladno za identifikaciju sporih upita klijent aplikacija

▪ TSQL_Grouped – grupiranje izvršenih upita po klijentima ili korisnicima

▪ TSQL_Locks – prikladno za analizu događaja poput potpunog zastoja itd.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 137

▪ TSQL_Replay – prikladno za nadgledanje događaja koji se ponavljaju

▪ Tuning – prilagođeno za potrebe analize u Database Engine Tuning Advisor alatu

U kartici "Event Selection" (Slika 5.7.2) moguće je detaljno definirati događaje koji se

nadgledaju, a klikom na gumbe "Column Filters..." i "Organize Columns…" dodatno filtrirati

i organizirati povratne podatke. Primjerice, filterima je moguće suziti područje nadgledanja

na točno određenu bazu podataka, prijavni nalog itd.

Slika 5.7.3. Nadgledanje događaja SQL Server Profiler alatom

Nakon što se pokrene nadgledanje pojavljuje se dijalog kao na Slici 5.7.3. Sukladno

definiranim filterima i stupcima nakon svakog događaja (primjerice, poziv uskladištene

procedure, izvršavanje nekog SQL upita, prijava na SQL Server itd.) pojavit će se dodatni

redak s opisom tog događaja.

Tako je na Slici 5.7.3 označen redak kojim je zabilježen SELECT upit napravljen unutar

SSMS aplikacije. Osim što je zabilježen kompletan upit vidljivo je tko ga je izvršio (korisnik

'sa') te iz konteksta koje baze podataka (master). Također je moguće prikazati datum i

vrijeme početka i kraja izvršavanja upita (na razini milisekunde) ukoliko provjeravamo

performanse izvršavanja.

Rezultat nadgledanja moguće je spremiti u datoteku ili tablicu, a oboje je moguće priložiti

alatu Database Engine Tuning Advisor koji će analizom tog sadržaja eventualno predložiti

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 138

kreiranje novih indeksa ili neka druga rješenja za poboljšanje performansi. Ovaj alat

moguće je pronaći i pokrenuti na sličan način kao i SQL Server Profiler (Slika 5.7.1) ili

izravno desnim klikom na označeni upit u SSMS-u te odabirom stavke "Analyze Query in

Database Engine Tuning Advisor".

5.8. SQL Server Audit

Izlaskom SQL Servera 2008 predstavljen je SQL Server Audit. On također

omogućuje nadgledanje rada SQL Servera i baza podataka, ali nudi bolje performanse i

granulaciju. Događaj (skupinu događaja) moguće je promatrati na razini instance, baze

podataka, sheme ili objekta te u kontekstu skupine (uloge) ili specifičnog korisnika.

Slika 5.8.1. Kreiranje SQL Server Audit objekta

Bilo da je riječ o nadgledanju rada instance ili njenih baza podataka, najprije je potrebno

kreirati audit objekt (Slika 5.8.1). On se kreira u instanci SQL Servera (stavka "Security /

Audits / New Audit…"), a njime se definira maksimalno vrijeme procesiranja događaja

(podrazumijevano 1000 ms), akcija u slučaju neuspjeha spremanja događaja (nastavi

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 139

dalje, ugasi server, otkaži operaciju) te odredište (datoteka, sigurnosni dnevnik, aplikacijski

dnevnik). SQL Server audit objekt moguće je kreirati i izravnim izvršavanjem T-SQL koda,

kao u Primjeru 5.8.1.

Primjer 5.8.1 – Kreiranje audit objekta izvršavanjem T-SQL koda

USE [master] CREATE SERVER AUDIT [Moje_nadgledanje] TO FILE( FILEPATH = N'C:\SQLServer_Audit\' ,MAXSIZE = 0 MB ,MAX_ROLLOVER_FILES = 2147483647 ,RESERVE_DISK_SPACE = OFF ) WITH( QUEUE_DELAY = 1000 ,ON_FAILURE = CONTINUE ) ALTER SERVER AUDIT [Moje_nadgledanje] WITH (STATE = OFF)

Tek nakon kreiranja audit objekta moguće je započeti nadgledanje instance ili pojedine

baze podataka kreiranjem zasebnih audit specifikacija. Tako se SQL Server audit

specifikacija koristi za nadgledanje rada instance, dok audit specifikacija baze podataka

kada se prate događaji unutar neke baze podataka. Svaka audit specifikacija može pratiti

jedan ili više događaja odabirom odgovarajućih akcija koje mogu biti specifične ili skupne.

Slika 5.8.2. Kreiranje SQL Server audit specifikacije

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 140

Primjerice, ukoliko iz sigurnosnih razloga želimo pratiti sve neuspješne prijave u SQL

Serveru, potrebno je kreirati SQL Server audit specifikaciju korištenjem SSMS alata (Slika

5.8.2) ili izravno izvršavanjem T-SQL koda (Primjer 5.8.2). Sve SQL Server audit

specifikacije moguće je pronaći pod stavkom "Security / SQL Server Audit Specifications".

Primjer 5.8.2 – Kreiranje SQL Server audit specifikacije izvršavanjem T-SQL koda

USE MASTER CREATE SERVER AUDIT SPECIFICATION [Neuspjesni_login] FOR SERVER AUDIT [Moje_nadgledanje] ADD (FAILED_LOGIN_GROUP) WITH (STATE = OFF)

Svaka audit specifikacija sadrži ime audit objekta čije postavke koristi pri nadgledanju rada

te jedan ili više događaja (akcija) koji se nadgledaju. Tako u primjeru sa Slike 5.8.2

nadgleda se akcija FAILED_LOGIN_GROUP kojom se bilježe sve neuspješne prijave.

Također, moguće je pratiti i sve uspješne prijave, akcije vezane za općenite operacije nad

bazama podataka (kreiranje, brisanje, izmjena), promjene lozinke korisnika itd. [51]

Slika 5.8.3. Pregled neuspješnih prijava

Audit objekti i specifikacije nakon kreiranja podrazumijevano su onemogućeni, odnosno

deaktivirani. Da bismo ih aktivirali te time pokrenuli nadgledanje rada SQL Servera i baza

podataka potrebno je desnim klikom na njih odabrati stavku "Enable…" ili izvršiti

odgovarajući T-SQL kod, kao u Primjeru 5.8.3.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 141

Primjer 5.8.3 – Aktiviranje SQL Server audit objekta i specifikacije izvršavanjem T-SQL koda

USE MASTER -- aktiviranje server audit objekta ALTER SERVER AUDIT [Moje_nadgledanje] WITH (STATE=ON) -- aktiviranje server audit specifikacije ALTER SERVER AUDIT SPECIFICATION [Neuspjesni_login] WITH (STATE=ON)

Za pregled svih zabilježenih događaja potrebno je desnim klikom na audit objekt odabrati

stavku "View Audit Logs". Tada se pojavljuje dijalog kao na Slici 5.8.3 koji prikazuje sve

zabilježene događaje i njihove detalje. Tako je u navedenoj slici moguće primijetiti

neuspješni pokušaj prijave korisnika "Login1" zbog netočne lozinke.

Nadgledanje rada važno je i zbog sigurnosne strategije u kojoj pojedinac ili skupina ima

ovlasti pristupa i vršenja operacija nad osjetljivim podacima, ali te ovlasti smije koristiti

samo u opravdanim situacijama (primjerice, uz sudski nalog). Tada je moguće kreirati audit

specifikaciju baze podataka (stavka "<ime_baze_podataka> / Security / Database Audit

Specifications / New…") pomoću koje je moguće nadgledati sve takve akcije.

Slika 5.8.4. Kreiranje audit specifikacije baze podataka

I ovaj tip specifikacije može sadržavati jednu ili više akcija, a ovisno o tipu akcije, tj. njenom

području djelovanja (baza podataka, shema ili objekt), potrebno je navesti shemu i ime

nadgledanog objekta te korisnika ili ulogu nad kojom se vrši nadgledanje (Slika 5.8.4). Ako

je riječ o nadgledanju rada svih korisnika, najčešće se odabire uloga "public" budući da su

svi korisnici inicijalno članovi te uloge.

U primjeru na Slici 5.8.4 kreira se audit specifikacija baze podataka kojom se nadgledaju

svi SELECT upiti nad tablicom (objektom) "Kupac" od strane bilo kojeg korisnika (uloga

"public"). Pregledom dnevnika nadgledanja (eng. audit log) moguće je vidjeti zapise kao

na Slici 5.8.5.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 142

Slika 5.8.5. Pregled izvršenih SELECT upita nad tablicom "Kupac"

Za svaki SELECT upit sada je moguće vidjeti datum i vrijeme njegovog izvršavanja, kako

je točno izgledao sadržaj upita te koji korisnik ga je izvršio. Na sličan način moguće je

pregledati i ostale akcije poput brisanja, umetanja ili izmjene podataka te izvršene

administrativne zadaće poput izrade i povrata rezervnih kopija, promjene lozinke korisnika

u bazi podataka itd. [51]

SQL Server Audit danas je preferirana metoda za nadgledanje rada jer među ostalim,

administratori ne moraju koristiti dodatne alate poput SQL Server Profilera kako bi

pojednostavili ovakve zadaće.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 143

6. Tehnologije visoke dostupnosti

6.1. Uvod u replikaciju

Replikacija je postupak kopiranja i distribucije baze podataka na jednu ili više

različitih instanci. Potreba za replikacijom najčešće se javlja kada se želi osigurati bolja

dostupnost i performanse, ali i kada je potrebna raspodjela opterećenja te smanjenje

podatkovnog prometa između udaljenih lokacija.

Vrlo se često pojmovi poput replikacije i sinkronizacije miješaju. Naime, u postupku

replikacije kopiraju se svi objekti i podaci, dok sinkronizacija podrazumijeva tek ažuriranje

naknadno izmijenjenog sadržaja među pojedinim instancama. Sinkronizacija ne mora biti

automatska pa se može dogoditi da izmjene u bazi podataka jedne instance nisu još uvijek

ažurirane u kopijama (replikama) te baze podataka unutar drugih instanci.

U SQL Serveru postoji nekoliko tipova replikacije, a prije njihove implementacije potrebno

je poznavati neke od ključnih pojmova.

Pojam Opis

Izdavač SQL Server instanca koja objavljuje podatke prema drugim instancama.

Pretplatnik SQL Server instanca koja prima podatke.

Distributer

SQL Server instanca koja dostavlja sadržaj od izdavača prema

pretplatniku. Izdavač također može biti i distributer (lokalni distributer), a

u protivnom je riječ o udaljenom distributeru.

Članak Objekt baze podataka koji se objavljuje.

Publikacija Skupina članaka koja se objavljuje.

Tablica 6.1.1. Ključni pojmovi u replikaciji

Kao što je prikazano Tablicom 6.1.1, replikaciju možemo zamisliti kao proces izdavanja i

distribucije časopisa. Moguće ju je implementirati korištenjem više različitih topologija, a

najčešće je riječ o gospodar-gospodar (eng. master-master) te gospodar-podređeni (eng.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 144

master-subordinate) pristupima. Pristupom gospodar-gospodar omogućuje se uređivanje

podataka u svakoj od replika, nakon čega se one međusobno sinkroniziraju. Drugi pristup

namijenjen je situacijama kada se podaci uređuju samo u instanci gospodara, dok su

replicirani podaci u podređenim instancama namijenjeni samo za čitanje. [52]

Slika 6.1.1. Pregled replikacijskog modela [53]

U postupku replikacije sudjeluju i replikacijski agenti. To su pomoćni programi koji prate

promjene nad podacima te sudjeluju u njihovoj distribuciji (Slika 6.1.1). Postoji nekoliko

vrsta replikacijskih agenata:

▪ Agent snimke (eng. snapshot agent)

▪ Agent distribucije (eng. distribution agent)

▪ Agent pregleda dnevnika (eng. log reader agent)

▪ Agent pregleda reda (eng. queue reader agent)

Ovisno o odabranom tipu replikacije koristi se jedan ili više replikacijskih agenata, a njihove

zadaće podrazumijevano se izvršavaju kao SQL Server Agent poslovi. Moguće ih je

pokrenuti i preko komandne linije, a administrirati i pomoću SSMS alata. Štoviše, kao jedan

od pripremnih koraka replikacije poželjno je za svaki od replikacijskih agenata kreirati

Windows korisnički račun na računalu poslužitelja sa odgovarajućim pravima i dozvolama.

Implementacija replikacije tipično započinje kreiranjem publikacije. Korištenjem SSMS

alata potrebno je desnim klikom na stavku "Replication / Local Publication" odabrati "New

Publication…". Tada se pojavljuje dijalog kao na Slici 6.1.2.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 145

Slika 6.1.2. Odabir distributera

Distributer je instanca koja sadrži distribucijsku bazu podataka, a unutar nje spremaju se

podaci o aktivnostima te izvršene transakcije koje je potrebno sinkronizirati. Instanca

izdavača može ujedno biti i distributer ili je za to moguće odabrati neku drugu instancu.

Slika 6.1.3. Odabir mape snimki

Snimka publikacije sprema se u mapi snimki (eng. snapshot folder, Slika 6.1.3). Ovoj mapi

pristup moraju imati svi zainteresirani replikacijski agenti, što je potrebno osigurati

dodjeljivanjem odgovarajućih prava i dozvola Windows korisničkim računima tih agenata.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 146

U ovom koraku također je potrebno paziti na tip budućih pretplata. Replicirane podatke

moguće je slati po principu guranja od strane distributera prema pretplatniku (eng. push)

ili ih na zahtjev pretplatnika povući od izdavača (eng. pull). Podrazumijevano je podržana

metoda guranja, a za podršku metode povlačenja mapa snimki mora biti definirana kao

dijeljena mrežna mapa.

Klikom na gumb "Next" pojavljuje se dijalog u kojemu je potrebno odabrati bazu podataka

koju se želi replicirati te tip replikacije. Neovisno o odabranom tipu replikacije u konačnici

potrebno je odabrati članke (objekte baze podataka) koje se želi replicirati (Slika 6.1.4).

Slika 6.1.4. Odabir članaka

Članci su grupirani po tipu, a prikazuju se samo oni tipovi članaka koji postoje u odabranoj

bazi podataka. Svakom članku ili skupini članaka također je moguće definirati neka od

svojstava (gumb "Article Properties", Slika 6.1.4) poput akcije u slučaju kada članak već

postoji kod pretplatnika, odabir tipova indeksa za kopiranje itd. Štoviše, sadržaj članaka u

idućem koraku moguće je filtrirati te time definirati koji se točno sadržaj želi replicirati.

Nakon kreiranja publikacije najčešće će odmah biti potrebno kreirati njenu trenutnu snimku

(eng. snapshot) za potrebe inicijalnog kopiranja publikacije svakom od pretplatnika, a prije

toga unijeti i podatke o korisničkim računima svih potrebnih replikacijskih agenata.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 147

6.2. Replikacija snimke stanja

Snimka stanja (eng. snapshot) predstavlja sadržaj publikacije u određenom trenutku

u vremenu. Takvu snimku (stanje) moguće je replicirati kod jednog ili više pretplatnika te

time osigurati da svaki od njih ima istu publikaciju, odnosno objekte i sadržaj iz istog

datuma i vremena.

Primjerice, pretpostavimo da svaka benzinska postaja koristi lokalnu bazu podataka iz koje

čita cijene pojedinih goriva. Ukoliko se cijena goriva mijenja jednom tjedno to znači da bi

se u to zadano datum i vrijeme nove cijene mogle učitati kopiranjem i primjenom

(replikacijom) najnovije snimke stanja.

Replikacija snimke stanja (eng. snapshot replication) koristi gospodar-podređeni pristup

gdje su podaci kod pretplatnika namijenjeni samo za čitanje. Zbog veličine snimke ovaj tip

replikacije pogodan je tek u slučajevima kada se repliciraju manje količine podataka te

kada se izmjene nad publikacijom događaju rijetko. Ipak, vrlo često koristi se i pri

implementaciji ostalih tipova replikacije da bi se svakom od pretplatnika kopirala inicijalna

publikacija, odnosno njena aktualna snimka.

Slika 6.2.1. Replikacija snimka [54]

U procesu replikacije ovog tipa sudjeluju dva replikacijska agenta. Agent snimke (eng.

snapshot agent) čita publikaciju te kreira i sprema njen snimak u mapu snimaka (Slika

6.1.3). Zatim, agent distribucije (eng. distribution agent) dohvaća tu snimku te ju kopira i

primjenjuje kod pretplatnika (Slika 6.2.1). Prethodno je potrebno osigurati da svaki od

replikacijskih agenata ima odgovarajuća prava i dozvole nad mapom snimaka.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 148

Slika 6.2.2. Akcije za već postojeće članke

Pretplatnici ovog tipa replikacije ne prate naknadne izmjene publikacije kod izdavača a

mogu ih dobiti tek nakon izrade i dohvaćanja sljedeće snimke. Replikacijom snimka tada

će se podrazumijevano prepisati svi postojeći članci kod pretplatnika i to na način da će ih

se prvo izbrisati (DROP) a zatim ponovno kreirati na osnovu sadržaja snimka. Također je

moguće odabrati i neku drugu akciju (Slika 6.2.2) prilikom definiranja svojstava članaka na

Slici 6.1.4 (gumb "Article Properties").

6.3. Transakcijska replikacija

Kada replikacija snimke stanja zbog svoje veličine postane "preskupa" ili kada je

riječ o manjim ali češćim izmjenama publikacije, pribjegava se korištenju transakcijske

replikacije. Ovaj tip replikacije također radi po principu "gospodar-podređeni" gdje su

podaci u pretplatnicima namijenjeni samo za čitanje.

Slika 6.3.1. Transakcijska replikacija [55]

Transakcijska replikacija započinje replikacijom zadnje snimke stanja kako bi svi

pretplatnici imali istu početnu publikaciju. Sve naknadne izmjene publikacije izdavača

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 149

(obavljene transakcije) prate se pomoću agenta pregleda dnevnika (eng. log reader agent)

koji te izmjene sprema u distribucijsku bazu podataka. Tada agent distribucije automatski

prenosi te izmjene postojećim pretplatnicima i to točno onim redoslijedom kojim su se

dogodili u publikaciji izdavača.

Izmijenjeni zapisi u publikacijama pretplatnika bit će prepisani prilikom sljedeće

sinkronizacije. Međutim, ukoliko su ti zapisi u međuvremenu bili izbrisan, replikacija će

završiti neuspjehom. [55]

Za primjer, transakcijsku replikaciju možemo upotrijebiti u situaciji kada je u realnom

vremenu potrebno sinkronizirati cijene proizvoda u dućanima. Ukoliko svaki dućan koristi

lokalnu bazu podataka, svaka promjena cijene proizvoda u središnjoj bazi podataka

automatski će tada biti sinkronizirana u lokalnim bazama podataka pojedinih dućana. U

ovakvoj situaciji neprikladno bi bilo koristiti replikaciju snimke stanja jer bi se tada prenosila

cijela publikacija, i to samo njeno stanje u vrijeme izrade te snimke.

Također postoji i poseban oblik transakcijske replikacije koji se koristi za sinkronizaciju

istorazinskih instanci (eng. peer-to-peer replication). Svaka instanca ujedno je izdavač i

pretplatnik, a najčešće se koristi u svrhu raspodjele opterećenja te za omogućavanje bolje

dostupnosti podataka u slučaju prestanka rada jedne od instanci. Ovaj tip replikacije

dostupan je samo u Enterprise inačici SQL Servera.

Slika 6.3.2. Raspodjela opterećenja sinkronizacijom istorazinskih instanci [56]

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 150

U primjerima na Slici 6.3.2 mogu se primijetiti dva moguća slučaja. U lijevom dijelu slike

riječ je o dvije instance gdje prva (A) može biti zadužena za obrađivanje zahtjeva za

proizvode od A-M, a druga instanca (B) zahtjeva za proizvode N-Z. Na taj način dobiva se

raspodjela opterećenja, a bilo koja izmjena bilo na instanci A ili B rezultirat će automatskom

sinkronizacijom izmjena između te dvije instance.

U desnom dijelu Sike 6.3.2 može se primijetiti vrlo slična situacija. Instanca A zadužena je

za obradu zahtjeva za čitanje i dohvat podataka, dok instanca B obrađuje sve zahtjeve za

unos novih i izmjenu postojećih podataka.

6.4. Replikacija spajanjem

Replikacija spajanjem (eng. merge replication) vrlo često se koristi u slučajevima

kada pojedini pretplatnici nisu u mogućnosti stalno biti povezani sa središnjom bazom

podataka. Oni tada autonomno mogu uređivati podatke koje imaju u svojoj lokalnoj bazi, a

sve se napravljene izmjene zajedno s izmjenama svih ostalih pretplatnika spajaju i

međusobno sinkroniziraju.

Slika 6.4.1. Replikacija spajanjem [57]

Replikacija spajanjem također započinje inicijalnom replikacijom snimke stanja, a sve

daljnje promjene nad publikacijom kod izdavača i pretplatnika prate se zasebnim

(automatski kreiranim) okidačima nad repliciranim tablicama. Oni će u sistemskim

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 151

tablicama bilježiti informacije o izmijenjenim zapisima, nakon čega će agent spajanja (eng.

merge agent) sinkronizirati te izmjene s izdavačem i ostalim pretplatnicima.

Da bi se promjene nad zapisima mogle pratiti, replikacija spajanjem zahtjeva da svaka

replicirana tablica sadrži stupac UNIQUEIDENTIFIER tipa. Upravo taj podatak koristi se u

okidačima kako bi se jednoznačno mogli identificirati izmijenjeni zapisi. Štoviše, osim ovog

podataka, bilježi se i informacija o izmijenjenom stupcu ukoliko se promijene nad zapisima

prate na nivou stupaca (Slika 6.4.2). Podrazumijevano, izmjene se prate na razini zapisa.

Slika 6.4.2. Načini praćenja izmjena u replikaciji spajanjem

S obzirom da mnogo pretplatnika može mijenjati iste podatke, moguće je da prilikom

sinkronizacije dođe do konflikta među različitim inačicama istih zapisa. U tom slučaju SQL

Server koristi rješavač konflikata (eng. conflict resolver) koji odlučuje o prihvaćenom

zapisu. Postoji podrazumijevani rješavač konflikata, a moguće je napisati i vlastiti. [57]

6.5. Replikacijski pretplatnici

Izradi pretplate može se pristupiti tek nakon izrade publikacije, a moguće ju je izraditi

izravno iz instance izdavača ili iz instance budućeg pretplatnika. Primjerice, pretpostavimo

da u instanci izdavača već postoji publikacija "TransakcijskaReplikacija-TestDB". Desnim

klikom na publikaciju te odabirom stavke "New Subscriptions…" kreće se u postupak izrade

pretplate (Slika 6.5.1).

Slika 6.5.1. Novi pretplatnik

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 152

Ukoliko se pretplata kreira iz instance pretplatnika, prvo će biti potrebno prijaviti se u

instancu izdavača te odabrati željenu publikaciju. U protivnom (pretplata se kreira iz

instance izdavača) popis publikacija tog izdavača automatski će biti vidljiv (Slika 6.5.2).

Slika 6.5.2. Odabir publikacije u instanci izdavača

U narednom dijalogu potrebno je odabrati način distribucije, tj. hoće li biti riječ o

automatiziranom guranju (eng. push) repliciranih podataka od strane distributera prema

svim pretplatnicima ili će pretplatnik povlačiti replicirane podatke na vlastiti zahtjev (eng.

pull). Prvim načinom, distribucija se odvija centralizirano i s više kontrole, dok se drugim

načinom smanjuje opterećenje i posao distributera. Za početak je preporuka koristiti

metodu guranja jer ju je brže omogućiti zbog manje količine administrativnih poslova.

Slika 6.5.3. Odabir instanci pretplatnika i odredišnih baza podataka

Najčešća je praksa u instanci pretplatnika napraviti novu bazu podataka koja ima isto ime

kao i baza podataka izdavača (Slika 6.5.3). Međutim, u instanci pretplatnika za potrebe

replikacije moguće je iskoristiti i već postojeću bazu podataka. Također, instanca

pretplatnika može biti ista kao i instanca izdavača, ali u tom slučaju odredišna baza

podataka mora biti drugačijeg imena.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 153

U završim koracima potrebno je unijeti korisničke podatke agenta distribucije te definirati

njegov način rada (konstantni rad, na zahtjev ili prema definiranom rasporedu). Preporuka

je da agent distribucije radi konstantno kako bi se baze podataka svaki puta sinkronizirale

u najbržem mogućem roku.

Slika 6.5.4. Inicijalizacija pretplate replikacijom snimke stanja

Nakon kreiranja, svaku pretplatu potrebno je inicijalizirati replikacijom snimke stanja (Slika

6.5.4). Također, i inicijalizaciju pretplate poželjno je izvršiti čim prije (podrazumijevano

odmah nakon kreiranja pretplate) kako bi baza podataka pretplatnika u što kraćem roku

bila spremna za daljnju sinkronizaciju. Alternativno, pretplatu je moguće inicijalizirati i

prilikom sljedeće predviđene sinkronizacije.

Slika 6.5.5. Publikacija i njeni pretplatnici

Kreirana pretplata vidljiva je kako u instanci pretplatnika tako i u instanci izdavača (Slika

6.5.5). Nakon njenog kreiranja, ovisno o odabranom načinu inicijalizacije, prvo će se

dogoditi replikacija snimke stanja, dok daljnja sinkronizacija ovisi o odabranom tipu

replikacije i definiranim rasporedima agent poslova te replikacijskih agenata.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 154

Slika 6.5.6. Replikacijski monitor

Status i tijek replikacije moguće je pratiti korištenjem replikacijskog monitora (eng.

replication monitor), a pristup njemu imaju svi članovi sysadmin i replmonitor uloga. Kao

što je prikazano Slikom 6.5.6, pomoću replikacijskog monitora moguće je vidjeti povijest

sinkronizacije iz smjera distributera prema pretplatnicima (i obrnuto), broj prenesenih

transakcija te sve eventualne greške.

Replikacijski monitor može se pokrenuti izravno iz SSMS alata desnim klikom na

publikaciju ili jednog od pretplatnika te odabirom stavke "Launch Replication Monitor". U

istom izborniku moguće je pregledati i status agenta snimke (eng. snapshot agent) te

agenta pregleda dnevnika (eng. log reader agent).

6.6. Otpremanje dnevnika transakcija

Osim replikacije postoje i druge metode za osiguravanje bolje dostupnosti podataka

u slučaju katastrofe. Jedna od njih je i metoda otpremanja dnevnika transakcija (eng. Log

shipping) koja se vrlo često koristi zbog jednostavnosti te malih zahtjeva za resursima.

Metoda radi na principu periodičke izrade i otpremanja rezervne kopije dnevnika

transakcija primarne baze podataka iz primarne instance prema jednoj ili više sekundarnih

baza podataka u različitim sekundarnim instancama.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 155

Slika 6.6.1. Otpremanje dnevnika transakcija [58]

Svaka rezervna kopija dnevnika transakcija primarne baze podataka kopira se na dijeljenu

mrežnu lokaciju kojoj mogu pristupiti sve sekundarne instance (Slika 6.6.1). Zatim, svaka

od sekundarnih instanci kopira rezervnu kopiju iz dijeljene mrežne lokacije u svoj lokalni

prostor te izvrši njen povrat (eng. Restore) u svojoj (sekundarnoj) bazi podataka. Tada je

u slučaju nedostupnosti primarne baze podataka moguće ručno preusmjeriti se (eng.

Failover) na jednu od sekundarnih instanci te koristiti sekundarnu bazu podataka.

Ova metoda može koristiti i neobaveznu instancu monitora koja nadgleda operacije izrade

i povrata rezervnih kopija te po potrebi generira upozorenja ukoliko se neka od operacija

nije izvršila po predviđenom planu.

Slika 6.6.2. Konfiguracija otpremanja dnevnika transakcija

Korištenjem SSMS alata na jednostavan način moguće je konfigurirati ovu metodu.

Desnim klikom na bazu podataka te odabirom stavke "Properties" pojavljuje se dijalog kao

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 156

na Slici 6.6.2. U njemu je moguće definirati primarnu bazu podataka, odabrati mrežnu

lokaciju za spremanje rezervnih kopija dnevnika transakcija te odabrati sekundarne

instance SQL Servera.

Osim u SQL Serveru, metodu otpremanja dnevnika transakcija moguće je se koristiti i u

RDBMS sustavima poput MySQL, PostgreSQL, Oracle itd.

6.7. Zrcaljenje baze podataka

Bolja dostupnost baze podataka može se osigurati i korištenjem metode zrcaljenja

(eng. Database mirroring). Ova metoda zapravo predstavlja metodu otpremanja dnevnika

transakcija u realnom vremenu s podrškom za automatsko preusmjeravanje (eng.

Failover). U njoj sudjeluju primarna (eng. Principal), zrcalna (eng. Mirror) te neobavezna

svjedok (eng. Witness) instanca, kao što je prikazano slikom 6.7.1.

Slika 6.7.1. Zrcaljenje baze podataka

Nakon svake izvršene transakcije unutar baze podataka u glavnoj instanci njen zapis

dnevnika transakcija automatski se šalje bazi podataka zrcalne instance kako bi se te

transakcije i tamo čim prije replicirale. Svjedok instanca provjerava obje instance te u

slučaju nedostupnosti glavne automatski preusmjerava (eng. Failover) na zrcalnu instancu.

Svjedok instanca nije obavezna, no u tom slučaju preusmjeravanje neće moći biti

automatsko već ručno.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 157

Zrcaliti je moguće jednu po jednu bazu podataka, a prethodno svaka od njih mora koristiti

potpuni model oporavka (eng. Full recovery mode). Štoviše, prije iniciranja procesa

zrcaljenja potrebno je napraviti potpunu rezervnu kopiju baze podataka glavne instance te

izvršiti njen povrat u zrcalnoj instanci korištenjem stavke "WITH NORECOVERY".

Slika 6.7.2. Konfiguracija zrcaljenja baze podataka

Zrcaljenje je moguće inicirati i konfigurirati pomoću SSMS alata desnim klikom na bazu

podataka te odabirom stavke "Properties", nakon čega se pojavljuje dijalog kao na Slici

6.7.2. U njemu je moguće odabrati glavnu, zrcalnu te svjedok instancu, kao i odrediti način

rada (eng. Operating mode).

Moguće je koristiti tri načina rada. Rad prilagođen visokim performansama (eng. High

performance) podrazumijeva korištenje samo glavne i zrcalne instance bez mogućnosti

automatskog preusmjeravanja. Podaci se prvo spremaju u glavnoj instanci, a zatim ih se

prenosi na zrcalnu instancu. Tada se koristi asinkrona komunikacija te je u slučaju

katastrofe jedino moguće ručno preusmjerenje na zrcalnu instancu prilikom čega može

doći i do neželjenog gubitka podataka. Druga dva načina rada koriste sinkronu

komunikaciju prilikom koje se podaci garantirano spremaju na obje instance, a mogućnost

automatskog preusmjeravanja ovisi o postojanosti svjedok instance.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 158

Da bi klijent aplikaciju pripremili za automatsko preusmjeravanje u slučaju nedostupnosti

glavne instance u izrazu "Connection string" moguće je definirati izraz "Failover Partner".

Data Source = AdresaGlavneInstance; Failover Partner = AdresaZrcalneInstance;

Initial Catalog = MojaBazaPodataka; Integrated Security = True;

U usporedbi sa metodom otpremanja dnevnika transakcija zrcaljenje baze podataka nudi

automatsko preusmjeravanje u slučaju nedostupnosti. Ipak, omogućuje korištenje samo

jedne zrcalne instance čija baza podataka nije dostupna za čitanje i pisanje sve do trenutka

preusmjeravanja.

6.8. AlwaysOn rješenja

Izlaskom SQL Servera 2012 predstavljena su AlwaysOn rješenja koja na još većem

nivou osiguravaju bolju dostupnost baza podataka. Štoviše, Microsoft je najavio ukidanje

podrške za metodu zrcaljenja u narednim inačicama SQL Servera upravo kako bi se u

budućnosti koristila AlwaysOn rješenja. Razlikujemo dva osnovna oblika:

▪ AlwaysOn Failover Clustering Instances (FCI)

▪ AlwaysOn Availability Groups (AG)

Prvo rješenje (FCI) dostupno je i u standardnoj inačici SQL Servera, a osnovni cilj mu je

omogućiti dostupnost baza podataka čak i u slučaju katastrofe tj. potpune nedostupnosti

poslužitelja na kojemu se nalazi instanca SQL Servera.

Slika 6.8.1. Windows Server Failover Cluster (WSFC)

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 159

Rješenje radi na način da se jedna instanca SQL Servera propagira kroz više čvorova po

principu WSFC-a (Slika 6.8.1). Pojedini čvor ne sadrži lokalnu kopiju datoteka baza

podataka već se sve one nalaze na dijeljenoj mrežnoj lokaciji koju koristi aktivni čvor. Sve

dok je jedan čvor aktivan ostali čvorovi su u stanju čekanja, a kada aktivni čvor više nije

dostupan onda jedan od preostalih čvorova postaje aktivan. Novi aktivni čvor također

ukazuje na iste datoteke koje se nalaze na dijeljenoj mrežnoj lokaciji, te se time osigurava

dostupnost svih baza podataka te instance. Upravo ovo je jedna od prednosti u usporedbi

sa metodom zrcaljenja koja radi na principu poboljšanja dostupnosti samo jedne baze

podataka.

Za razliku od ovog rješenja AlwaysOn nudi i "Availability Groups" (AG) rješenje koje je

dostupno samo u Enterprise inačici SQL Servera. Ono predstavlja unaprijeđenu inačicu

metode zrcaljenja koja nudi mogućnost korištenja više zrcalnih replika. U SQL Serveru

2016 AG rješenje podržava do 9 replika (jedna primarna i osam sekundarnih), a

sekundarne replike mogu biti omogućene ili onemogućene za čitanje (u metodi zrcaljenja

sekundarna replika uvijek je onemogućena za čitanje).

Slika 6.8.2. AlwaysOn Availability Group (AG) [59]

AG rješenje koristi slušač (eng. Listener) koji zapravo predstavlja DNS ime virtualne mreže.

On sadrži popis IP adresa svih replika te se brine da se klijent uvijek spoji na primarnu

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 160

(aktivnu) repliku. Zbog korištenja DNS imena klijent ne može znati koje sve replike postoje,

a ukoliko se aktivna replika promijeni klijent neće biti niti svjestan te promjene. Za

usporedbu, u metodi zrcaljenja postojale su samo dvije replike a klijent je znao IP adresu

svake od njih.

Iako mnoge usporedbe pokazuju da AlwaysOn rješenja omogućavaju puno bolju

dostupnost SQL Server baza podataka zbog svojih dodatnih zahtjeva za resursima

najčešće se upotrebljavaju samo kod Enterprise korisnika. Korisnici srednje i niže razine

zahtjeva najčešće koriste metodu otpremanja dnevnika transakcija.

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 161

Reference

[1] gorila.jutarnji.hr, »Koja je razlika između podatka i informacije, što je podatak, a što informacija,«

[Mrežno]. Available: http://gorila.jutarnji.hr/profile/digitalac/2011/06/03/koja-je-razlika-izmeu-podatka-i-

informacije-to-je-podatak-a-to-informacija/. [Pokušaj pristupa 2 4 2017].

[2] SQLite, »Most Widely Deployed and Used Database Engine,« [Mrežno]. Available:

https://www.sqlite.org/mostdeployed.html. [Pokušaj pristupa 2 4 2017].

[3] FileMaker, »FileMaker Pro,« [Mrežno]. Available: http://www.filemaker.com/products/filemaker-pro/.

[Pokušaj pristupa 2 4 2017].

[4] Oracle Corporation, »PL/SQL,« [Mrežno]. Available:

http://www.oracle.com/technetwork/database/features/plsql/index.html. [Pokušaj pristupa 2 4 2017].

[5] IBM, »IBM DB2 Express-C: Available at no charge,« [Mrežno]. Available:

https://www.ibm.com/developerworks/downloads/im/db2express/. [Pokušaj pristupa 2 4 2017].

[6] PostgreSQL, »What is PostgreSQL?,« [Mrežno]. Available:

https://www.postgresql.org/docs/9.6/static/intro-whatis.html. [Pokušaj pristupa 2 4 2017].

[7] QuinStreet Enterprise, »What is SQL?,« [Mrežno]. Available: http://www.sqlcourse.com/intro.html.

[Pokušaj pristupa 8 4 2017].

[8] N. Kabra, »How do RDBMS provide ACID properties (atomicity, consistency, isolation, durability)?,«

[Mrežno]. Available: https://www.quora.com/How-do-RDBMS-provide-ACID-properties-atomicity-

consistency-isolation-durability. [Pokušaj pristupa 4 4 2017].

[9] Microsoft Corporation, »Understanding Isolation Levels,« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-isolation-levels. [Pokušaj pristupa 5 4

2017].

[10] Microsoft Corporation, »Customizing Transaction Isolation Level,« [Mrežno]. Available:

https://msdn.microsoft.com/en-us/library/ms175909.aspx. [Pokušaj pristupa 6 4 2017].

[11] Microsoft Corporation, »Snapshot Isolation in SQL Server,« [Mrežno]. Available:

https://msdn.microsoft.com/en-us/library/tcbchxcb(v=vs.110).aspx. [Pokušaj pristupa 7 4 2017].

[12] M. Gupta, »How To Monitor Deadlocks in SQL Server,« [Mrežno]. Available:

https://blogs.technet.microsoft.com/mspfe/2012/06/28/how-to-monitor-deadlocks-in-sql-server/.

[Pokušaj pristupa 7 4 2017].

[13] Microsoft Corporation, »Get ready for SQL Server 2017,« [Mrežno]. Available:

https://www.microsoft.com/en-us/sql-server/sql-server-2017. [Pokušaj pristupa 19 4 2017].

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 162

[14] Microsoft Corporation, »Database Files and Filegroups,« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-files-and-filegroups.

[Pokušaj pristupa 18 5 2017].

[15] GoDaddy, »What is collation and can I change it on my MS SQL database?,« [Mrežno]. Available:

https://uk.godaddy.com/help/what-is-collation-and-can-i-change-it-on-my-ms-sql-database-4203.

[Pokušaj pristupa 19 5 2017].

[16] Microsoft Corporation, »Prerequisites for Minimal Logging in Bulk Import,« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/prerequisites-for-minimal-

logging-in-bulk-import. [Pokušaj pristupa 19 5 2017].

[17] S. Pandey, »Data warehouse Concepts,« [Mrežno]. Available: http://www.techturtle.net/data-

warehouse-concepts/. [Pokušaj pristupa 28 4 2017].

[18] B. Williams, »Data Models for an Automotive Industry Platform,« Database Answers Ltd., [Mrežno].

Available: http://www.databaseanswers.org/data_models/automotive_industry_platform/. [Pokušaj

pristupa 4 5 2017].

[19] Microsoft Corporation, »Referential Integrity,« [Mrežno]. Available: https://msdn.microsoft.com/en-

us/library/aa292166(v=vs.71).aspx. [Pokušaj pristupa 13 5 2017].

[20] Lucid Software Inc., »What is a Database Model,« [Mrežno]. Available:

https://www.lucidchart.com/pages/database-diagram/database-models. [Pokušaj pristupa 16 8 2017].

[21] E. F. Codd, »A Relational Model of Data for Large Shared Data Banks,« Communications of the ACM,

svez. 13, br. 6, p. 377–387, 1970.

[22] 1Keydata, »Second Normal Form (2NF),« [Mrežno]. Available: http://www.1keydata.com/database-

normalization/second-normal-form-2nf.php. [Pokušaj pristupa 23 5 2017].

[23] Microsoft Corporation, »Create table (Transact-SQL) Identity (Property),« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property.

[Pokušaj pristupa 18 6 2017].

[24] A. Jorgensen, P. LeBlanc, J. Chinchilla, J. Segarra i A. Nelson, »Local Temporary Tables,« u

Microsoft® SQL Server® 2012 BIBLE, Indianapolis, John Wiley & Sons, Inc., 2012, p. 406.

[25] Microsoft Corporation, »SELECT - ORDER BY Clause (Transact-SQL),« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql. [Pokušaj

pristupa 30 6 2017].

[26] A. Ali, »Importance of Statistics and How It Works in SQL Server – Part 1,« Database Journal, 22 12

2014. [Mrežno]. Available: http://www.databasejournal.com/features/mssql/importance-of-statistics-

and-how-it-works-in-sql-server-part-1.html. [Pokušaj pristupa 23 7 2017].

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 163

[27] Mircosoft Corporation, »Clustered Index Structures,« [Mrežno]. Available:

https://technet.microsoft.com/en-us/library/ms177443(v=sql.105).aspx. [Pokušaj pristupa 26 7 2017].

[28] Microsoft Corporation, »Nonclustered Index Structures,« [Mrežno]. Available:

https://technet.microsoft.com/en-us/library/ms177484(v=sql.105).aspx. [Pokušaj pristupa 28 7 2017].

[29] Microsoft Corporation, »SR0016: Avoid using sp_ as a prefix for stored procedures,« [Mrežno].

Available: https://msdn.microsoft.com/en-us/library/dd172115(v=vs.100).aspx. [Pokušaj pristupa 8 8

2017].

[30] A. Bertrand, »Benefits of SCHEMABINDING in SQL Server,« [Mrežno]. Available:

https://www.mssqltips.com/sqlservertip/4673/benefits-of-schemabinding-in-sql-server/. [Pokušaj

pristupa 6 8 2017].

[31] Microsoft Corporation, »CREATE TRIGGER (Transact-SQL),« [Mrežno]. Available:

https://technet.microsoft.com/en-us/library/ms189799%28v=sql.105%29.aspx?f=255&MSPPError=-

2147217396. [Pokušaj pristupa 13 8 2017].

[32] K. Kellenberger, »Understanding the Difference between Owners and Schemas in SQL Server,«

SQLTeam Publishing, LLC , [Mrežno]. Available: http://www.sqlteam.com/article/understanding-the-

difference-between-owners-and-schemas-in-sql-server. [Pokušaj pristupa 20 8 2017].

[33] K. B. Kelley, »How to configure password enforcement options for standard SQL Server logins,«

Edgewood Solutions, LLC, [Mrežno]. Available: https://www.mssqltips.com/sqlservertip/1909/how-to-

configure-password-enforcement-options-for-standard-sql-server-logins/. [Pokušaj pristupa 13 9 2017].

[34] Microsoft Corporation, »Create a Database User,« [Mrežno]. Available: https://docs.microsoft.com/en-

us/sql/relational-databases/security/authentication-access/create-a-database-user. [Pokušaj pristupa

16 9 2017].

[35] Microsoft Corporation, »Server-Level Roles,« [Mrežno]. Available: https://docs.microsoft.com/en-

us/sql/relational-databases/security/authentication-access/server-level-roles. [Pokušaj pristupa 26 9

2017].

[36] Microsoft Corporation, »Database-Level Roles,« [Mrežno]. Available: https://docs.microsoft.com/en-

us/sql/relational-databases/security/authentication-access/database-level-roles. [Pokušaj pristupa 28 9

2017].

[37] Microsoft Corporation, »HASHBYTES (Transact-SQL),« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql. [Pokušaj pristupa 30 9

2017].

[38] B. A. Masood-al-farooq, »SQL Server Encryption,« [Mrežno]. Available: http://sqlmag.com/database-

security/sql-server-encryption. [Pokušaj pristupa 30 9 2017].

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 164

[39] Microsoft Corporation, »Transparent Data Encryption (TDE),« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-

encryption. [Pokušaj pristupa 3 10 2017].

[40] R. Sheldon, »SQL Server Encryption: Always Encrypted,« Red Gate Software Ltd, [Mrežno]. Available:

https://www.red-gate.com/simple-talk/sql/database-administration/sql-server-encryption-always-

encrypted/. [Pokušaj pristupa 7 10 2017].

[41] Microsoft Corporation, »Dynamic Data Masking,« [Mrežno]. Available: https://docs.microsoft.com/en-

us/sql/relational-databases/security/dynamic-data-masking. [Pokušaj pristupa 9 10 2017].

[42] A. Shehzad, »Copy Only Backup for SQL Server,« Edgewood Solutions, LLC , [Mrežno]. Available:

https://www.mssqltips.com/sqlservertip/1772/copy-only-backup-for-sql-server/. [Pokušaj pristupa 15 10

2017].

[43] A. Omelchenko, »Differential Backup,« [Mrežno]. Available: https://sqlbak.com/academy/differential-

backup/. [Pokušaj pristupa 19 10 2017].

[44] AskMeSql, »Log shipping - NORECOVRY vs. STANDBY mode,« 10 1 2011. [Mrežno]. Available:

http://askmesql.blogspot.hr/2011/01/log-shipping-norecovery-vs-standby-mode.html. [Pokušaj pristupa

21 10 2017].

[45] Microsoft Corporation, »SQL Server Agent,« [Mrežno]. Available: https://docs.microsoft.com/en-

us/sql/ssms/agent/sql-server-agent#Components. [Pokušaj pristupa 26 10 2017].

[46] Microsoft Corporation, »Maintenance Plans,« [Mrežno]. Available: https://docs.microsoft.com/en-

us/sql/relational-databases/maintenance-plans/maintenance-plans. [Pokušaj pristupa 1 11 2017].

[47] Microsoft Corporation, »Documenting and Scripting Databases,« [Mrežno]. Available:

https://technet.microsoft.com/en-us/library/ms191299(v=sql.105).aspx. [Pokušaj pristupa 12 11 2017].

[48] Microsoft Corporation, »Use the Copy Database Wizard,« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/relational-databases/databases/use-the-copy-database-wizard.

[Pokušaj pristupa 12 11 2017].

[49] Shais, »20 Best SQL Server Monitoring Tools for all SQL Servers,« Technig, [Mrežno]. Available:

https://www.technig.com/20-best-sql-server-monitoring-tools/. [Pokušaj pristupa 15 11 2017].

[50] P. Reyes, »Using the SQL Server Default Trace to Audit Events,« Edgewood Solutions LLC, [Mrežno].

Available: https://www.mssqltips.com/sqlservertip/3445/using-the-sql-server-default-trace-to-audit-

events/. [Pokušaj pristupa 18 11 2017].

[51] Microsoft Corporation, »SQL Server Audit Action Groups and Actions,« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-

groups-and-actions. [Pokušaj pristupa 23 11 2017].

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 165

[52] Microsoft Corporation, »Data Replication and Synchronization Guidance,« [Mrežno]. Available:

https://msdn.microsoft.com/en-us/library/dn589787.aspx. [Pokušaj pristupa 1 12 2017].

[53] Microsoft Corporation, »Replication Publishing Model Overview,« [Mrežno]. Available:

https://docs.microsoft.com/en-us/sql/relational-databases/replication/publish/replication-publishing-

model-overview. [Pokušaj pristupa 3 12 2017].

[54] Microsoft Corporation, »Implementing Master-Subordinate Snapshot Replication Using SQL Server,«

[Mrežno]. Available: https://msdn.microsoft.com/en-us/library/ff648057.aspx. [Pokušaj pristupa 4 12

2017].

[55] Microsoft Corporation, »Implementing Master-Subordinate Transactional Incremental Replication

Using SQL Server,« [Mrežno]. Available: https://msdn.microsoft.com/en-us/library/ff648240.aspx.

[Pokušaj pristupa 5 12 2017].

[56] Microsoft Corporation, »Peer-to-Peer Transactional Replication,« [Mrežno]. Available:

https://technet.microsoft.com/en-us/library/ms151196(v=sql.110).aspx. [Pokušaj pristupa 7 12 2017].

[57] Microsoft Corporation, »Implementing Master-Master Row-Level Synchronization Using SQL Server,«

[Mrežno]. Available: https://msdn.microsoft.com/en-us/library/ff649591.aspx. [Pokušaj pristupa 7 12

2017].

[58] H. Mohamed, »Log Shipping SQL Server 2012,« 9 3 2014. [Mrežno]. Available:

https://helmymo7amed.wordpress.com/2014/03/09/log-shipping-sql-server-2012/. [Pokušaj pristupa 4

6 2018].

[59] S. Bawany, »SQL Server AlwaysOn – SharePoint 2013 High Availability and Disaster Recovery,« 6 7

2014. [Mrežno]. Available: https://blogs.technet.microsoft.com/salbawany/2014/07/06/sql-server-

alwayson-sharepoint-2013-high-availability-and-disaster-recovery/. [Pokušaj pristupa 2018 7 19].

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 166

Ključne riječi

A

Agent distribucije · 144

Agent snimke · 144

Agent spajanja · 148

Always Encrypted · 103

AlwaysOn · 155

Aplikacijske uloge · 94

Asimetrični kriptografski algoritmi · 97

Atomicy · 10

Audit specifikacija · 137

Availability Groups · 156

Ažurirajući pogledi · 57

B

Baza podataka · 5

Bulk-logged · 25

C

Cascade · 35

Collation · 25

Column encryption key · 103

Column master key · 103

Consistency · 10

Č

Članak · 140

D

Database Engine Tuning Advisor · 133

Database mirroring · 153

Datotečne grupe · 24

DB2 · 7

DCL · 8

DDL · 8

DDL okidači · 75

DECRYPTBYKEY · 100

Deleted · 73

Desktop baze podataka · 5

Detach · 130

Diferencijalne rezervne kopije · 114

Distributer · 140, 142

DMK · 99

DML · 8

DML okidači · 71

Dnevnik transakcija · 24

Druga normalna forma · 43

Durability · 16

E

EKM · 101

ENCRYPTBYKEY · 100

Enforce Foreign Key Constraint · 35

e-pošta · 126

ER model · 28

Extended properties · 81

F

Failover · 153

Failover Cluster · 155

Fantomski zapisi · 13

Filegroups · 24

FileMaker · 6

Filtrirani negrupirajući indeks · 64

Fizički podatkovni model · 33

FK · 32

Full · 25

Funkcije sažimanja · 95

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 167

G

Globalne privremene tablice · 53

Grupirajući indeks · 58

H

Hijerarhijski model · 39

I

Impersonacija · 89

Informacija · 5

Informix · 7

Inline Table-Valued Functions · 69

Inserted · 73

Instanca · 16

Isolation · 10

Izdavač · 140

Izvedbeni plan · 59

J

Jedan prema jedan · 33

Jedan prema više · 34

K

Klijent-server baza podataka · 6

Ključni atributi · 29

Korisnički računi · 86

Kriptirani pogled · 58

L

Listener · 156

Log sequence numbers · 116

Log shipping · 151

Logički podatkovni model · 31

LSN · 117

M

Maskiranje podataka · 108

MDF · 24

Merge replication · 147

Microsoft Access · 5, 6

Microsoft SQL Server · 7

Mirror · 153

Mixed Mode · 21

Monitor potpunog zastoja · 15

Mrežni model · 40

Multistatement Table-Valued Function · 69

MySQL · 7

N

NDF · 24

Negrupirajući indeks · 63

Ne-ključni atributi · 29

Neponavljajuće čitanje · 12

No Action · 35

O

Obnova indeksa · 64

Ograničenja · 51

Optimistično zaključavanje · 11

Oracle · 7

P

Paradox · 6

Partially contained databases · 86

Peer-to-peer replication · 146

Pesimistično zaključavanje · 11

PF · 32

PK · 32

Plan održavanja · 123

Podrazumijevana instanca · 16

Pogled · 54

Point in time recovery · 115

Ponavljajuće čitanje · 13

MODELIRANJE, IMPLEMENTACIJA I ADMINISTRACIJA BAZA PODATAKA

Željko Kovačević, struč.spec.ing.techn.inf. | Tehničko veleučilište u Zagrebu 168

Poslovi · 120

Postgre SQL · 7

Potpuna rezervna kopija · 111

Potpuni zastoj · 14

Pretplata · 149

Pretplatnik · 140

Prijavni nalog · 82

Primarni ključ · 50

Privremene tablice · 52

Prljavo čitanje · 12

Prva normalna forma · 42

Publikacija · 140

Q

Query Optimizer · 60

R

Raspored poslova · 122

Recovery model · 25

Referencijalni integritet · 35

Rekurzivna veza · 37

Relacijski model · 40

Reorganizacija indeksa · 64

Replikacija · 140

Replikacijski monitor · 151

S

Schemabingind · 70

Sekvence · 76

Serijalizacija · 13

Server uloge · 84

Set Default · 36

Set NULL · 36

Sheme · 79

Simetrični kriptografski algoritmi · 97

Simple · 25

Sinonimi · 77

Skalarna funkcija · 68

Snimak · 14

SQL · 7

SQL Server Agent · 19, 120

SQL Server Audit · 135

SQL Server Browser · 20, 21

SQL Server Database Engine · 20

SQL Server Profiler · 132

SQL user without login · 89

SQLite · 6

Stalne server uloge · 91

Stalne uloge baze podataka · 93

Sybase · 7

T

Tablice · 49

TCL · 9

TDE · 101

Transakcijska replikacija · 145

Treća normalna forma · 44

T-SQL · 7

U

Uloge baza podataka · 85

Uskladištene procedure · 65

V

Virtualna tablica · 56

Više prema više · 36

Vlasnik · 25, 79

W

Windows authentication mode · 21

Witness · 153