AB2gyak (főmenü)    Gyak.köv.    AB2ea    10.gyak     12.gyak    OracleDoc 

11.gyak. Feladatok naplózásra és helyreállításra
   
P (papíros feladatok)
> P5. Feladatok REDO és REDO/UNDO naplózásra és helyreállításra
 
C (gépes feladatok)
> Dinamikus V$-nézetek (MSc-n bővebben)
   

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 med­dig 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.
   
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára  

C6. Dinamikus V$-nézetek (MSc-n bővebben)
    
Segédanyagok: InstanciaMan.pdf  + init_param.txt  + OracleDoc: Reference
Adjuk meg az alábbi információkat a tomx és ablinux adatbázisra vonatkozóan.
   
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ó?
       
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára