6.12.2012
Obnova baze podataka
Mr.sc. Emir Mešković
Tuzla, 05.12.2012. god.
Obnova baze podataka u slučaju
razrušenja – Database Recovery
• Dovesti bazu podataka u najnovije stanje za koje
se pouzdano zna da je bilo ispravno
• Velike baze podataka – dijeljene, višekorisničke –
obavezno moraju posjedovati mehanizme obnove
• Male, jednokorisničke baze podataka obično
imaju malu ili uopšte nemaju podršku obnovi –
obnova se prepušta korisnikovoj odgovornosti
– podrazumijeva se da korisnik periodično stvara backup
kopiju te u slučaju potrebe obnavlja bazu ručno.
2
1
6.12.2012
Uzroci razrušenja
•
•
•
•
•
•
•
greške opreme
greške operativnog sistema
greške sistema za upravljanje bazama podataka
greške aplikacijskog programa
greške operatera
kolebanje izvora energije
požar, sabotaža, ...
3
Opšte pravilo koje omogućava obnovu
• Redundancija - svaki se podatak mora moći
rekonstruisati iz nekih drugih informacija
redundantno pohranjenih negdje drugo u sistemu
(na traci, na drugom disku, na “ogledalnom”
disku, ...):
– “ogledanje” podataka (mirroring)
– sigurnosne kopije (backup) - On-line backup
– dnevnici izmjena
– poništavanje transakcija
– ponovo obavljanje transakcija
4
2
6.12.2012
Opšti opis postupka koji omogućava
obnovu
• Periodično kopiranje sadržaja baze podataka na
arhivski medij (traka)
– (1  dnevno, 1  sedmično - zavisno o učestalosti
promjena)
• Svaka izmjena u bazi podataka evidentira se u
logičkom dnevniku izmjena (logical log, journal)
– stara vrijednost zapisa
– nova vrijednost zapisa
– korisnik, vrijeme, …
– izmjena se prvo zapisuje u dnevnik, a tek se onda
provodi!
5
Kad nastane kvar ...
• Baza je potpuno uništena
– najsvježija arhivska kopija
– dnevnik izmjena - ponovo obavljanje izmjena koje su
se dogodile u međuvremenu (nakon izrade arhive)
• Baza nije uništena - sadržaj je nepouzdan program je prekinut tokom obavljanja niza logički
povezanih izmjena
– vraćanje na ispravno stanje - pomoću dnevnika
izmjena poništavaju se sve nepouzdane izmjene
6
3
6.12.2012
Transakcija
•
•
•
•
jedinica rada nad bazom podataka
sastoji se od niza logički povezanih izmjena
početak transakcije - BEGIN WORK
završetak transakcije:
– COMMIT WORK - uspješan završetak - potvrđivanje
transakcije
– ROLLBACK WORK - neuspješan završetak poništavanje transakcije - poništavanje svih izmjena
koje je obavila transakcija
7
Određivanje granica transakcije
• eksplicitno:
BEGIN WORK
………
……….
COMMIT WORK ili ROLLBACK WORK
• implicitno:
– svaka operacija izmjene u bazi podataka (npr. UPDATE naredba)
predstavlja transakciju, njezin uspješan završetak COMMIT
WORK, neuspješan završetak predstavlja ROLLBACK WORK
• transakcije se ne mogu “ugnježđivati” - jedna aplikacija u
jednom času može imati samo jednu aktivnu transakciju
• sve operacije obnove moraju se obavljati unutar granica
transakcije
8
4
6.12.2012
Obavljanje transakcija
• Dio sistema koji brine o obavljanju transakcija
(transaction manager, transaction processing
monitor – TP monitor) osigurava zadovoljavanje svih
poznatih pravila integriteta
Query
Processor
Transaction
Manager
Log Manager
Buffer
Manager
Recovery
Manager
Data
Log
9
Stanja transakcije
•
•
•
•
•
Aktivna (active) – tokom izvođenja
Djelimično završena – (partially committed) – nakon što je obavljena njezina
posljednja operacija
Neispravna (failed) – nakon što se ustanovi da nije moguće nastaviti njezino
normalno izvođenje
Neuspješno završena (aborted) – nakon što su poništeni njezini efekti i baza
podataka vraćena u stanje kakvo je bilo prije nego što je započela
Potvrđena (committed) – uspješno završena
Djelimično
završena
Potvrđena
Dijagram stanja
transakcije
Aktivna
Neispravna
Neuspješno
završena
10
5
6.12.2012
Primjer transakcije
CREATE PROCEDURE prijenos (s_racuna INTEGER, na_racun INTEGER,
iznos DECIMAL (8,2))
DEFINE pom_saldo DECIMAL (8,2);
BEGIN WORK;
UPDATE racun SET saldo = saldo – iznos
WHERE br_racun = s_racuna;
UPDATE racun SET saldo = saldo + iznos
WHERE br_racun = na_racun;
SELECT saldo INTO pom_saldo FROM racun
WHERE br_racun = s_racuna;
IF pom_saldo < 0 THEN
ROLLBACK WORK;
ELSE
COMMIT WORK;
END IF
END PROCEDURE
11
Potvrđivanje transakcije
• Tačka potvrđivanja (commit point) –sve izmjene koje je transakcija
napravila postaju permanentne (trajne)
• Sve izmjene koje je transakcija napravila prije tačke potvrđivanja mogu se
smatrati tentativnima (privremenim – tentative)
• U tački potvrđivanja otpuštaju se svi ključevi
• Potvrđena izmjena nikad ne može biti poništena – sistem garantuje da će
njezine izmjene biti trajno pohranjene u bazi podataka, čak i ako kvar
nastane već u sljedećem trenutku
• Ako kvar nastane nakon potvrđivanja i prije nego što su izmjene iz
memorijskih spremnika (buffer-a) prebačene u bazu podataka – izmjene
bi u trenutku kvara bile izgubljene, ALI:
– procedura za ponovo pokretanje provest će promjene u bazi podataka
– vrijednosti koje je potrebno zapisati u bazu podataka pronalaze se u
odgovarajućim zapisima u dnevniku izmjena
– dnevnik mora biti zapisan prije nego što završi procedura potvrđivanja –
write-ahead log rule
12
6
6.12.2012
Osobine transakcije
• ACID
– Atomicity - atomarnost - transakcija se mora obaviti u
potpunosti ili se uopšte ne smije obaviti,
– Consistency - konzistentnost - transakcijom baza podataka
prelazi iz jednog konzistentnog stanja u drugo
konzistentno stanje,
– Isolation - izolacija - kada se paralelno obavljaju dvije ili
više transakcija, njihov efekat mora biti isti kao da su se
obavljale jedna iza druge,
– Durability - izdržljivost - ukoliko je transakcija obavila svoj
posao, njezini efekti ne smiju biti izgubljeni ako se dogodi
kvar sistema, čak i u situaciji kada se kvar desi neposredno
nakon završetka transakcije
13
• Sa stanovišta krajnjeg korisnika transakcija je
nedjeljiva
– ne zanima ga činjenica da se moraju obaviti dvije
operacije nad bazom podataka
• Korisnik mora biti siguran da je zadatak
obavljen potpuno i samo jednom!
14
7
6.12.2012
Dnevnik izmjena
Transakcija A
beginA
A1
Transakcija B
beginB
B1 commitB
Transakcija C
beginC
C1
beginA beginB
A1
B1
beginC
A2 commitA
C2 commitC
C1
A2 commitB C2 commitA commitC
15
Tipovi grešaka
1. Greške koje otkriva sama aplikacija
2. Greške unutar transakcije kojima aplikacija ne
rukuje na eksplicitan način (npr. preliv, dijeljenje
s nulom)
3. Kvar računarskog sistema - baza nije fizički
uništena
4. Kvar medija za pohranu - fizički uništena baza
- slučajevi 1. i 2. ne smatraju se razrušenjem
16
8
6.12.2012
Greške koje otkriva aplikacija
• Slučajevi u kojima aplikacija predviđa obavljanje
naredbe ROLLBACK WORK
– Poništavanje efekata transakcije
– Poništavanje poruka
• kao da transakcija nikad nije započela s radom
• poništavanje poruka - brisanjem iz reda poruka
(poruke se ne ispisuju odmah, već na kraju
transakcije)
• poništavanje izmjena - pretragom dnevnika unazad nova vrijednost zapisa zamjenjuje se sa starom
vrijednošću - sve dok se ne dođe do početka
transakcije - BEGIN WORK
17
Greške koje ne otkriva aplikacija
• ako se javi greška za koju nismo pretpostavili akciju program završi na neplanirani način
• u tim slučajevima ne postoji naredba ROLLBACK WORK !
– Poništavanje efekata transakcije, poništavanje poruka
• Primjer: pokušaj unosa zapisa čiji ključ već postoji u bazi:
CREATE TABLE osoba (
mbr INTEGER,
prezime CHAR(20),
ime CHAR(20)
PRIMARY KEY (mbr)
);
Greška!
BEGIN WORK;
INSERT INTO osoba VALUES (1,‘Mujić', ‘Mujo');
INSERT INTO osoba VALUES (2,‘Husić', ‘Huso');
INSERT INTO osoba VALUES (1,‘Fatić', ‘Fata');
INSERT INTO osoba VALUES (4,‘Hasić', ‘Haso');
COMMIT WORK;
18
9
6.12.2012
Dnevnik izmjena
Transakcija A
beginA
A1
Transakcija B
beginB
B1 commitB
Transakcija C
beginC
C1
beginC
C1
A2 commitA
C2 rollbackC
A2 commitB C2 commitA rollbackC
undoC2
undoC1
19
Greške sistema
• baza nije razrušena - sve transakcije koje su se
odvijale u vrijeme kvara moraju biti poništene jer
nisu kompletne!
• pretraživanjem dnevnika od početka identifikuju
se transakcije za koje postoji BEGIN i ne postoji
COMMIT ili ROLLBACK
– takav postupak bi predugo trajao
– uvode se kontrolne tačke (checkpoint)
– u određenim intervalima (obično svakih 5 minuta)
određuje se kontrolna tačka
20
10
6.12.2012
Kontrolna tačka
1. pohrana sadržaja spremnika dnevnika (log buffer) u
datoteku dnevnika
2. zapisivanje zapisa kontrolne tačke u datoteku
dnevnika
3. pohrana sadržaja spremnika baze podataka
(database buffer) u bazu podataka
4. zapisivanje adrese zapisa kontrolne tačke iz datoteke
dnevnika u datoteku za ponovno pokretanje (restart
file)
• Zapis kontrolne tačke sadrži:
– listu svih aktivnih transakcija
– za svaku transakciju - adresu najnovijeg zapisa u datoteci
21
dnevnika
Primjer
T1
T2
T3
T4
T5
vrijeme
kontrolna
tačka
Transakcije T3 i T5 treba poništiti
Transakcije T2 i T4 treba ponovo obaviti
greška
sistema
22
11
6.12.2012
Proces obnove
• Stvara se:
– lista za poništavanje - na početku sadrži sve transakcije koje su
bile aktivne u kontrolnoj tački
– lista za ponovo obavljanje - na početku je prazna
• Pretražuje se dnevnik od kontrolne tačke
– transakcija za koju se pronađe BEGIN dodaje se u listu za
poništavanje
– transakcija za koju se pronađe COMMIT prebacuje se iz liste za
poništavanje u listu za ponovo obavljanje
• Ponovo se obavljaju transakcije iz liste za ponovo obavljanje
• Poništavaju se transakcije iz liste za poništavanje
• SUBP ne može prihvatiti niti jedan zahtjev dok se ne završi
23
proces obnove!
Proces obnove
• Logika ponovnog obavljanja
– Učinak ponovnog obavljanja, bez obzira koliko se puta
obavljalo mora biti isti kao da je operacija obavljena tačno
jednom!
– redo (redo (redo ( …..redo(x)))) = redo (x)
– Ponovo obavljanje = Obnova unaprijed (forward recovery)
• Logika poništavanja
– Učinak poništavanja, bez obzira koliko se puta obavljalo
mora biti isti kao da je operacija obavljena tačno jednom!
– undo (undo (undo ( …..undo(x)))) = undo (x)
– Poništavanje = Obnova unazad (backward recovery) 24
12
6.12.2012
Kvarovi medija
• baza je razrušena - npr. zbog kvara diska
– obnova sadržaja baze pomoću najnovije arhivske kopije
– pomoću najnovijeg dnevnika obavljaju se transakcije koje
su bile provedene od trenutka arhiviranja
• ako je najnovija arhivska kopija “pokvarena”
– uzima se predzadnja arhivska kopija
– dnevnik izmjena od predzadnje arhive do zadnje arhive
– dnevnik izmjena nastalih nakon zadnje arhive
• Preporuke:
– čuvati najmanje tri posljednje arhive i pripadne dnevnike
– dnevnik se ne nalazi na istom disku na kojem je baza
25
podataka
Ciklička izmjena logičkih dnevnika
• određuje se broj dnevnika koji će se koristiti
LOG1
LOG2
LOG3
LOG4
• čim se jedan dnevnik popuni - kopira se na traku
• dnevnik se mora nalaziti na disku sve dok su
transakcije sadržane u njemu aktivne (da bi se
omogućio ROLLBACK )
LOG1
LOG2
LOG3
LOG4
26
13
6.12.2012
Ciklička izmjena logičkih dnevnika
• U slučaju da su svi dnevnici puni - obustavljaju se
sve akcije i sistem čeka da se napravi sigurnosna
kopija
– vremenski preduge transakcije, prevelike transakcije
• kad su dnevnici popunjeni npr. 70% - “prvi znak za uzbunu”
(Long Transaction High Water Mark) – sistem ne prihvaća
nove transakcije
• kad su dnevnici popunjeni npr. 85 ili 90% - “drugi znak za
uzbunu” (Long Transaction Exclusive Access High Water
Mark) - sve aktivne transakcije se poništavaju
• Kod pogreške medija koristi se arhivska kopija +
dnevnici s traka
27
Obnova uz zadovoljenje zahtjeva za
visokim stepenom dostupnosti
• “ogledanje” podataka (mirroring)
• arhiviranje tokom obavljanja transakcija (online
backup)
• inkrementirano arhiviranje
• fizički dnevnik (physical log)
28
14
6.12.2012
“Ogledanje”
• slika podataka “u ogledalu” (mirror)
• promjene se provode istovremeno u primarnom i
“ogledalnom” području
• u slučaju pogreške u jednom od područja
– nastavak rada na ispravnom području
– nalog za ponovo kreiranje (“popravljanje”) “ogledalnog”
područja
• “ogledanje” pod kontrolom hardware-a
– RAID - Redundant Arrays of Inexpensive Disks (Level 1 –
“ogledalni” disk, Level 4 - n diskova za podatke + 1
“ogledalni” disk, ...
• “ ogledanje” pod kontrolom SUBP-a
29
Arhiviranje
• On-line arhiviranje (On-line Backup)
– stvaranje arhivske kopije tokom rada korisnika – izvođenja
transakcija
– stanje baze podataka pohranjeno u arhivskoj kopiji odgovara
stanju kakvo je bilo u trenutku pokretanja arhiviranja
• Inkrementirano arhiviranje
– arhiviranje baze podataka dodatno opterećuje sistem i usporava
rad korisnika
– želi se skratiti trajanje i obim arhiviranja
– inkrementirano arhiviranje – arhive različitog nivoa:
• nivo 0 – kopija čitave baze podataka – npr. jednom mjesečno
• nivo 1 – sedmična arhiva – sadrži promjene nastale nakon arhive nivoa 0
• nivo 2 – dnevna arhiva - sadrži promjene nastale nakon arhive nivoa 1
30
15
6.12.2012
Inkrementirano arhiviranje
Mjesec decembar:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 01
arhiva nivoa 0
arhiva nivoa 1
arhiva nivoa 2
Ako se 18. decembra desi kvar na disku
Obnova:
1. Arhiva nivoa 0 od 1. decembra
2. Arhiva nivoa 1 od 15. decembra
3. Arhiva nivoa 2 od 17. decembra
4. Logički dnevnik koji je započeo
nakon arhive nivoa 2 od 17. decembra
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
31
Fizički dnevnik
• stvara se nakon kontrolne tačke
• pohranjuju se kopije stranica s diska (iz baze podataka) prije
obavljanja izmjena (Before Image)
• omogućava rekonstrukciju stanja u bazi podataka kakvo je
bilo u posljednjoj kontrolnoj tački prije pogreške
• ostvaruje se fizička konzistentnost podataka
• Kod ponovog pokretanja sistema:
– provjerava se postoji li neki sadržaj u fizičkom dnevniku – ako
postoji - bilo je izmjena nakon posljednje kontrolne tačke pokreće se brza obnova:
• sve stranice fizičkog dnevnika pohranjuju se na svoje lokacije
• obavljaju se izmjene iz logičkog dnevnika počevši od kontrolne tačke,
poništavaju se transakcije koje nisu završile prije pogreške
32
16
6.12.2012
Baza podataka
123 Damir Pirić
123 Damir Pirić
234123
Maja
Damir
Đurić
Pirić
234123
Maja
Damir
Đurić
Pirić
345234
Dino
Maja
Pejić
Đurić
345234
Dino
Maja
Pejić
Đurić
456345
Ema
DinoMešić
Pejić
456345
Ema
DinoMešić
Pejić
567456
Goran
EmaMarić
Mešić
567456
Goran
EmaMarić
Mešić
567 Goran Marić
567 Goran Marić
123 Deni 15111999
123 Deni 15111999
123123
Jasna
Deni14032002
15111999
123123
Jasna
Deni14032002
15111999
234123
Maja
28122001
Jasna
123
Deni14032002
15111999
234123
Maja
28122001
Jasna
14032002
234234
Denis
17102004
Maja
28122001
123
Jasna
14032002
234234
Denis
17102004
Maja
28122001
234234
Irma
03012002
Denis
17102004
234
Maja
28122001
234234
Irma
03012002
Denis
17102004
234234
Irma
03012002
Denis
17102004
234 Irma 03012002
234 Irma 03012002
Tabele:
osoba(mbr, ime,
prez)
dijete(mbr, imedj,
datrod)
Nakon neke kontrolne tačke fizički dnevnik je prazan
33
Baza podataka
123 Damir Pirić
123 Demir Pirić
Demir
Pirić
234123
Maja
Đurić
Demir
Damir
Pirić
234123
Maja
Đurić
Maja
Đurić
345234
Dino
Pejić
MajaPejić
Đurić
345234
Dinko
Dinko
Pejić
456345
Ema
Mešić
Dinko
Dino
Pejić
456345
Ema
Mešić
EmaMarić
Mešić
567456
Goran
EmaMarić
Mešić
567456
Goran
567 Goran Marić
567 Goran Marić
123 Deni 15111999
123 Deni 15111999
123123
Jasna
Deni14032002
15111999
Deni14032002
10111999
123123Jasna
123Jasna
Deni
15111999
234123
Maja
28122001
Deni
10111999
14032002
Jasna
14032002
234123
Maja
28122001
123
Jasna
14032002
234234
Denis
17102004
Maja
28122001
Jasna
Maja17102004
28122001
234234
Denis
234
Maja
28122001
234234
Irma
03012002
Denis
17102004
14032002
Denis
17102004
234234
Irma
03012002
Denis
17102004
234234
Irma
03012002
234Irma
Maja03012002
28122001
234
234
234 Irma
Denis 03012002
17102004
Tabele:
osoba(mbr, ime,
prez)
dijete(mbr, imedj,
datrod)
234 Irma 03012002
Prije svake izmjene stranica na kojoj će doći do promjene kopira se
u datoteku fizičkog dnevnika (struktura – stack – LIFO)
123 Demir Pirić
10111999
234 123
MajaDeni
Đurić
Jasna
14032002
123
Damir
Pirić
345 123
Dinko
Pejić
28122001
234
Maja
Đurić
456 234
EmaMaja
Mešić
Denis
17102004
345
Dinko
Pejić
567 234
Goran
Marić
234 Irma
03012002
456 Ema Mešić
567 Goran Marić
UPDATE osoba set ime =
‘Damir' WHERE mbr = 123;
UPDATE dijete set datrod =
'15.11.1999' WHERE mbr =
123 and imedj = ‘Deni';
UPDATE osoba set ime =
‘Dino' WHERE mbr = 345;
34
17
6.12.2012
Baza podataka
123 Damir Pirić
123 Damir Pirić
234123
Maja
Damir
Đurić
Pirić
234123
Maja
Đurić
Demir
Damir
Pirić
345234
Dino
Maja
Pejić
Đurić
345234
Dino
Pejić
Maja
Đurić
456345
Ema
DinoMešić
Pejić
456345
Ema
Mešić
Dinko
Dino
Pejić
567456
Goran
Ema
Marić
Mešić
567456
Goran
Marić
Ema
Mešić
567 Goran Marić
567 Goran Marić
123 Deni 15111999
123 Deni 15111999
123123
Jasna
Deni14032002
15111999
123123
Jasna
14032002
Deni
15111999
Deni
15111999
234123
Maja
28122001
123
Deni
Jasna
14032002
234123
Maja
28122001
Jasna
14032002
123
Jasna
14032002
234234
Denis
17102004
Maja
28122001
10111999
234234
Denis
17102004
Maja
28122001
234
Maja
28122001
234234
Irma
03012002
Denis
17102004
123
Jasna
234234
Irma
03012002
Denis
17102004
Denis
17102004
234234
Irma
03012002
14032002
234
Irma
03012002
234 Irma
234
Maja 03012002
Tabele:
osoba(mbr, ime,
prez)
dijete(mbr, imedj,
datrod)
28122001
234 Denis
Obnova – stranice iz fizičkog dnevnika
kopiraju se u bazu podataka
17102004
234 Irma 03012002
123 Demir Pirić
10111999
234 123
MajaDeni
Đurić
123
Jasna
123
Damir
Pirić
345 Dino Pejić14032002
234
Maja
28122001
234
Maja
Đurić
456 Ema Mešić
Denis
17102004
345
Dinko
Pejić
567 234
Goran
Marić
234 Irma
03012002
456 Ema
Mešić
567 Goran Marić
35
Baza podataka
123 Damir Pirić
123 Damir Pirić
234123
Maja
Damir
Đurić
Pirić
234123
Maja
Demir
Đurić
Pirić
345234
Dino
Maja
Pejić
Đurić
345234
Dino
Maja
Pejić
Đurić
456345
Ema
DinoMešić
Pejić
456345
Ema
Dinko
Mešić
Pejić
567456
Goran
EmaMarić
Mešić
567456
Goran
EmaMarić
Mešić
567 Goran Marić
567 Goran Marić
123 Deni 15111999
123 Deni 15111999
123123
Jasna
Deni14032002
15111999
123123
Jasna
Deni14032002
15111999
234123
Maja
28122001
Jasna
123
Deni14032002
10111999
234123
Maja
28122001
Jasna
14032002
234234
Denis
17102004
Maja
28122001
123
Jasna
14032002
234234
Denis
17102004
Maja
28122001
234234
Irma
03012002
Denis
17102004
234
Maja
28122001
234234
Irma
03012002
Denis
17102004
234234
Irma
03012002
Denis
17102004
234 Irma 03012002
234 Irma 03012002
Tabele:
osoba(mbr, ime,
prez)
dijete(mbr, imedj,
datrod)
Nakon završetka kopiranja sadržaja iz datoteke fizičkog dnevnika u
bazu podataka – sadržaj baze podataka je vraćen u stanje kakvo je
bilo u kontrolnoj točci
36
18
Download

UVOD U BAZE PODATAKA