270 likes | 383 Views
Az Oracle SQL 13. Konkurencia (egyidejű adatelérések). A rádiótelefonokat kérem KIKAPCSOLNI!. Olvasnivaló. Gyári dokumentáció: Oracle 9i Database Concepts (20. fejezet) Oracle 9i Application Developer’s Guide - Fundamentals (7. fejezet). A konkurencia.
E N D
Az Oracle SQL 13. Konkurencia (egyidejű adatelérések) Markó Tamás, PTE TTK
A rádiótelefonokat kérem KIKAPCSOLNI! Markó Tamás, PTE TTK
Olvasnivaló • Gyári dokumentáció: • Oracle 9i Database Concepts (20. fejezet) • Oracle 9i Application Developer’s Guide - Fundamentals (7. fejezet) Markó Tamás, PTE TTK
A konkurencia • Több felhasználó éri el egy időben ugyanazokat az adatokat • A szabad (összehangolatlan) hozzáférés megsértheti az adatok integritását • Az egyidejű hozzáférés összehangolása nem okozhat számottevő lassulást • A problémát különböző típusú zárolásokkal és az adatok több verziójának megtartásával oldja meg az Oracle Markó Tamás, PTE TTK
Sorbarendezhető tranzakciók(serializability) • A párhuzamosan futó tranzakciók hatása olyan, mintha egymás után hajtották volna végre őket • Ennek megvalósítása a tranzakciók hatásának egymástól való teljes függetlenségét eredményezné • Ezt a célt csak részlegesen érik el • kompromisszumot kell kötni a sebesség és a sorbarendezhetőség között • többféle izolálási szintet definiálhatunk Markó Tamás, PTE TTK
A tranzakciók izolálásának szintjei (az SQL-92-es szabvány szerint) nincs alap- értelm. nincs beállít- ható Markó Tamás, PTE TTK
Konzisztencia és integritás • Konzisztencia: a felhasználó által olvasott vagy írt adatokat nem változtatják meg más felhasználók a művelet végrehajtása közben • Integritás: az adatbázisban lévő adatok és az adatbázis szerkezete a megfelelő sorrendben tükrözik a rajtuk végzett összes módosítást Markó Tamás, PTE TTK
Utasításszintű olvasási konzisztencia • Az egy utasítással olvasott adatok az adatbázis egy adott időpillanatban lévő állapotát tükrözik • az adatok nem változnak az utasítás végrehajtása közben • csak a végrehajtás megkezdése előtt lezárt tranzakciók hatása látszik • Az olvasást végző felhasználónak nem kell várni • az adatbázist író felhasználókra • más, az adatbázist ugyancsak olvasó felhasználókra • Az adatbázist író felhasználónak • nem kell várni az ugyanazokat az adatokat olvasó felhasználókra • kell várni az ugyanazokat a sorokat író felhasználókra
Az utasításszintű olvasási konzisztencia biztosítása • Az adatok több verzióját is megőrzik • Az 1024-es tranzakciót megkezdő felhasználó már az új - bár még nem végleges - adatokat látja • A korábban kezdődött (pl. az 10023-as) tranzakció az adatok kiindulási állapotát látja system change number, a tranzakciót azonosítja adott SCN-nel indított lekérdezés az újabb módosításokat nem látja Markó Tamás, PTE TTK
Sorbarendezhető tranzakciók kikényszerítése • SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; • Csak ha kicsi az esélye annak, hogy egyidejű tranzakciók ugyanazokat a sorokat módosítják • Hibát akoz, ha olyan sort akarunk módosítani, amit az aktuálisnál később kezdődő tranzakció már végérvényesen módosított • A hibát az alkalmazásnak kezelni kell (pl. az aktuális tranzakció visszagörgetésével) Markó Tamás, PTE TTK
Zárolás Markó Tamás, PTE TTK
A zárolás dióhéjban • Célja az egyidejű adatelérések káros kölcsönhatásának kiküszöbölése • Biztosítja a konzisztenciát és az integritást • Korlátlan számú felhasználóra működik • Az Oracle automatikusan kezeli • Sorszintű zárolás történik • kisebb az esélye az azonos adatok zárolásáért való versengésnek • A zárolás nem akadályozza az adatok olvasását, csak a mások által való módosítást Markó Tamás, PTE TTK
Zárolási módok • Kizárólagos (exclusive lock): • adatmódosításhoz • csak az a tranzakció módosíthatja, amelyik zárolta • Osztott (share lock): • több, az adatokat csak olvasó tranzakció osztozhat rajta • megakadályozza az adatok módosítását • A tranzakció mindkét esetben várakozik, ha nem tudja elhelyezni a számára szükséges zárat Markó Tamás, PTE TTK
A zárolás időtartama • Egy tranzakción belül több utasítás is elhelyezhet zárakat • Mindegyik zár fennmarad a tranzakció egész idejére • Patthelyzet is kialakulhat Markó Tamás, PTE TTK
Patthelyzet (deadlock) • Kialakulása: • két tranzakció már zárolt bizonyos sorokat • aztán olyan sort akar zárolni, amit a másik már zárolt • Automatikus zárolásnál a kialakult patthelyzetet az Oracle felismeri és elhárítja • a két, egymással konfliktusba került utasítás egyikét visszagörgeti Markó Tamás, PTE TTK
Egyik tranzakció: UPDATE dolgozo SET fizetes=125000 WHERE dolg_kod=200; UPDATE dolgozo SET fizetes=230000 WHERE dolg_kod=100; Másik tranzakció UPDATE dolgozo SET fonok=123 WHERE dolg_kod=100; UPDATE dolgozo SET fonok=123 WHERE dolg_kod=200; Példa patthelyzet kialakulására Markó Tamás, PTE TTK
A zárak típusai • Az Oracle többféle zárat használ • Három fő kategória: • DML-zár: az adatokat védi • DDL-zár: az adatbázis-objektumokat (pl. táblákat) védi • belső zár: az adatbázis belső adatszerkezeteit (pl. adatfájlokat) védi Markó Tamás, PTE TTK
Sorszintű DML-zárak (TX zárak) • Ez az alapvető forma • A módosított sorokra mindig kizárólagos sorszintű zár jön létre • Sorszintű zárak létrehozásakor a tranzakció az egész táblára is zárat tesz, hogy a szerkezetét ne lehessen módosítani (lásd a következő diát) Markó Tamás, PTE TTK
Táblaszintű DML-zárak (TM zárak) • Két céljuk van: • biztosítják a DML-utasítások hozzáférését a tranzakció idejére • megakadályozzák azon DDL utasításokat, amik konfliktusba kerülnének a tranzakcióval • Fajtáik növekvő szigorúság szerint: • row share (RS): a tranzakció sorokat zárolt a módosítás szándékával • row exclusive (RX): a tranzakció sorokat módosított a táblában • share (S): csak manuálisan állítható be • share row exclusive (SRX): csak manuálisan állítható be • exclusive (X): csak manuálisan állítható be az egyes esetekben engedélyezett és tiltott műveletek listáját lásd a dokumentációban
DDL-zárak • Az adatbázis-objektumokat védi a DDL-utasítások végrehajtásának idejére • Működésük teljesen automatikus • Három típus: • exclusive DDL lock: ez a szokásos • share DDL lock: így zárolódnak pl. az eljárás által hivatkozott táblák a CREATE PROCEDURE utasítás végrehajtása közben • breakable parse lock: az SQL utasítások végrehajtásának elemzési fázisában jön létre a hivatkozott objektumokra Markó Tamás, PTE TTK
Belső zárak • Az adatbázis belső adatszerkezeteit védik • Több fajta van: • latch • internal lock • dictionary cache lock • file and log management lock • tablespace and rollback segment lock Markó Tamás, PTE TTK
Explicit (manuális) zárolás • Van rá lehetőség • Sorszintű és táblaszintű is lehet • A DBMS_LOCK programcsomag ennek végrehajtására való Markó Tamás, PTE TTK
Flashback query Markó Tamás, PTE TTK
A jelenség lényege • Flashback = a film visszanézése • Az adatbázis állapotának lekérdezése egy korábbi időpontban • egzakt időpontban • megadott SCN-nél (System Commit Number) • Az adatok több verziójának tárolása ad rá lehetőséget • a DBA tudja beállítani, hogy meddig őrződjenek meg a korábbi állapotok • Nem görgeti vissza a változásokat! Markó Tamás, PTE TTK
Felhasználási lehetőségek • Az adatbázis javítása (pl. véletlenül törölt rekordok visszaállítása) • Az adatbázis két eltérő időben vett állapotának összehasonlítása • Hosszan futó lekérdezések (pl. jelentéskészítésnél) az adatbázis konzisztens állapotát látják Markó Tamás, PTE TTK
További információk • Az időpont a SELECT utasítás AS OF szakaszával állítható be, pl.SELECT fizetes FROM dolgozo AS OF TIMESTAMP to_timestamp(’20051231',’YYYYMMDD') WHERE dolg_kod = 205; • Lásd a DBMS_FLASHBACK programcsomagot is Markó Tamás, PTE TTK