490 likes | 597 Views
Tranzakciók gyakorlati anyag. PPKE-ITK, Database Systems, 2009. Definíció: tranzakciók. Olyan program-végrehajtási egységek, amik az adatbázison valamilyen műveleteket végeznek. olvasás : vö. SELECT, X: adattagon read(X) írás, törlés, módosítás : vö. INSERT, DELETE, UPDATE write(X). 2.
E N D
Tranzakciókgyakorlati anyag PPKE-ITK, Database Systems, 2009.
Definíció: tranzakciók • Olyan program-végrehajtási egységek, amik az adatbázison valamilyen műveleteket végeznek. • olvasás: vö. SELECT, X: adattagon • read(X) • írás, törlés, módosítás: vö. INSERT, DELETE, UPDATE • write(X) 2 Database Systems - Tranzakciók (gyakorlat)
Elvárások tranzakciókezeléskor: ACID • Atomosság (Atomicity) • A tranzakció vagy teljes egészében, vagy egyáltalán ne hajtódjon végre. – helyreállító egység (recovery manager) • Adatbázis helyessége (Consistency)(konzisztencia, következetesség) • A tranzakció hatására az adatbázis a kezdeti konzisztens állapotból egy másik konzisztens állapotba jut. – programozó feladata • Elkülönítés (Isolation) • A tranzakció befejeződése után az adatbázis állapota csak olyan lehet, mintha a tranzakció egyedül futott volna, nem párhuzamosan a többivel. – tranzakció kezelő (ütemező) • Tartósság(Durability) • A tranzakció befejeződése után annak eredménye nem veszhet el, be kell jegyezni az adatbázisba. – tranzakció kezelő (ütemező), helyreállító egység 3 Database Systems - Tranzakciók (gyakorlat)
Tranzakció példa – sörösüvegek • x: kamrában lévő üvegek száma (adattag) • y: hűtőben lévő üvegek száma (adattag) • T1: a kamrából N db-ot átteszek a hűtőbe (tranzakció) • T2: apu hozott M db üveggel a kamrába (tranzakció) • T3: megiszunk O db üveggel a hűtőből (tranzakció) 4 Database Systems - Tranzakciók (gyakorlat)
Ütemezés (Scheduling) • Olyan szekvenciák, amik megmutatják az időbeli sorrendjét az egyidejűleg futó tranzakciók műveleteinek • Soros ütemezés: egymás után futnak le a tranzakciók • T1, T2, T6, T3, … • Párhuzamos ütemezés: egyszerre több tranzakció fut párhuzamosan • egy tranzakció egyik művelete megelőzhet, egy másik művelete követheti egy másik tranzakció egy műveletét… 5 Database Systems - Tranzakciók (gyakorlat)
Ütemezés – példa • Mi lesz x és y, ha a kezdőértékek: • x=15; y=5; N=5; M=10; O=2 • Ha T1 lefut, majd T2 és T3? (soros ütemezés) • T1 után x=10,y=10, T2 után x=20,y=10, T3 után x=20,y=8 • Ha T2 fut le először, majd T3 és végül T1? (soros) • T2 után x=25,y=5, T3 után x=25,y=3, T1 után x=20,y=8 • Egyéb sorrendben, ahol egymás után futnak le a tranzakciók? (soros) • végül mindig: x=20,y=8 • És ha párhuzamosan, akkor veszítünk adatot? • lásd a következő ábrán: 6 Database Systems - Tranzakciók (gyakorlat)
Párhuzamos ütemezés – példa Kezdőértékek:x=15; y=5; N=5; M=10; O=2 x=25, y=3 • igen veszítünk adatot, mivel az x és y változok sem lesznek kiírva a következő olvasás előtt • Veszítünk adatot? 7 Database Systems - Tranzakciók (gyakorlat)
Konfliktus, ekvivalencia, sorosíthatóság • Conflicting tranzakciók: • azok a tranzakciók, amelyek ugyanazon az adattagon dolgoznak, és legalább az egyik írni szeretné • Ha egy S ütemezés átalakítható egy S’ ütemezésre non-conflicting műveletek cseréjével, akkor: • S és S’ konfliktus ekvivalens. • Két művelet non-conflicting: • Ha különböző adattagon dolgoznak, vagy ha ugyanazon, de mindkettő csak olvassa. • Ha egy S ütemezés konfliktus ekvivalens egy S’ soros ütemezéssel, akkor • az S ütemezés konfliktus sorosítható. 8 Database Systems - Tranzakciók (gyakorlat)
Konfliktus-ekvivalencia – példa • Konfliktus-ekvivalens, konfliktus sorosítható: 9 Database Systems - Tranzakciók (gyakorlat)
Nézet ekvivalencia – definíció • Legyen S és S’ két ütemezés ugyanazon tranzakciós műveletekkel. Ezek nézet ekvivalensek, ha: • minden X adatelemre, ha Ti olvassa S-ben X- kezdőértékét, akkor S’-ben is ugyanúgy kell olvasnia Ti-nek X kezdőértékét ÉS • minden X adatelemre, ha Ti S-ben olvassa X-et, amely X egy létező Tj tranzakciótól származik, akkor Ti-nek S’ ütemezésben ugyanúgy egy létező Tj által adott értéket kell olvasnia, ÉS • minden X adatelemre, ha egy tranzakció S-ben az utolsó write(X) utasítást hajtja végre, akkor S’-ben ugyancsak write(X)-et kell csinálnia. 10 Database Systems - Tranzakciók (gyakorlat)
Példa – Nézet ekvivalensek-e? S ütemezés S’ ütemezés 11 Database Systems - Tranzakciók (gyakorlat)
Nézet és konfliktus ekvivalencia • Ami konfliktus ekvivalens, az nézet ekvivalens is. • Ami nézet ekvivalens, az nem biztos, hogy konfliktus ekvivalens is. Pl.: • vakonírás N-E. K-E. 12 Database Systems - Tranzakciók (gyakorlat)
Sorosíthatóság eldöntése, biztosítása • megelőzési gráf (gyakorlatban nem alkalmas) • különböző protokollok • kétfázisú protokoll • időbélyegzési protokoll (timestamping) 13 Database Systems - Tranzakciók (gyakorlat)
T1 T2 Megelőzési (precedencia) gráf • irányított gráf, melynek csúcsai maguk a tranzakciók, • élei: (~ a conflicting műveleteknél:) • TiTk között fut él, ha Ti ugyanazt az adatot írta, amit Tk olvasni fog • TiTk ---------------| | --------------- olvasta -----| |---- írni fog • TiTk ---------------| | --------------- írta -----| |---- írni fog • Példa (1): • A precedencia-gráfja: • Sorosítható-e? • Sorosítható. 14 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 Példák megelőzési gráfra (2) • Sorosítható-e? • Igen. Ha a gráf körmentes, akkor sorosítható. 15 Database Systems - Tranzakciók (gyakorlat)
T1 T2 Példák megelőzési gráfra (3) Nem körmentes, ezért nem sorosítható. 16 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T6 T4 T5 T7 Példák megelőzési gráfra (4) • Döntse el a gráf alapján, hogy sorosítható-e? • Ha igen, adjon meg legalább két sorrendet! Sorosítható. Megoldások pl: T1-T2-T3-T4-T5-T6-T7 T1-T2-T3-T5-T4-T6-T7 17 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T6 T5 T4 T7 T8 T9 Példák megelőzési gráfra (5) Megoldás: Nem körmentes! T4-T5-T3-T6-T8-T7-T4 18 Database Systems - Tranzakciók (gyakorlat)
Zárolási technikák (Locking) • Minden adatelemhez hozzárendelünk egy állapotjelzőt, amivel megadjuk,hogy mire használhatjuk az adatot, vagy, hogy használhatjuk-e. • lock(X): a tranzakció lock-ol egy adatot, így azt addig nem érheti el semmilyen tranzakció • unlock(X): lock feloldása • ha csak ezeket használjuk, nem lesz optimális a rendszerünk teljesítménye. • vezessünk be új lock-okat • lock-x(X): exclusive lock : csak az adott tranzakció által használható az adat, mindenki más számára hozzáférhetetlen • lock-s(X): shared lock: (~ read only) mindegyik tranzakció csak olvashatja őt. 19 Database Systems - Tranzakciók (gyakorlat)
Zárolási technikák (Locking) (folyt.) • és tételezzük fel ezekről a lockokról, hogy: • a tranzakciónak kötelezően mindig küldenie kell egy kérelmet (request), ha írni/olvasni akar egye adatelemet • ha már nincs szüksége az adatelemre, unlockolja • a tranzakció nem lockolja, ha már egyszer őnála van • ugyanígy, ne unlockolja, ha nincs nála 20 Database Systems - Tranzakciók (gyakorlat)
Példa – zárolási technikára – 1. • X=20, Y=10 • Ütemezés: T1, T2 Eredmény:X=15, Y=25 • Ütemezés: T2, T1 Eredmény:X= 5, Y=30 21 Database Systems - Tranzakciók (gyakorlat)
Példa – zárolási technikára – 2. Határozd meg a lockokat a következő ütemezésben: 22 Database Systems - Tranzakciók (gyakorlat)
Kétfázisú zárolási protokoll Növekvő (growing) fázis: ebben a fázisban kell minden lock-ot kiadnia a tranzakciónak Csökkenő (shrinking) fázis: a zárolások feloldhatók, de új zárolás már semmiképp sem adható ki ebben a fázisban 23 Database Systems - Tranzakciók (gyakorlat)
Kétfázisú zárolási protokoll Growing Phase: Shrinking Phase: 24 Database Systems - Tranzakciók (gyakorlat)
Tétel: A kétfázisú protokoll szerint futó tranzakciók tetszőleges ütemezése sorbarendezhető. Kétfázisú zárolási protokoll tétele 25 Database Systems - Tranzakciók (gyakorlat)
Lefut-e az alábbi összefésült kétfázisú ütemezés? Mi lesz a végeredmény A=100, B=20 esetén? Jelöld be a fázisokat! Megoldás: Dead-Lock a lock-x(B)—lock-s(A)—lock-s(B)—lock-x(A) miatt. Példa 1. – Kétfázisú zárolási protokoll Growing Phase: Shrinking Phase: 26 Database Systems - Tranzakciók (gyakorlat)
Példa 2. – Kétfázisú zárolási protokoll • Lefut-e az alábbi összefésült kétfázisú ütemezés? • Mi lesz a végeredmény A=100, B=20 esetén? • Jelöld be a fázisokat! • Megoldás: • Igen, lefut. • Avégeredmény:A=70, B=20 lesz. Growing Phase: Shrinking Phase: 27 Database Systems - Tranzakciók (gyakorlat)
Időbélyegzési technika, TimeStamping • Példa: bankautomata, tranzakciószám, stb… • Minden tranzakció kap egy időbélyeget: • TS(Ti): i a tranzakció fiatalságát jelenti • kisebb TS ~ öregebb! (vö. szül. évszám…) • Minden adat is kap egy írási és egy olvasási időbélyeget: • read-timestamp: RTS(X) – X az adat • write-timestamp: WTS(X) – X az adat • lényegében legutóbb/legfiatalabbként kiolvasó/beíró tranzakció TS-je • mindig a fiatalabb van előnyben, ha az öregebb akar olvasni, az elavult 28 Database Systems - Tranzakciók (gyakorlat)
Szabályok – Időbélyegzési technika • 1. Legyen Tj tranzakció, mely read(X) műveletet szeretne • Ha TS(Tj) < W-timestamp(X), akkor Tj X-nek olyan értékét olvasná ki, amit már fölülírtak azóta, így ezt a read-et elutasítjuk (+Tj rollback) • Ha TS(Tj) ≥ W-timestamp(X), akkor megtörténik az olvasás, és a R-timestamp(X) értékét az R-timestamp(X) és a TS(Tj) közül a legnagyobb értékére állítjuk max{r-timestamp(x),TS(Ti)} • 2. Legyen Tj tranzakció olyan, mely write(X) műveletet hajtana végre • Ha TS(Tj) < W-timestamp(X), akkor Tj egy elavult adatot írna, így ezt a write-ot elutasítjuk (+Tj rollback) • Ha TS(Tj) < R-timestamp(X), akkor Tj olyanra állítaná be X-et, amit azóta már kiolvastak, így ezt a write-ot elutasítjuk (+Tj rollback) • Egyébként az írás végrehajtódik, és W-timestamp(X) értékét TS(Tj)-re állítjuk 29 Database Systems - Tranzakciók (gyakorlat)
Szabályok – Időbélyegzési technika • 1. Legyen Tj tranzakció, mely read(X) műveletet szeretne • Ha TS(Tj) < W-timestamp(X), akkor Tj X-nek olyan értékét olvasná ki, amit már fölülírtak azóta, így ezt a read-et elutasítjuk (+Tj rollback) • Ha TS(Tj) ≥ W-timestamp(X), akkor megtörténik az olvasás, és a R-timestamp(X) értékét az R-timestamp(X) és a TS(Tj) közül a legnagyobb értékére állítjuk max{r-timestamp(x),TS(Ti)} • 2. Legyen Tj tranzakció olyan, mely write(X) műveletet hajtana végre • Ha TS(Tj) < W-timestamp(X), akkor Tj egy elavult adatot írna, így ezt a write-ot elutasítjuk (+Tj rollback) • Ha TS(Tj) < R-timestamp(X), akkor Tj olyanra állítaná be X-et, amit azóta már kiolvastak, így ezt a write-ot elutasítjuk (+Tj rollback) • Egyébként az írás végrehajtódik, és W-timestamp(X) értékét TS(Tj)-re állítjuk • Thomas’ Writing Rule: • 2. a) ~vakoníráskor: Tj-ben write(X) igény => • ha RTS(X) < TS(Tj) < WTS(X), akkor a write(X) művelet nem futhat le, de a tranzakció folytatódhat, mégsincs abort és rollback. 30 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1. 31 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 1. lépés RTS(X)=null WTS(X)=null TS(T2)=2 1. b) szabály RTS(X)=2 32 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 2. lépés RTS(Z)=null WTS(Z)=null TS(T3)=3 RTS(X)=2 2. c) szabály WTS(Z)=3 33 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 3. lépés RTS(X)=2 WTS(X)=null TS(T1)=1 RTS(X)=2 WTS(Z)=3 1. b) szabály TS(T1) ? RTS(X) 1 < 2 RTS(X)=2 34 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 4. lépés RTS(X)=2 WTS(X)=null TS(T4)=4 RTS(X)=2 WTS(Z)=3 RTS(X)=2 1. b) szabály TS(T4) ? RTS(X) 4 > 2 RTS(X)=4 35 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 5. lépés RTS(X)=2 RTS(X)=4 WTS(X)=null TS(T3)=3 WTS(Z)=3 RTS(X)=2 1. b) szabály RTS(X)=4 TS(T3) ? RTS(X) 3 < 4 RTS(X)=4 36 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 6. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(Y)=null WTS(Y)=null TS(T2)=2 RTS(X)=4 RTS(X)=4 2. c) szabály WTS(Y)=2 37 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 7. lépés RTS(X)=2 RTS(Y)=null WTS(Y)=2 TS(T4)=4 WTS(Z)=3 RTS(X)=2 RTS(X)=4 1. read-kérdés: TS(T4) ? WTS(Y) 4 > 2 RTS(X)=4 WTS(Y)=2 1. b) szabály RTS(Y)=4 38 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 8. lépés RTS(X)=2 WTS(Z)=3 RTS(Z)=null WTS(Z)=3 TS(T2)=2 RTS(X)=2 RTS(X)=4 RTS(X)=4 1. read-kérdés: TS(T2) ? WTS(Z) 2 < 3 WTS(Y)=2 RTS(Y)=4 1. a) szabály T2 abortál + rollback:WTS(Y):=null 39 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 9. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 WTS(X)=null TS(T1)=1 RTS(X)=4 RTS(X)=4 WTS(Y)=2 2. write-kérdés: TS(T1) ? RTS(X) 1 < 4 RTS(Y)=4 2. b) szabály T1 abortál (+ rollback: nincs mit) 40 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 10. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 RTS(X)=4 RTS(X)=4 WTS(X)=null TS(T5)=5 RTS(Y)=4 1. b) szabály TS(T5) ? RTS(X) 5 > 4 RTS(X)=5 41 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 11. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 RTS(Y)=4 WTS(Y)=2 null TS(T3)=3 RTS(X)=4 RTS(Y)=4 1. read-kérdés: TS(T3) ? WTS(Y) 3 > null RTS(X)=5 1. b) szabály TS(T3) ? RTS(Y) 3 < 4 RTS(Y)=4 42 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 12. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 RTS(Y)=4 WTS(Y)=2 null TS(T5)=5 RTS(X)=4 WTS(Y)=2 2. write-kérdés: TS(T5) ? WTS(Y) 5 > null TS(T5) ? RTS(Y) 5 > 4 RTS(Y)=4 RTS(X)=5 RTS(Y)=4 2.c) szabály WTS(Y)=5 43 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. write(Z) 3. read(X) 4. read(X) 5. read(X) 6. write(Y) 7. read(Y) 8. read(Z) 9. write(X) 10. read(X) 11. read(Y) 12. write(Y) 13. write(Y) Példa 1.– 13. lépés RTS(X)=2 WTS(Z)=3 RTS(X)=2 RTS(X)=4 RTS(X)=4 RTS(Y)=4 WTS(Y)=5 TS(T4)=4 WTS(Y)=2 RTS(Y)=4 2. write-kérdés: TS(T4) ? WTS(Y) 4 < 5 RTS(X)=5 RTS(Y)=4 RTS(Y)=3 2.b) szabály WTS(Y)=5 T4 abortál + rollback: RTS(Y):=3 44 Database Systems - Tranzakciók (gyakorlat)
Példa 1.– Thomas szabály? • Hogyan változna a lefutás, ha engedélyeznénk a Thomas írási szabályt? • A 13. lépésben write(Y)-igény van,RTS(Y)=4, WTS(Y)=5, TS(T4)=4 • TS(T4)=4 < 5=WTS(Y) ütközik, de • TS(T4)=4 = 4=RTS(Y) nem, ezért a Thomas szabály értelmében nem fog lefutni ez a write(Y), viszont a T4 nem abortál, folytatódhat a tranzakció. 45 Database Systems - Tranzakciók (gyakorlat)
Példa 1. 13. – lépés Thomas szabállyal RTS(X)=2 RTS(Y)=4 WTS(Y)=5 TS(T4)=4 WTS(Z)=3 RTS(X)=2 2. write-kérdés: TS(T4) ? WTS(Y) 4 < 5 RTS(X)=4 RTS(X)=4 WTS(Y)=2 2.b) szabály RTS(Y)=4 ( ) T4 abortálna + rollback Thomas’ Writing Rule: RTS(Y) ≤ TS(T4) < WTS(Y) 4 ≤ 4 < 5 RTS(X)=5 RTS(Y)=4 WTS(Y)=5 write(Y) nem hajtódik végre, DE T4 folytatódhat! …
Példa 1.– végeredmény • T3 és T5 tranzakció marad meg • X: read-ts(x)= 5 • write-ts(x)= null (abort miatt) • Y: read-ts(y)=3, Thomas’Rule-lal 4 marad. • write-ts(y)=5 • Z: read-ts(z)= null • write-ts(z)=3 47 Database Systems - Tranzakciók (gyakorlat)
T1 T2 T3 T4 T5 1. read(X) 2. read(Y) 3. read(Y) 4. write(Y) 5. write(Z) 6. read(Z) 7. read(X) 8. read(X) 9. write(Z) 10. write(Y) 11. write(Z) Példa 2. 48 Database Systems - Tranzakciók (gyakorlat)
Példa 2.– HF. • Mely tranzakciók abortálódnak? • Mik az adattagok időbélyegei? • Alkalmazható-e a Thomas writing rule? 49 Database Systems - Tranzakciók (gyakorlat)