Recovery (helyreállítás) feladatok gyakorlatra PPKE-ITK, Database Systems, 2010.
Database Systems – Recovery (gyakorlat) Előadás tananyagból: Adatbázis kezelő tulajdonságai Adatbázis hibák, kezelés Tárolás Naplózás – jelölések Tranzakciók lefutása – késleltett naplózási technikával REDO-zás Checkpointok UNDO-zás Azonnali naplózási technika: UNDO+REDO Database Systems – Recovery (gyakorlat) 2
Tranzakciók REDO/Késleltetett csak UNDO UNDO+REDO T1 T2 T3 LOG DB T1 csatl. <T1, START> read(A) A:=A-50 write(A) <T1, A, 950> <T1, A, 1000> <T1, A, 1000, 950> upd: A=950 T2 csatl. <T2, START> read( C ) C:=C+100 read(B) B:=B+50 write(B)* <T1, B, 2050> <T1, B, 2000> <T1, B, 2000, 2050> upd: B=2050 T1 bef. <T1, COMMIT> save log upd: A=950 B=2050 T3 csatl. <T3, START> CheckPoint <CHECKPOINT, L=[T2, T3]> write(C)* <T2, C, 600> <T2, C, 500> <T2, C, 500, 600> upd: C=600 B:=B-1250 write(B) <T3, B, 800> <T3, B, 2050> <T3, B, 2050, 800> upd: B=800 T2 bef. <T2, COMMIT> T3 bef. <T3, COMMIT> Kezdőértékek: A==1000 B==2000 C==500 Database Systems – Recovery (gyakorlat) 3
Database Systems – Recovery (gyakorlat) Feladat 1 Állítsuk helyre az egyes naplók szerint, ha a CRASH a „T3 bef.” előtt éri a rendszert (vastag vonalnál)! csak REDO: elindulunk a végétől, T2-t fölvesszük a listába, elértünk a ChP-ig, ott csak T2 van az aktív listán, ami eddig commitált, így csak a T2 startját keressük, megvan, visszafordulunk, a T2 összes műveletét újra végrehajtjuk (<T2, C, 600>). csak UNDO: elindulunk a végéről, T2 bekerül a Commit-listába, T3-nak nem volt commitja, ezért ezt újra végrehajtjuk: beírjuk a régi (B=2050) értéket vakon. A ChP-tól csak a T3-at undozzuk tovább, nincs is mit. REDO+UNDO: elindulunk a végéről. T2 a REDO-listába. ChP-ig nem volt START, de a T2 és a T3 START-jáig el kell jutni. T3 START megvan, T3: UNDO-listába. T2 START megvan, T2: a WAIT-listába (bár itt nem sok értelme van). UNDO-lista: T3 OldValue értékeit visszaírjuk. WAIT-lista: T2: NewValue értékeit visszaírjuk. Database Systems – Recovery (gyakorlat) 4
Database Systems – Recovery (gyakorlat) Feladat 2 F: Helyreállítás menete azonnali technikával: Aktív lista UNDO-lista REDO-lista recovery sorrend (késleltetett technikával csak REDO-zás van) A LogFile vizsgálatát a T0 kezdetéig vesszük, a CheckPointnál ő a legöregebb T1 a CheckPoint előtt commitált, így nem kell vele foglalkoznunk. L = [active-list] = T4, T3, T2, T0 Helyreállítás: (azonnali technikánál – a késleltetettnél csak REDO-zás van!) 1. végéről vissza: UNDO-lista: T7, T6, T4 REDO-lista: T0, T2, T3, T5 2. UNDO-zás a végétől 3. REDO-zás az elejétől Database Systems – Recovery (gyakorlat) 5
Database Systems – Recovery (gyakorlat) Feladat 3 1 <T6, START> 2 <T6, A, 500, 370> 3 <CHECKPOINT, [T6]> 4 <T7, START> 5 <T7, C, 410, 85> 6 <T6, B, 400, 90> 7 <T6, COMMIT> 8 <T7, A, 370, 250> 9 <T8, START> 10 <T7, COMMIT> 11 <T8, B, 90, 800> 12 <T8, COMMIT> a) Milyen technikával készült az alábbi LogFile? b) Add meg a kezdeti értékeket! c) Rajzold le az idő függvényében a tranzakciók lefutását, jelölve a CheckPointot! d) Hogyan állítod helyre, ha hiba lép fel az 1-2 / 3-4 / 5-6 / stb. sorok közzött? e) Írd át egy másik technikára és válaszolj ugyanezekre a kérdésekre! a) immediate modification log b) A=500, B=400, C=410 c) d) Pl. 5-6 sor közti Failure undo(T8) undo(T7) undo(T6) és nincs redo mert még egyik sem committált. e) Pl. késletetett: csak redo Database Systems – Recovery (gyakorlat) 6
Database Systems – Recovery (gyakorlat) Feladat 4 A system reboots after a crash and finds the following database and UNDO log state: DB(A:10, B:10) LOG(<T1,start>, <T2,start>, <T1, A, 5>, <T1, commit>, <T2, B, 5>, <T2, A, 15> CRASH) 1. What was the initial state of the system before T1 and T2 began executing? 2. What will be the state after the recovery? 3. Repeat questions (1) and (2) assuming it is a REDO log. Database Systems – Recovery (gyakorlat) 7