26
2006. november 1 8. Markó Tamás, PTE TTK 1 Az Oracle SQL 13. Konkurencia (egyidejű adatelérések)

Az Oracle SQL 13

  • 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

Page 1: Az  Oracle  SQL 13

2006. november 18. Markó Tamás, PTE TTK 1

Az Oracle SQL 13.

Konkurencia

(egyidejű adatelérések)

Page 2: Az  Oracle  SQL 13

2006. november 18. Markó Tamás, PTE TTK 2

A rádiótelefonokat kérem

KIKAPCSOLNI!

Page 3: Az  Oracle  SQL 13

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)

Page 4: Az  Oracle  SQL 13

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

Page 5: Az  Oracle  SQL 13

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

Page 6: Az  Oracle  SQL 13

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ó

Page 7: Az  Oracle  SQL 13

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

Page 8: Az  Oracle  SQL 13

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

Page 9: Az  Oracle  SQL 13

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

Page 10: Az  Oracle  SQL 13

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)

Page 11: Az  Oracle  SQL 13

2006. november 18. Markó Tamás, PTE TTK 11

Zárolás

Page 12: Az  Oracle  SQL 13

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

Page 13: Az  Oracle  SQL 13

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

Page 14: Az  Oracle  SQL 13

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

Page 15: Az  Oracle  SQL 13

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

Page 16: Az  Oracle  SQL 13

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;

Page 17: Az  Oracle  SQL 13

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

Page 18: Az  Oracle  SQL 13

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)

Page 19: Az  Oracle  SQL 13

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

Page 20: Az  Oracle  SQL 13

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

Page 21: Az  Oracle  SQL 13

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

Page 22: Az  Oracle  SQL 13

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ó

Page 23: Az  Oracle  SQL 13

2006. november 18. Markó Tamás, PTE TTK 23

Flashback query

Page 24: Az  Oracle  SQL 13

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!

Page 25: Az  Oracle  SQL 13

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

Page 26: Az  Oracle  SQL 13

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