VI.
Témakör: Feladatok
tranzakciókezelésre
[Az V.
és a VI.
Témakört párhuzamosan dolgozzuk fel! ]
7.gyak. - Oracle
rendszergazda feladatai
(2010.márc.25)
>> 6.1.
Adatbázisok biztonsága és
felhasználói jogosultságok
8.gyak. - Oracle
naplózási
és archiválási rendszere
(2010.ápr.8)
>> 6.2.
Oracle
naplózási és
archiválási rendszere
9.gyak.
- Naplózás,
helyreállítás (zöld
könyv feladatai) (2010.ápr.15)
>> 6.3.
Feladatok
undo és redo
naplózásra és
helyreállításra
10.gyak.
- Oracle konkurenciavezérlési
technikája
(2010.ápr.22)
>> 6.4.
Az Oracle
konkurenciavezérlési technikája
11.gyak.
- Konkurenciavezérlés, zárak
(zöld
könyv feladatai) (2010.ápr.29)
>> 6.5.
Feladatok sorolhatóságra és
zárakra
2.ZH (12.gyak - 2010.máj.6.)
_______________________________________________________
7.
gyak. - Oracle rendszergazda
feladatai
6.1.
Adatbázisok biztonsága és
felhasználói jogosultságok
Segédanyagok:
>> Oracle Online Documentation -
Administrator's Guide: HTML
PDF
>> Nikovits Tibor összefoglalói: constraint.txt
kulsojoin.txt
jogosultsagok.txt
Feladatok - Nikovits
Tibor
Információkezelés gyakorlatai
alapján
SQL DCL (Data Control Language)
61dcl_1
- Táblák
és megszorítások
(constraints) létrehozása.
- Az alábbi
feladatokhoz hozzunk létre az emp és
dept tábláknak megfelelő magyar
nyelvű (de ékezet
nélküli) oszlopnevekkel rendelkező
dolgozo és osztaly
táblákat
különböző
megszorításokkal
együtt, lásd constraint.txt.
- Töltsük fel a
táblákat
a megszorításoknak
eleget tevő adatsorokkal.
Ellenőrizzük le a DBA_CONSTRAINTS
katalógusban a megszorításokat.
61dcl_2
- Nézettáblák
létrehozása.
Hozzunk
létre
egy táblán illetve két
tábla természetes
összekapcsolásán illetve
(baloldali, jobboldali,
teljes) külső
összekapcsolásán alapuló
nézettáblákat.
Figyeljük meg,
hogyan hatnak az eredeti táblán
végrehajtott
módosítások
a létrehozott
nézettábláinkon, és
fordítva, mi
történik az eredeti
táblánkon,
ha a
különböző nézeteket
módosítjuk.
- Például hozzunk
létre
egy nézettáblát, amelyik
osztályonként az összfizetést
és a dolgozók
számát tartalmazza.
- Keressük elő a megfelelő
rendszertáblából a
nézettáblát
létrehozó utasítás
SQL
"forrás
szövegét". (DBA_VIEWS)
61dcl_3
- Külső
join.
- Hozzunk létre egy
nézettáblát, amely tartalmazza a
dolgozó nevét, fizetését,
az
osztály nevét és
telephelyét. Azok az osztályok is jelenjenek meg,
amelyeken
még nem dolgozik
senki. Az ilyen osztályokra a dolgozó neve
oszlopban az
jelenjen meg, hogy 'FELVETEL ALATT',
a fizetés oszlopban pedig
az alapértelmezés szerinti
kezdő fizetés, ami 1500. Próbáld ki a
külső
join
mindkét
szintaxisával (+) illetve OUTER JOIN,lásd kulsojoin.txt.
61dcl_4
- Jogosultságok
megadása és visszavonása.
GRANT,
REVOKE
Adjunk
különböző jogosultságokat a fenti
nézettábláinkhoz,
lásd jogosultsagok.txt.
61dcl_5
- Erőforrások
korlátok, jogosultságok.
- a.) Hány SQL
ablakot
(sessiont) tudtok egyszerre megnyitni?
- b.) Mennyi a számotokra
engedélyezett maximális
kapcsolódási idő?
- c.) Hány sikertelen
bejelentkezést enged az adatbáziskezelő a
számotokra?
_______________________________________________________
8.
gyak. - Oracle naplózási és
archiválási rendszere
6.2.
Az Oracle naplózási és
archiválási rendszere
Segédanyagok:
>> Az Oracle naplózási
és archiválási rendszere: ORA_Naplozas.pdf
(jelszóval)
>> Oracle Online Documentation -
Administrator's Guide: HTML
PDF
>> Nikovits Tibor összefoglalói: triggerek.txt
trigger_peldak.txt
instancia.txt
instancia_inditas.txt
inic_param.txt
Feladatok - Nikovits Tibor
Információkezelés gyakorlatai
alapján
62log_1
- Az előző feladatban
létrehozott
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 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.
(TIPP: after trigger)
62log_2
- Hozzatok 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.
62log_3
- folyt.köv. lásd 6.4.
Az Oracle
konkurenciavezérlési technikája
utolsó feladata.
_______________________________________________________
9.
gyak. - Naplózás,
helyreállítás
(zöld könyv feladatai)
6.3.
Feladatok
undo és redo naplózásra és
helyreállításra
Segédanyagok:
>> Molina-Ullman-Widom: Adatbázisrendszerek
megvalósítása,
Panem, 2001.
8.fejezet: A
rendszerhibák kezelése
fejezet feladatai
>> Előadásból: 2MU08_Naplo_gyak.pdf
NAPLÓZÁS PÉLDÁK
összefoglaló (jelszóval)
Feladatok -
(Molina-Ullman-Widom)
"zöld tankönyv" 8.1-8.4 fejezetek
végén
Molina-Ullman 8. fejezete: A rendszerhibák
kezelése
8.1.1. Feladat
- A tranzakciók korrekt
végrehajtása
Tegyük fel, hogy az adatbázisra
vonatkozó konzisztenciamegszorítás: 0
<= A <= B.
Állapítsuk meg, hogy a következő
tranzakciók megőrzik-e az adatbázis
konzisztenciáját.
T1: A := A + B; B := A + B;
T2: B := A + B; A := A + B;
T3: A := B + 1; B := A + 1;
8.1.2. Feladat
- A tranzakciók
alaptevékenységei
(Adjuk meg néhány, konkrét művelettel
megadott tranzakció esetén az
adatbáziselemek
memóriabeli és lemezen levő
értékét az
egyes műveletek után.)
A 8.1.1 feladat mindegyik tranzakciójához a
számításokon kívül
tegyük hozzá a
beolvasó-kiíró
tevékenységeket is, és mutassuk be a
tranzakciók 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.
Molina-Ullman 8.2. fejezete: Undo
naplózás
8.2.1. Feladat
- UNDO naplóbejegyzések
Adjuk meg a 8.1.1 feladatban szereplő tranzakciók UNDO
naplóbejegyzéseit.
Tegyük fel, hogy kezdetben A = 5 és B = 10.
8.2.2. Feladat
- UNDO naplózás szabályai
(tevékenységek és
naplóbejegyzéseik)
Az alábbi naplóbejegyzés-sorozatok
valamely T
tranzakció tevékenységeit
tükrözik.
Állapítsa meg az
UNDO naplózás
szabályainak megfelelően
a
naplóbejegyzések és
az adatbáziselemeket tartalmazó blokkok lemezre
írási lehetőségeit,
figyelembe véve,
hogy
naplóbejegyzést nem lehet addig a lemezre
írni,
amíg a megelőző bejegyzés
nem került
lemezre.
a)
<START
T>
<T,A,10>
<T,B,20>
<COMMIT T>;
b)
<START T>
<T,A,10>
<T,B,20>
<T,C,30>
<COMMIT T>
8.2.4. Feladat
- Helyreállítás UNDO
naplózás
használatával
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.2.7. Feladat
- UNDO naplózás ellenőrzőponttal
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>.
Mindegyik fenti esetre adjuk meg, hogy:
i) Mikor íródik 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 befejezetlen
tranzakciókra
vonatkozó bejegyzést megtaláljunk.
Molina-Ullman
8.3. fejezete: Redo naplózás
8.3.1 Feladat
- REDO naplóbejegyzések
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.2. Feladat
- REDO naplózás szabályai
(tevékenységek és
naplóbejegyzéseik)
Ismételjük meg a 8.2.2. feladatot REDO
naplózást
használva.
8.3.3. Feladat
- Helyreállítás REDO
naplózás
használatával
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
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
8.4.1. Feladat
- UNDO/REDO naplóbejegyzések
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.2. Feladat
- UNDO/REDO naplózás szabályai
(tevékenységek és
naplóbejegyzéseik)
Az alábbi naplóbejegyzés-sorozatok
valamely T
tranzakció tevékenységeit
tükrözik.
Állapítsuk meg az UNDO/REDO
naplózás
szabályainak megfelelően a
naplóbejegyzések
és
az adatbáziselemeket tartalmazó blokkok lemezre
írási lehetőségeit, figyelembe
véve, hogy
naplóbejegyzést nem lehet addig a lemezre
írni,
amíg a megelőző bejegyzés nem került
lemezre.
a)
<START T>
<T,A,10,11>
<T,B,20,21>
<COMMIT T>;
b)
<START T>
<T,A,10,21>
<T,B,20,21>
<T,C,30,31>
<COMMIT T>
8.4.3. Feladat
- Helyreállítás UNDO/REDO
naplózás
használatával
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
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.
További
gyakorló feladat (ellenőrzésként
a megoldás: itt)
Itt látható egy napló, melyet az
UNDO/REDO
protokoll szerint képeztünk.
Állítsuk vissza a konzisztens helyzetet!
(T1, BEGIN)
(T1; A; 4; 5)
(T2, BEGIN)
(T1, COMMIT)
(T2; B; 9; 10)
(START CHECKPOINT (T2))
(T2; C; 14; 15)
(T3, BEGIN)
(T3; D; 19; 20)
(T3; A; 5; 6)
(T3; E; 10; 15)
(T4, BEGIN)
(T4; F; 15; 16)
(END CHECKPOINT)
(T2, COMMIT)
HIBA
_______________________________________________________
10.
gyak. - Oracle
konkurenciavezérlési
technikája
6.4.
Az Oracle konkurenciavezérlési
technikája
Segédanyagok:
>> Az Oracle konkurenciavezérlési
technikája: ORA_Zarolas.pdf
(jelszóval)
>> Oracle Online Documentation -
Administrator's Guide: HTML
PDF
>> Nikovits Tibor összefoglalói: tranzakciok.txt
tranz_peldak.txt
lek_dinam_nez.txt dinam_nezetek.txt
zarolasok.txt
autonom_tranz.txt
Feladatok - Nikovits
Tibor
Információkezelés gyakorlatai
alapján
lásd tranz_peldak.txt (megoldásokkal)
64konk_1
- Tranzakció-kezelés
alapjai. COMMIT,
ROLLBACK,SAVEPOINT
- Nyissunk meg egyszerre két SQLPLUS
ablakot (vagy sqldevelopert),
tiltsuk le az automatikus commit-ot
(SET
AUTOCOMMIT OFF)
és
végezzünk olvasó
és
módosító műveleteket a két
ablakból felváltva.
Az előző 61dcl_2 feladatban
létrehozott
táblákat és nézeteket
használjuk.
- Az aktív tranzakciók
futása
közben adjuk meg a rendszerkatalógusok
alapján
a következő
információkat a
saját magunk által futtatott
tranzakciókról.
(Lásd az alábbi
feladatokat itt is: tranz_peldak.txt,
megoldásokkal)
- Melyek az aktiv tranzakciók, mikor
indultak el,
és ki futtatja azokat?
- A tranzakció melyik
utasítást futtatja éppen?
64konk_2
- Melyik rollback szegmenst
használják
épp az aktív tranzakciók?
- Melyik adatfájlba
írják a
tranzakciók a rollback blokkjaikat?
64konk_3
- Holtpont
kipróbálása
- Adjunk meg két
utasítássorozatot a
két ablakban úgy, hogy DEADLOCK alakuljon ki.
(Lásd
például itt is: tranz_peldak.txt,
megoldásokkal)
64konk_4
- Az
Oracle
tranzakcióelkülönítési
szintjei
- Adjunk meg két
utasítássorozatot a
két ablakban úgy, hogy az egyik ablak
a következő
hibaüzenetet kapja:
"ORA-08177: Cannot serialize access for
this transaction"
(Tipp: SET TRANSACTION
ISOLATION
LEVEL SERIALIZABLE;)
64konk_5
- Zárolások
megnézése
- Melyik session milyen
típusú (sor->TX,
tabla->TM) és milyen módú
zárolást tart
fenn éppen? (RS->2, RX->3, S->4,
SRX->5, X->6)
(SID,
USERNAME,
TYPE, LMODE)
64konk_6
- Melyik session vár épp egy
zárolásra
(SID,
USERNAME,
TYPE,
LMODE, REQUEST),
illetve melyik zárolasra
vár épp
valaki
(SID,
USERNAME,
TYPE,
LMODE, BLOCK)?
64konk_7
- Milyen régen tartja fenn a rendszer a
zárolasokat, illetve
milyen
régen vár valaki egy
zárolásra?
(SID,
USERNAME,
TYPE,
LMODE, CTIME, REQUEST)
64konk_8
- Mely objektumokat tartja
zárolás alatt valamelyik session jelen
pillanatban?
64konk_9
- Derítsük ki (megfelelő
manuális
lock-oló utasítások
segítségével), hogy a
Row Exclusive (RX)
módú
zárolást milyen módú
zárolásokkal egyidejűleg
engedélyezi a rendszer,
és mely
módú zárolások
esetén kell várnia a
későbbi
kérelmezőnek.
62log_3
- Az előző heti utolsó feladat
módosítása, most a
trigger akkor is
naplózzon,
ha
a túl nagy összfizetés
miatt visszautasítja a
módosító
műveletet.
(TIPP: autonóm
tranzakció, lásd autonom_tranz.txt)
_______________________________________________________
11.
gyak. - Konkurenciavezérlés,
zárak
(zöld könyv feladatai)
6.5.
Feladatok sorolhatóságra
és
zárakra
Segédanyagok:
>> Molina-Ullman-Widom: Adatbázisrendszerek
megvalósítása,
Panem, 2001.
Konkurenciavezérlés
fejezet feladatai
Feladatok -
(Molina-Ullman-Widom
tankönyv) 9.1-9.9 és 10.3 fejezetek
végén
További
példák
(feladatok - megoldással) a
tranzakciókezelésre
>> 2MU09f_Konkvez_feladatok.pdf
(Kiss Attila, ELTE)
>> ppea25.pdf
(Katona Gyula, BME)
Molina-Ullman 9.1. fejezete: Soros és
sorolható ütemezések
9.1.2 Feladat
(ehhez
hasonló)
Adott az alábbi három tranzakció.
Adjuk meg az X adatbáziselem lehetséges
értékeit a tranzakciók
lefutása után, feltéve, hogy a
tranzakciók ütemezése soros,
és X kezdeti értéke 100.
T1: READ(X,t); t:=t+100; WRITE(X,t);
T2: READ(X,t); t:=t*2; WRITE(X,t);
T3: READ(X,t); t:=t+10; WRITE(X,t);
a.) Hányféle soros ütemezése
van
a fenti 3 tranzakciónak?
b.) Hányféle különböző
ütemezése van a fenti 3 tranzakciónak?
Molina-Ullman 9.2. fejezete: Konfliktus
sorolhatóság
9.2.1 Feladat
Adott az alábbi két
tranzakció.
T1: READ(A,t); t:=t+2; WRITE(A,t); READ(B,t); t:=t*3; WRITE(B,t);
T2: READ(B,s); s:=s*2; WRITE(B,s); READ(A,s); s:=s+3; WRITE(A,s);
a.) Igazoljuk, hogy a (T1,T2) és (T2,T1) soros
ütemezések ekvivalensek,
vagyis az adatbázison
való
hatásuk azonos. A két tranzakció
hatását
tetszőleges A=a és B=b
kezdeti
adatbázis-állapotból
vizsgáljuk meg!
b.) Adjunk példát a fenti műveletek
sorolható és nem sorolható
ütemezésére is.
9.2.2 Feladat
Az előző feladat tranzakcióiban csak az
írási és olvasási
műveleteket jelölve
a következő két tranzakciót kapjuk:
T1: R1(A); W1(A); R1(B); W1(B);
T2: R2(B); W2(B); R2(A); W2(A);
A fenti 8 művelet ütemezései
közül hány darab konfliktusekvivalens
a (T1,T2) soros sorrenddel?
9.2.3 Feladat
Adjuk meg a konfliktus-sorolható
ütemezések
számát az
alábbi tranzakciókra:
T1: R1(A); W1(A); R1(B); W1(B);
T2: R2(A); W2(A); R2(B); W2(B);
9.2.4 Feladat
Adjuk meg az alábbi ütemezések
megelőzési gráfját.
Állapítsuk meg,
hogy konfliktus-sorolható-e az ütemezés?
Ha
igen, akkor
melyek az ekvivalens soros ütemezések?
Válasszunk ki egyet
és
alakítsuk át konfliktus-mentes
cserékkel
az ütemezést a
kiválasztott soros
ütemezéssé:
a.) R1(A); R2(A); R3(B); W1(A); R2(C); R2(B); W2(B); W1(C);
b.) R1(A); R2(A); W1(B); W2(B); R1(B); R2(B); W2(C); W1(D);
c.) R1(A); R2(A); R1(B); R2(B); R3(A); R4(B); W1(A); W2(B);
Molina-Ullman 9.3. fejezete: A
sorolhatóság biztosítása
zárakkal
9.3.2 Feladat
T1: l1(A); R1(A); W1(A); l1(B); R1(B); W1(B); u1(A); u1(B);
T2: l2(B); R2(B); W2(B); l2(A); R2(A); W2(A); u2(B); u2(A);
a.) Kétfázisú-e a fenti két
tranzakció?
b.) Hány jogszerű ütemezést tudunk
készíteni a fenti tranzakciók
írási
és olvasási
műveleteiből?
9.3.4 Feladat
Tekintsük a következő, két műveletből
álló tranzakciót: r1(A), w1(B),
valamint a szükséges l1(A), u1(A), l1(B), u1(B)
zárkezelő műveleteket.
Adjuk meg, hogy a műveleteknek hányféle
lehetséges sorrendje lehet úgy,
hogy a tranzakció
a) konzisztens legyen
b) konzisztens de nem kétfázisú legyen
c) konzisztens és kétfázisú
legyen
d) kétfázisú legyen
e) se nem konzisztens, se nem
kétfázisú legyen
Molina-Ullman 9.4. fejezete: Osztott és
kizárólagos zárak
9.4.1 Feladat
A T1, T2 és T3 tranzakciók minden
alábbi
ütemezésére:
a) r1(A); r2(B); r3(C); w1(B); w2(C); w3(D);
b) r1(A); r2(B); r3(C); w1(B); w2(C); w3(A);
c) r1(A); r2(B); r3(C); r1(B); r2(C); r3(D); w1(C); w2(D); w3(E);
d) r1(A); r2(B); r3(C); r1(B); r2(C); r3(D); w1(A); w2(B); w3(C);
e) r1(A); r2(B); r3(C); r1(B); r2(C); r3(A); w1(A); w2(B); w3(C);
Végezzük el a következőket:
i) Illesszük be az osztott és a
kizárólagos
zárakat, és illesszük be a
zárak
feloldási
műveleteit! Helyezzünk osztott zárat
közvetlenül minden olyan olvasási művelet
elé,
amelyik után nem következik ugyanannak a
tranzakciónak ugyanarra az elemre való
írási művelete! Helyezzünk
kizárólagos
zárat minden más olvasási
és
írási művelet elé!
Helyezzük el minden tranzakció
végére a
szükséges
zárfeloldásokat!
ii) Adjuk meg mi történik, amikor minden
ütemezést osztott és
kizárólagos
zárakat
támogató ütemező futtat!
iii) Illesszük be az osztott és
kizárólagos
zárakat oly módon, amely lehetővé
teszi
a felminősítést. Helyezzünk osztott
zárat
minden olvasás elé, és
kizárólagos
zárat
minden írás elé, és
helyezzük el a
szükséges zárfeloldásokat a
tranzakciók végére.
iv) Adjuk meg mi történik, amikor az
iii)-ból minden
ütemezést osztott,
kizárólagos
zárakat és felminősítést
támogató ütemező futtat.
v) Illesszük be az osztott, kizárólagos
és
módosítási zárakat a
feloldási műveletekkel
együtt. Helyezzünk osztott zárat
minden
olyan
olvasási művelet elé, amelyiket
nem fogunk felminősíteni, helyezzünk
módosítási zárat minden
olyan
olvasási művelet
elé, amelyeket felminősítünk,
és
helyezzünk kizárólagos zárat
minden
írási művelet elé!
Helyezzük el a zárfeloldásokat
a
tranzakciók végére, mint rendszerint!
vi) Adjuk meg mi történik, amikor az v)-ből minden
ütemezést osztott,
kizárólagos és
módosítási zárakat
támogató
ütemező futtat!
9.4.7 Feladat
Az alábbi ütemezésből egy művelet
hiányzik a
kérdőjelek helyén:
R1(A); R2(B); ???; W1(C); W2(A);
a) Adjunk meg egy olyan olvasási műveletet ide, amely
esetén az ütemezés nem
sorolható.
b) Adjunk meg egy olyan írási műveletet ide,
amely
esetén az ütemezés nem
sorolható.
További feladatok
Rajzoljuk fel a következő ütemezéshez
tartozó várakozási gráfot a
7., és 9. lépés után.
l1(A); l2(B); l3(C); l1(D); l2(A); l3(D); l3(B); u1(A); l2(C); ...
Rajzoljuk fel a következő ütemezéshez
tartozó várakozási gráfot a
10. lépés után (S/X modell).
rl1(A); wl2(B); wl3(C); wl3(D); rl1(B); wl4(C); rl2(D); rl4(A); rl1(D);
u3(D); ...
Molina-Ullman 10.3. fejezete: Holtpontkezelés
10.3.1 Feladat
Tegyük fel, hogy az alábbi műveletsorozatokban
minden egyes
olvasás illetve
írásműveletet közvetlenül
megelőzi az osztott, illetve
kizárólagos zár
igénylése.
Tegyük fel továbbá, hogy a
zárak
feloldása rögtön a
tranzakció
utolsó művelete
után történik meg. Adjuk meg
azokat a műveleteket, amelyeknek a
végrehajtását
az ütemező megtagadja, és mondjuk meg, hogy
létrejön-e holtpont
vagy sem!
Adjuk meg, hogy hogyan alakul a műveletek
végrehajtása
során
a várakozási gráf!
Ha holtpont jön létre, akkor
szakítsuk meg (abort) az egyik
tranzakciót, és
mutassuk meg hogyan folytatódik a műveletsorozat!
a) r1(A); r2(B); w1(C); r3(D); r4(E); w3(B); w2(C); w4(A); w1(D);
b) r1(A); r2(B); r3(C); w1(B); w2(C); w3(D);
c) r1(A); r2(B); r3(C); w1(B); w2(C); w3(A);
d) r1(A); r2(B); w1(C); w2(D); r3(C); w1(B); w4(D); w2(A);
Molina-Ullman további 9.6-9.9. fejezetei a
konkurenciavezérlésről
9.6.1 Feladat
Tekintsünk a változatosság
kedvéért
egy objektumorientált adatbázist. A C
osztály
objektumait két blokkban tároljuk, a B1-ben
és a
B2-ben. A B1 tartalmazza
az O1 és O2 objektumokat, míg a B2 tartalmazza az
O3, O4
és O5 objektumokat.
Az osztálykiterjedések, a blokkok és
az objektumok
zárolható adatbáziselemekből
álló
hierarchiát alkotnak. Adjuk meg a
zárolási
kérések sorozatát és a
figyelmeztető protokoll
alapú ütemező feladatát az
alábbi
kérési sorozatokhoz. Feltehetjük, hogy
minden
kérés
éppen azelőtt fordul elő, mint amikor
szükségünk van rá,
és minden
zárfeloldás a tranzakció
befejeztével történik.
a) r1(O1); w2(O2); r2(O3); w1(O4);
b) r1(O5); w2(O5); r2(O3); w1(O4);
c) r1(O1); r1(O3); r2(O1); w2(O4); w2(O5);
d) r1(O1); r2(O2); r3(O1); w1(O3); w2(O4);w3(O5); w1(O2);
KÖV.HÉTEN II.ZH (12.gyak)