Upload
lupita
View
64
Download
0
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
2006. november 18. Markó Tamás, PTE TTK 1
Az Oracle SQL 13.
Konkurencia
(egyidejű adatelérések)
2006. november 18. Markó Tamás, PTE TTK 2
A rádiótelefonokat kérem
KIKAPCSOLNI!
2006. november 18. Markó Tamás, PTE TTK 3
Olvasnivaló
• Gyári dokumentáció:– Oracle 9i Database Concepts (20. fejezet)– Oracle 9i Application Developer’s Guide -
Fundamentals (7. fejezet)
2006. november 18. Markó Tamás, PTE TTK 4
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
2006. november 18. Markó Tamás, PTE TTK 5
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
2006. november 18. Markó Tamás, PTE TTK 6
A tranzakciók izolálásának szintjei (az SQL-92-es szabvány szerint)
Izolálási szint Dirty read Nonrepeatable read
Phantom read
Read uncommitted
Előfordulhat Előfordulhat Előfordulhat
Read committed
Nem fordulhat elő
Előfordulhat Előfordulhat
Repeatable read
Nem fordulhat elő
Nem fordulhat elő
Előfordulhat
Serializable Nem fordulhat elő
Nem fordulhat elő
Nem fordulhat elő
nincs
nincs
alap-értelm.
beállít-ható
2006. november 18. Markó Tamás, PTE TTK 7
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
8
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
2006. november 18. Markó Tamás, PTE TTK 9
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ítottlekérdezés az újabb
módosításokat nem látja
2006. november 18. Markó Tamás, PTE TTK 10
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)
2006. november 18. Markó Tamás, PTE TTK 11
Zárolás
2006. november 18. Markó Tamás, PTE TTK 12
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
2006. november 18. Markó Tamás, PTE TTK 13
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
2006. november 18. Markó Tamás, PTE TTK 14
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
2006. november 18. Markó Tamás, PTE TTK 15
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
2006. november 18. Markó Tamás, PTE TTK 16
Példa patthelyzet kialakulására
• 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;
2006. november 18. Markó Tamás, PTE TTK 17
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
2006. november 18. Markó Tamás, PTE TTK 18
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)
19
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 esetekbenengedélyezett
és tiltott műveleteklistáját lásd a
dokumentációban
2006. november 18. Markó Tamás, PTE TTK 20
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
2006. november 18. Markó Tamás, PTE TTK 21
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
2006. november 18. Markó Tamás, PTE TTK 22
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ó
2006. november 18. Markó Tamás, PTE TTK 23
Flashback query
2006. november 18. Markó Tamás, PTE TTK 24
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!
2006. november 18. Markó Tamás, PTE TTK 25
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
2006. november 18. Markó Tamás, PTE TTK 26
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