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 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)
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.
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
-- -- -- -- -- 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.