kategória | ||||||||||
|
||||||||||
|
||
A méréssorán a hallgatók megismerkednek az adatbázisok tranzakció kezelésével. A párhuzamos feldolgozási folyamatból adódóan számos ada 414b19e t egymásra hatást kell figyelembe venni, és ezeket az egymásra hatásokat kezelni kell. MS SQL Server és az Oracle Server számos különbséget mutat egymáshoz képest ezért a feladatok kidolgozása során a két szerver viselkedését is össze kell hasonlítani.
Tranzakció kezeléssel kapcsolatos elõismeretek, melyen elõadáson elhangzottak:
Az MS SQL Server alapvetõen auto commit üzemmódban mûködik, azaz minden SQL utasításnak egy tranzakciót nyit és automatikusan committal zár. Ha több utasítást szeretnénk egy tranzakcióba fogni, akkor azt a Begin transaction utasítással lehet megtenni.
Zárak manuális elhelyezésére a with kulcsszó szolgál a select utasításokban
SELECT
FROM tábla WITH (TABLOCKX)
SELECT
FROM tábla WITH (XLOCK)
WHERE feltétel
Az Oracle automatikusan létrehoz tranzakciókat minden kapcsolathoz, és minden tranzakció vége jelnél új tranzakciót indít a felhasználó számára. Ezért ha több utasítást akarunk összefogni egy tranzakcióba akkor ez automatikusan megtörténik.
Zárak elhelyezésére az alábbi lehetõségek vannak Oracle Serveren:
Lock table táblanév
Select
From tábla
Where
For update
1. Kapcsolódjon az SQL Serverhez és hozzon létre ebben az adatbázisában egy szamla(szamla_id, egyenleg) táblát, és töltse fel a következõ adatokkal:
Ezek után nyisson még egy kapcsolatot az SQL Serverhez.
2. 1000 forint átutalása az 1-es számláról a 2-esre.
Hajtsa végre a következõ utasításokat:
Mit tapasztalt? Miért? Hogyan kerülheti el ezt a problémát?
3. Hajtsa végre az 1-es és 2-es feladatot Oracle Serveren. Milyen különbséget tapasztalt? Miért?
4. Vizsgajelentkezés limittel - zárolások kezelése.
Hozzon létre az SQL Serveren az adatbázisán belül egy vizsga(vizsga_id, targy, idopont, limit) táblát, és egy vizsgajelentkezes(diak_id, vizsga_id) táblát.
A vizsga táblába szúrja be a következõ vizsgát:
1, 'Info 2', '6/12/2007', 3
A vizsgajelentkezes táblába:
Az elsõ ablakból indítson egy tranzakciót. Ezen a tranzakción belül kérdezze le, hogy hányan jelentkeztek az 1-es vizsgára. Tegye meg ugyanezt a második ablakból is. Mivel mindkét felhasználó úgy látja, hogy eddig ketten jelentkeztek, ezért mindketten megpróbálnak jelentkezni 3.-nak. Mindkét ablakban adjon ki egy-egy utasítást, ami a 333-as illetve a 444-es diákot felveszi a vizsgára. Ezek után fejezze be a tranzakciókat. Sikerült mindkét diákot felvenni? Miért? Adjon megoldást a problémára!
5. Ismételje meg az elõzõ két feladatot Oracle Serveren. Adjon megoldást a felmerülõ problémára itt is!
6. Deadlock elõidézése Oracle Serveren.
1000 forint átutalása az 1-es számláról a 3-asra, illetve 2000 forint átutalása 3-asról az 1-esre. Az Oracle Serverhez kapcsolódjon kétszer. Az egyik ablakból csökkentse az 1-es számla egyenlegét 1000 forinttal. Ezután a második ablakból csökkentse a 3-as számla egyenlegét 2000 forinttal. Az elsõ ablakból most növelje meg az 3-as számla egyenlegét 1000 forinttal. A második ablakból növelje meg az 1-es számla egyenlegét 2000 forinttal. Mi történik? Miért?
Találat: 1290