P5. Feladatok
redo és undo/redo naplózásra
és
helyreállításra Feladatok (Papíron
oldjuk meg!) - Molina-Ullman-Widom:
Adatbázisrendszerek
megvalósítása
a "zöld könyv" 8.fej. A
rendszerhibák
kezelése, naplózás
alapján. Segédanyagok: Kiss
Attila Adatbázisok-2 -> 9.előadás naplo.ppt(73-118.oldal)
Molina-Ullman
8.3. fejezete: Redo naplózás és
helyreállítás 8.3.1
Feladat
- REDO
naplóbejegyzések, hasonló
példa: naplo.ppt
(76.oldal)
-- EA alapján: REDO naplózás szabályai:
-- 1. naplóbejegyzések kiírása
-- 2. COMMIT naplóbejegyzés
kiírása
-- 3. módosított elemek kiírása
(-> a gond, hogy túl sokáig nem szabad lemezre
írni)
Adjuk meg a 8.1.1. feladatban szereplő T1: A := A + B; B := A + B;
tranzakcióhoz
tartozó számításokat és
beolvasó-kiíró
tevékenységeket, mutassuk be a
tranzakció
lépésenkénti
hatását a memóriában
és a lemezen tárolt adatokra. Tegyük
fel, hogy
kezdetben A = 5
és B = 10. Adjuk meg tranzakció REDO
típusú naplóbejegyzéseit!
8.3.3. Feladat
- Helyreállítás REDO
naplóból, hasonló
példa: naplo.ppt
(80-82.oldal)
-- Helyreállítás: A COMMIT-tal rendelkező
tranzakciók
műveleteit újból végrehajtani.
-- A be nem fejezett tranzakciókra <ABORT T>-t írni
a naplóba, FLUSH LOG
A következő naplóbejegyzés-sorozat a T
és U két tranzakcióra vonatkozik:
<START T>
<T, A, 10>
<START U>
<U, B, 20>
<T, C, 30>
<U, D, 40>
<COMMIT U>
<T, E, 50>
<COMMIT T>
--
Adjuk meg a helyreállítás-kezelő
tevékenységeit, ha az utolsó lemezre
került naplóbejegyzés:
a) <START U>
b) <COMMIT U>
c) <T, E, 50>
d) <COMMIT T>
8.3.5. Feladat
- REDO naplózás
ellenőrzőponttal, hasonló
példa: naplo.ppt
(84-91.oldal)
-- Ellenőrzőpont képzés (működés közbeni)
-- <START CKPT(T1, T2, ... Tk)> + FLUSH LOG
-- A START CKPT előtt befejeződött tranzakciók
még lemezre nem írt módosításainak
kiírása
-- <END CKPT> + FLUSH LOG
--
-- A helyreállításhoz elég a
legutóbbi <END CKPT> előtti <START CKPT(Ti)>
tranzakciói
-- közül a legkorábbinak a kezdetéig ->
<START Ti>-ig visszamenni.
--
Tegyük fel, hogy a napló a következő
bejegyzéssorozatot tartalmazza:
<START S>
<S,A,60>
<COMMIT S>
<START T>
<T,A,10>
<START U>
<U,B,20>
<T,C,30>
<START V>
<U,D,40>
<V,F,70>
<COMMIT U>
<T,E,50>
<COMMIT T>
<V,B,80>
<COMMIT V>.
--
Tegyük fel továbbá, hogy a
működés
közbeni ellenőrzőpont-képzést
kezdjük
alkalmazni,
közvetlenül az alábbi
naplóbejegyzések
(memóriában való)
megjelenésétől
kezdve:
a) <S,A,60>.
b) <T,A,10>.
c) <U,B,20>.
d) <U,D,40>.
e) <T,E,50>.
--
Az a)–e)
helyzetek
mindegyikére válaszoljuk meg az alábbi
kérdéseket:
i) Mely pontokban fordulhat elő az <END CKPT>
felírása, és
ii) Minden lehetséges hibabekövetkezési
ponthoz
adjuk meg, hogy a naplóban meddig kell
visszatekintenünk ahhoz, hogy
megtaláljuk az
összes befejezetlen tranzakciót.
Vegyük figyelembe mindkét
lehetőséget,
azt is, hogy a hibát megelőzően az
<END
CKPT> felíródott a
naplóba és azt is, ha nem.
Molina-Ullman
8.4. fejezete:
Undo/redo naplózás és
helyreállítás
8.4.1. Feladat
- UNDO/REDO
naplóbejegyzések, hasonló
példa: naplo.ppt
(92-95.oldal)
-- EA alapján: UNDO/REDO naplózás
szabályai:
-- először a naplózást írjuk ki, csak
utána magát a módosítást
-- (a COMMIT-ot kiírhatjuk a módosítások
kiírása előtt is vagy utána is)
Adjuk meg a 8.1.1. feladatban szereplő T1: A := A + B; B := A + B;
tranzakcióhoz
tartozó számításokat és
beolvasó-kiíró
tevékenységeket, mutassuk be a
tranzakció
lépésenkénti
hatását a memóriában
és a lemezen tárolt adatokra. Tegyük
fel, hogy
kezdetben A = 5
és B = 10. Adjuk meg az UNDO/REDO
típusú naplóbejegyzéseket!
8.4.3.
Feladat
- Helyreállítás UNDO/REDO
naplóból, hasonló
példa: naplo.ppt
(96-101.oldal)
-- Helyreállítás:
-- A COMMIT-tal nem rendelkező tranzakciókat UNDO-zzuk, majd a
naplóba <ABORT T>
-- A COMMIT-tal rendelkező tranzakciókat REDO-zzuk.
A következő UNDO/REDO
naplóbejegyzés-sorozat a T és U
két tranzakcióra vonatkozik:
<START T>
<T, A, 10, 11>
<START U>
<U, B, 20, 21>
<T, C, 30, 31>
<U, D, 40, 41>
<COMMIT U>
<T, E, 50, 51>
<COMMIT T>
--
Adjuk meg a helyreállítás-kezelő
tevékenységeit, ha az utolsó lemezre
került naplóbejegyzés:
a) <START U>
b) <COMMIT U>
c) <T, E, 50, 51>
d) <COMMIT T>
8.4.5. Feladat
- UNDO/REDO naplózás
ellenőrzőponttal, hasonló példa: naplo.ppt
(102-107.oldal)
-- Ellenőrzőpont képzés
-- <START CKPT(T1, T2, ... Tk)> + FLUSH LOG
-- Az összes piszkos puffer lemezre írása
-- <END CKPT> + FLUSH LOG
--
-- A helyreállításhoz elég a
legutóbbi <END CKPT> előtti <START CKPT(Ti)>
tranzakciói közül
-- a legkorábbinak a kezdetéig -> <START Ti>-ig
visszamenni. Az UNDO műveleteket az iménti
-- bejegyzésig visszamenve kell végrehajtani, a REDO
műveleteket azonban elég a
-- <START CKPT(Ti)>-től előrefelé haladva (lásd
naplo.ppt 104-106 old.)
--
-- Ha visszafelé haladva <START CKPT(Ti)> -vel
találkozunk előbb azt figyelmen kívül hagyjuk,
-- és keressük visszafelé a legutóbbi <END
CKPT>-t.
--
Tegyük fel, hogy a napló a következő
bejegyzéssorozatot tartalmazza:
<START S>
<S,A,60,61>
<COMMIT S>
<START T>
<T,A,61,62>
<START U>
<U,B,20,21>
<T,C,30,31>
<START V>
<U,D,40,41>
<V,F,70,71>
<COMMIT U>
<T,E,50,51>
<COMMIT T>
<V,B,21,22>
<COMMIT V>.
--
Tegyük fel továbbá, hogy a
működés
közbeni ellenőrzőpont-képzést
kezdjük
alkalmazni,
közvetlenül az alábbi
bejegyzések
(memóriában való)
megjelenésétől
kezdve:
a) <S,A,60,61>.
b) <T,A,61,62>.
c) <U,B,20,21>.
d) <U,D,40,41>.
e) <T,E,50,51>.
--
A fenti a)-e) esetekre adjuk meg, hogy:
i) Mikor írható fel az <END
CKPT>
naplóbejegyzés, és
ii) Bármelyik lehetséges pillanatban, ha hiba
lép
fel, meddig kell a naplóban visszafelé tekinteni
ahhoz, hogy minden, be nem fejezett tranzakciókra
vonatkozó bejegyzést megtaláljunk.
Fontoljuk meg mindkét lehetőséget is, hogy a hiba
az
<END CKPT> naplóbejegyzés
felírása
előtt vagy az után jelentkezik.
5.01. Adjuk meg, hogy mikor indult el a jelenleg futó
instancia.
5.02. Az instancia elindulása óta hány
felhasználói bejelentkezés
történt a
rendszerbe?
Hány
tranzakciót hagytak jóvá (commit) es
hányat vontak vissza (rollback) ?
(V$SYSSTAT)
5.03. Mely háttérfolyamatok futnak jelenleg az
alábbiak közül?
(ARC0, DBW0,
PMON, SMON, FMON, LMON)
5.04. Mekkora a log puffer mérete?
Mekkora a shared
pool mérete?
5.05. Maximum hány nyitott kurzort tarthatnak fenn az egyes
sessionok?
Mekkora lehet
maximálisan az SGA terület mérete a
jelenleg futó instanciánál?
Hány
konkurrens tranzakció futását engedi
meg egyidejüleg az adatbáziskezelő?
(V$PARAMETER)
5.06. Kik vannak jelen pillanatban bejelentkezve az
adatbázis-kezelőbe?
Melyik
felhasznaló van legrégebben bejelentkezve
és hány másodperce?
Kik azok, akik
SQL Developer programmal jelentkeztek be?
5.07. Mi a tomx gépen levő adatbázis neve es
mikor lett
létrehozva?
5.08. Melyik adatfájlra vonatkozóan
történt a legtöbb
blokk-olvasási
müvelet
(PHYBLKRD oszlop) az instancia elindulása óta?
5.09. Melyek az adatbázishoz tartozó log
fájlok?
Melyik az amelybe
jelenleg is ír a rendszer?
Melyek az
adatbazishoz tartozo control fájlok?
5.10. A jelenleg telepített adatbázisban
hasznalható-e a
Particionálási opció,
a Bitmap index
opció illetve a Real Application Clusters opció?