Baza predavanje

Embed Size (px)

DESCRIPTION

Download for free shere with all

Citation preview

  • 6.12.2012

    1

    Obnova baze podataka

    Tuzla, 05.12.2012. god.

    Mr.sc. Emir Mekovi

    Obnova baze podataka u sluaju razruenja Database Recovery

    Dovesti bazu podataka u najnovije stanje za koje se pouzdano zna da je bilo ispravno

    Velike baze podataka dijeljene, viekorisnike obavezno moraju posjedovati mehanizme obnove

    Male, jednokorisnike baze podataka obino imaju malu ili uopte nemaju podrku obnovi obnova se preputa korisnikovoj odgovornosti

    podrazumijeva se da korisnik periodino stvara backup kopiju te u sluaju potrebe obnavlja bazu runo.

    2

  • 6.12.2012

    2

    Uzroci razruenja

    greke opreme

    greke operativnog sistema

    greke sistema za upravljanje bazama podataka

    greke aplikacijskog programa

    greke operatera

    kolebanje izvora energije

    poar, sabotaa, ...

    3

    Opte pravilo koje omoguava obnovu

    Redundancija - svaki se podatak mora moi 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

    ponitavanje transakcija

    ponovo obavljanje transakcija 4

  • 6.12.2012

    3

    Opti opis postupka koji omoguava obnovu

    Periodino kopiranje sadraja baze podataka na arhivski medij (traka) (1 dnevno, 1 sedmino - zavisno o uestalosti

    promjena)

    Svaka izmjena u bazi podataka evidentira se u logikom 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 unitena

    najsvjeija arhivska kopija

    dnevnik izmjena - ponovo obavljanje izmjena koje su se dogodile u meuvremenu (nakon izrade arhive)

    Baza nije unitena - sadraj je nepouzdan - program je prekinut tokom obavljanja niza logiki povezanih izmjena

    vraanje na ispravno stanje - pomou dnevnika izmjena ponitavaju se sve nepouzdane izmjene

    6

  • 6.12.2012

    4

    Transakcija

    jedinica rada nad bazom podataka

    sastoji se od niza logiki povezanih izmjena

    poetak transakcije - BEGIN WORK

    zavretak transakcije:

    COMMIT WORK - uspjean zavretak - potvrivanje transakcije

    ROLLBACK WORK - neuspjean zavretak - ponitavanje transakcije - ponitavanje svih izmjena koje je obavila transakcija

    7

    Odreivanje granica transakcije

    eksplicitno:

    BEGIN WORK

    .

    COMMIT WORK ili ROLLBACK WORK

    implicitno: svaka operacija izmjene u bazi podataka (npr. UPDATE naredba)

    predstavlja transakciju, njezin uspjean zavretak COMMIT WORK, neuspjean zavretak predstavlja ROLLBACK WORK

    transakcije se ne mogu ugnjeivati - jedna aplikacija u jednom asu moe imati samo jednu aktivnu transakciju

    sve operacije obnove moraju se obavljati unutar granica transakcije 8

  • 6.12.2012

    5

    Obavljanje transakcija

    Dio sistema koji brine o obavljanju transakcija (transaction manager, transaction processing monitor TP monitor) osigurava zadovoljavanje svih poznatih pravila integriteta

    9

    Data

    Log

    Query Processor

    Transaction Manager

    Log Manager

    Buffer Manager

    Recovery Manager

    Stanja transakcije

    Aktivna (active) tokom izvoenja Djelimino zavrena (partially committed) nakon to je obavljena njezina

    posljednja operacija Neispravna (failed) nakon to se ustanovi da nije mogue nastaviti njezino

    normalno izvoenje Neuspjeno zavrena (aborted) nakon to su poniteni njezini efekti i baza

    podataka vraena u stanje kakvo je bilo prije nego to je zapoela Potvrena (committed) uspjeno zavrena

    10

    Djelimino zavrena

    Neispravna Neuspjeno

    zavrena

    Potvrena

    Aktivna

    Dijagram stanja transakcije

  • 6.12.2012

    6

    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

    Potvrivanje transakcije

    Taka potvrivanja (commit point) sve izmjene koje je transakcija napravila postaju permanentne (trajne)

    Sve izmjene koje je transakcija napravila prije take potvrivanja mogu se smatrati tentativnima (privremenim tentative)

    U taki potvrivanja otputaju se svi kljuevi Potvrena izmjena nikad ne moe biti ponitena sistem garantuje da e

    njezine izmjene biti trajno pohranjene u bazi podataka, ak i ako kvar nastane ve u sljedeem trenutku

    Ako kvar nastane nakon potvrivanja i prije nego to su izmjene iz memorijskih spremnika (buffer-a) prebaene 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

    odgovarajuim zapisima u dnevniku izmjena dnevnik mora biti zapisan prije nego to zavri procedura potvrivanja

    write-ahead log rule

    12

  • 6.12.2012

    7

    Osobine transakcije

    ACID Atomicity - atomarnost - transakcija se mora obaviti u

    potpunosti ili se uopte 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 vie transakcija, njihov efekat mora biti isti kao da su se obavljale jedna iza druge,

    Durability - izdrljivost - 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 zavretka transakcije

    13

    Sa stanovita 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

  • 6.12.2012

    8

    Dnevnik izmjena

    15

    Transakcija A

    Transakcija B

    Transakcija C

    beginA A1 A2 commitA

    beginB B1 commitB

    beginC C1 C2 commitC

    beginA beginB A1 B1 beginC C1 A2 commitB C2 commitA commitC

    Tipovi greaka

    1. Greke koje otkriva sama aplikacija

    2. Greke unutar transakcije kojima aplikacija ne rukuje na eksplicitan nain (npr. preliv, dijeljenje s nulom)

    3. Kvar raunarskog sistema - baza nije fiziki unitena

    4. Kvar medija za pohranu - fiziki unitena baza

    - sluajevi 1. i 2. ne smatraju se razruenjem 16

  • 6.12.2012

    9

    Greke koje otkriva aplikacija

    Sluajevi u kojima aplikacija predvia obavljanje naredbe ROLLBACK WORK Ponitavanje efekata transakcije Ponitavanje poruka

    kao da transakcija nikad nije zapoela s radom ponitavanje poruka - brisanjem iz reda poruka

    (poruke se ne ispisuju odmah, ve na kraju transakcije)

    ponitavanje izmjena - pretragom dnevnika unazad - nova vrijednost zapisa zamjenjuje se sa starom vrijednou - sve dok se ne doe do poetka transakcije - BEGIN WORK

    17

    Greke koje ne otkriva aplikacija

    ako se javi greka za koju nismo pretpostavili akciju - program zavri na neplanirani nain

    u tim sluajevima ne postoji naredba ROLLBACK WORK ! Ponitavanje efekata transakcije, ponitavanje poruka

    Primjer: pokuaj unosa zapisa iji klju ve postoji u bazi:

    18

    CREATE TABLE osoba ( mbr INTEGER, prezime CHAR(20), ime CHAR(20) PRIMARY KEY (mbr) );

    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;

    Greka!

  • 6.12.2012

    10

    Dnevnik izmjena

    19

    Transakcija A

    Transakcija B

    Transakcija C

    beginA A1 A2 commitA

    beginB B1 commitB

    beginC C1 C2 rollbackC

    beginC C1 A2 commitB C2 commitA rollbackC undoC2 undoC1

    Greke sistema

    baza nije razruena - sve transakcije koje su se odvijale u vrijeme kvara moraju biti ponitene jer nisu kompletne!

    pretraivanjem dnevnika od poetka identifikuju se transakcije za koje postoji BEGIN i ne postoji COMMIT ili ROLLBACK

    takav postupak bi predugo trajao

    uvode se kontrolne take (checkpoint)

    u odreenim intervalima (obino svakih 5 minuta) odreuje se kontrolna taka

    20

  • 6.12.2012

    11

    Kontrolna taka

    1. pohrana sadraja spremnika dnevnika (log buffer) u datoteku dnevnika

    2. zapisivanje zapisa kontrolne take u datoteku dnevnika

    3. pohrana sadraja spremnika baze podataka (database buffer) u bazu podataka

    4. zapisivanje adrese zapisa kontrolne take iz datoteke dnevnika u datoteku za ponovno pokretanje (restart file)

    Zapis kontrolne take sadri: listu svih aktivnih transakcija za svaku transakciju - adresu najnovijeg zapisa u datoteci

    dnevnika 21

    Primjer

    22

    vrijeme kontrolna

    taka greka

    sistema

    T1

    T2

    T3

    T4

    T5

    Transakcije T3 i T5 treba ponititi Transakcije T2 i T4 treba ponovo obaviti

  • 6.12.2012

    12

    Proces obnove

    Stvara se: lista za ponitavanje - na poetku sadri sve transakcije koje su

    bile aktivne u kontrolnoj taki

    lista za ponovo obavljanje - na poetku je prazna

    Pretrauje se dnevnik od kontrolne take transakcija za koju se pronae BEGIN dodaje se u listu za

    ponitavanje

    transakcija za koju se pronae COMMIT prebacuje se iz liste za ponitavanje u listu za ponovo obavljanje

    Ponovo se obavljaju transakcije iz liste za ponovo obavljanje

    Ponitavaju se transakcije iz liste za ponitavanje

    SUBP ne moe prihvatiti niti jedan zahtjev dok se ne zavri proces obnove! 23

    Proces obnove

    Logika ponovnog obavljanja

    Uinak ponovnog obavljanja, bez obzira koliko se puta obavljalo mora biti isti kao da je operacija obavljena tano jednom!

    redo (redo (redo ( ..redo(x)))) = redo (x)

    Ponovo obavljanje = Obnova unaprijed (forward recovery)

    Logika ponitavanja

    Uinak ponitavanja, bez obzira koliko se puta obavljalo mora biti isti kao da je operacija obavljena tano jednom!

    undo (undo (undo ( ..undo(x)))) = undo (x)

    Ponitavanje = Obnova unazad (backward recovery) 24

  • 6.12.2012

    13

    Kvarovi medija

    baza je razruena - npr. zbog kvara diska obnova sadraja baze pomou najnovije arhivske kopije

    pomou 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 podataka 25

    Ciklika izmjena logikih dnevnika

    odreuje se broj dnevnika koji e se koristiti

    im se jedan dnevnik popuni - kopira se na traku dnevnik se mora nalaziti na disku sve dok su

    transakcije sadrane u njemu aktivne (da bi se omoguio ROLLBACK )

    26

    LOG1 LOG2 LOG3 LOG4

    LOG1 LOG2 LOG3 LOG4

  • 6.12.2012

    14

    Ciklika izmjena logikih dnevnika

    U sluaju 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 prihvaa 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 ponitavaju

    Kod pogreke 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

    fiziki dnevnik (physical log)

    28

  • 6.12.2012

    15

    Ogledanje

    slika podataka u ogledalu (mirror)

    promjene se provode istovremeno u primarnom i ogledalnom podruju

    u sluaju pogreke u jednom od podruja nastavak rada na ispravnom podruju

    nalog za ponovo kreiranje (popravljanje) ogledalnog podruja

    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 izvoenja

    transakcija

    stanje baze podataka pohranjeno u arhivskoj kopiji odgovara stanju kakvo je bilo u trenutku pokretanja arhiviranja

    Inkrementirano arhiviranje arhiviranje baze podataka dodatno optereuje sistem i usporava

    rad korisnika

    eli se skratiti trajanje i obim arhiviranja

    inkrementirano arhiviranje arhive razliitog nivoa: nivo 0 kopija itave baze podataka npr. jednom mjeseno

    nivo 1 sedmina arhiva sadri promjene nastale nakon arhive nivoa 0

    nivo 2 dnevna arhiva - sadri promjene nastale nakon arhive nivoa 1 30

  • 6.12.2012

    16

    Inkrementirano arhiviranje

    31

    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

    01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

    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. Logiki dnevnik koji je zapoeo nakon arhive nivoa 2 od 17. decembra

    Mjesec decembar:

    Fiziki dnevnik

    stvara se nakon kontrolne take

    pohranjuju se kopije stranica s diska (iz baze podataka) prije obavljanja izmjena (Before Image)

    omoguava rekonstrukciju stanja u bazi podataka kakvo je bilo u posljednjoj kontrolnoj taki prije pogreke

    ostvaruje se fizika konzistentnost podataka

    Kod ponovog pokretanja sistema: provjerava se postoji li neki sadraj u fizikom dnevniku ako

    postoji - bilo je izmjena nakon posljednje kontrolne take - pokree se brza obnova: sve stranice fizikog dnevnika pohranjuju se na svoje lokacije

    obavljaju se izmjene iz logikog dnevnika poevi od kontrolne take, ponitavaju se transakcije koje nisu zavrile prije pogreke

    32

  • 6.12.2012

    17

    33

    Baza podataka

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    Tabele: osoba(mbr, ime, prez) dijete(mbr, imedj, datrod)

    Nakon neke kontrolne take fiziki dnevnik je prazan

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    34

    Baza podataka

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Demir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    Tabele: osoba(mbr, ime, prez) dijete(mbr, imedj, datrod)

    Prije svake izmjene stranica na kojoj e doi do promjene kopira se u datoteku fizikog dnevnika (struktura stack LIFO)

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 10111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    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;

    123 Demir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    123 Deni 10111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Damir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    123 Demir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    123 Demir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    123 Damir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Deni 10111999 123 Jasna

    14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

  • 6.12.2012

    18

    35

    Baza podataka

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Demir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    Tabele: osoba(mbr, ime, prez) dijete(mbr, imedj, datrod)

    Obnova stranice iz fizikog dnevnika kopiraju se u bazu podataka

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 10111999

    123 Jasna 14032002

    234 Maja 28122001

    234 Denis 17102004 234 Irma 03012002

    123 Demir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Deni 10111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Damir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    123 Damir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    36

    Baza podataka

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Damir Piri 234 Maja uri 345 Dino Peji 456 Ema Mei 567 Goran Mari

    123 Demir Piri 234 Maja uri 345 Dinko Peji 456 Ema Mei 567 Goran Mari

    Tabele: osoba(mbr, ime, prez) dijete(mbr, imedj, datrod)

    Nakon zavretka kopiranja sadraja iz datoteke fizikog dnevnika u bazu podataka sadraj baze podataka je vraen u stanje kakvo je bilo u kontrolnoj toci

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 15111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002

    123 Deni 10111999 123 Jasna 14032002 234 Maja 28122001 234 Denis 17102004 234 Irma 03012002