Kezdőlap     AB2ea     AB2gyak (főmenü)     9.gyak      11.gyak   

10.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)
> C6. Konzisztencia, triggerek, naplózás
   
9.EA: Naplózás és helyreállítás, ellenőrzőpont működés közben, helyrehozó
(Redo) naplózás, semmiségi/helyrehozó (Undo/Redo) naplózás, archiválás,
az Oracle naplózási/helyreállítási megoldásai: naplo.ppt (KA) 73-127 oldal
   
Az előadás anyagához kapcsolódó példák és feladatok: 
- Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, Panem, 2001.
  8.fejezet: A rendszerhibák kezelése, naplózás és helyreállítás (papíros feladatok)
 
P5. Feladatok redo és undo/redo naplózásra és helyreállításra
 
Feladatok - 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 előadások >> naplo.ppt
 

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)
Adjuk meg a 8.1.1. feladatban szereplő tranzakciók helyreállítási (REDO) típusú
naplóbejegyzéseit. Tegyük fel, hogy kezdetben A = 5 és B = 10.
 
8.3.3. Feladat - Helyreállítás REDO naplóból, hasonló példa: naplo.ppt (80-82.oldal)
Ismételjük meg a 8.2.4. feladatot REDO naplózást használva.
 
8.3.5. Feladat - REDO naplózás ellenőrzőponttal, hasonló példa: naplo.ppt (84-91.oldal) 
A 8.2.7. feladat adatait használva 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)
Adjuk meg a 8.1.1 feladatban szereplő tranzakciók undo/redo típusú naplóbejegyzéseit.
Tegyük fel, hogy kezdetben A = 5 és B = 10.
 
8.4.3. Feladat - Helyreállítás UNDO/REDO naplóból, hasonló példa: naplo.ppt (96-101.oldal)
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)
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>.
 
Mindegyik fenti esetre 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. Feladatok triggerekre
   
SEGÉDANYAGOK: ZH-n is használható SQL, PL/SQL Ref.
A ZH-n a tűzfalon keresztül is elérhető és használható a dokumentáció:
http://medusa.inf.elte.hu/ tanszéki honlapon alul Oracle linken található
Online documentation for Oracle 11g R2 bal oldali menüből kiválasztva
a harmadik sorban  Database Administration és itt a harmadik dobozban:
SQL, PL/SQL, and PL/SQL Packages       
SQL Language Reference
SQL Language Quick Reference
PL/SQL Language Reference
PL/SQL Packages and Types Reference  
HTML   PDF
HTML   PDF
HTML   PDF
HTML   PDF   
-- PL/SQL Language Reference 11gR2 >> 9.fej. Triggers
   
További segédanyagok a PL/SQL-hez:
- Adatbázisok 1 előadás: Triggerek.pdf, + triggerek.txt, trigger_peldak.txt
- Cinkóczki László, Oracle Junior, 2012. márc.8-i ea: PL/SQL
- Ullman/Chang (Standford) Using Oracle PL/SQL
- Ullman/Chang (Standford) Using Oracle PL/SQL
- Ullman/Chang (Standford) Constraints and Triggers
- PL/SQL Technology Center (Oracle 11g PL/SQL)
     
-- -- -- -- --
Gyakorló feladatok az Oracle Példatárból  -- Ehhez: cr_dept_emp.sql
Lásd Példatár "10.fejezet. Kivételkezelés, alprogramok, triggerek" feladatai
   
a_trigger.sql - triggerek
-   Hozzunk létre BEFORE triggert, amely megakadályozza a munkaidőn
     kívüli adatmanipulációkat az emp táblán! Írassuk ki, milyen műveleteket
     kíséreltek meg végrehajtani munkaidőn kívül!
     
b_triggerek.sql - triggerek
-  Írjunk triggert (és ellenőrizzük is a működését), amely megakadályozza
    az elnökre (president) vonatkozó törlő, beszúró és adatmódosító
    DML utasítások működését! (a tesztelő script programban a hivatkozási
    megszorítás felfüggesztése illetve a végén az újbóli engedélyeztetése)
   
-- -- -- -- --
Feladatok: Az alábbi feladatokhoz hozzunk létre az emp, dept és salgrade
tábláknak megfelelő magyar nyelvű (de ékezet nélküli) oszlopnevekkel rendelkező
dolgozo, osztaly és fizufokozat táblákat különböző megszorításokkal együtt.
Az eredeti táblák felhasználásával töltsük fel a táblákat a megszorításoknak
eleget tevő adatsorokkal (megszorítások ellenőrzése: DBA_CONSTRAINTS)
-- Ehhez segítségképpen: create_dolg
   
6.1.feladat: Ehhez a saját DOLGOZO nevű táblához hozzunk létre
      egy TRIGGER_LOG nevű táblát, aminek a következő a szerkezete:
         ( idopont     DATE,
           muvelet     VARCHAR2(20),
           esemeny     VARCHAR2(80)
          )
   - Hozzunk létre egy (after) triggert, ami akkor aktivizálódik ha a dolgozo tábla
     fizetés oszlopát módosítják. A trigger a következő műveleteket végezze el:
   - Ha a dolgozo új fizetése nagyobb lesz mint 4000 akkor erről tegyen egy
      bejegyzést a trigger_log táblába. Az esemény oszlopba írja be a régi és
      az  új fizetést is.
   - Az elnök (foglalkozas = 'PRESIDENT') fizetését ne engedje módosítani.
     A módosítás után a fizetés maradjon a régi. Erről is tegyen egy bejegyzést
     a trigger_log táblába. Az esemény oszlopba írja be, hogy a fizetés nem változott.
   
6.2.feladat:
   - Hozzunk létre egy TRIGGER_LOG2 nevű táblát is, aminek a szerkezete
      a következő:
         ( idopont     DATE,
           muvelet     VARCHAR2(20),
           uj_osszfiz  NUMBER
          )
   - Hozzunk létre egy triggert, ami akkor aktivizálódik ha a dolgozo táblára
     valamilyen módosító műveletet (INSERT, DELETE, UPDATE)
     hajtanak végre. A trigger irja be a TRIGGER_LOG2 táblába
     a módosítás időpontját, a műveletet és az új összfizetést.
   - Ha az új összfizetés nagyobb lenne mint 40000, akkor a trigger utasítsa
     vissza a módosító műveletet, és hibaüzenetként küldje vissza, hogy
     'Túl nagy összfizetés'. Ez esetben naplóznia sem kell.
   
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára