1 / 25

Az Oracle SQL 12.

Az Oracle SQL 12. Tranzakciókezelés. A rádiótelefonokat kérem KIKAPCSOLNI!. Olvasnivaló. Gyári dokumentáció: Oracle 9i Database Concepts (16. fejezet) Oracle 9i Application Developer’s Guide - Fundamentals (7. fejezet) PL/SQL User’s Guide and Reference (6. fejezet). A tranzakció fogalma.

zenda
Download Presentation

Az Oracle SQL 12.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Az Oracle SQL 12. Tranzakciókezelés Markó Tamás, PTE TTK

  2. A rádiótelefonokat kérem KIKAPCSOLNI! Markó Tamás, PTE TTK

  3. Olvasnivaló • Gyári dokumentáció: • Oracle 9i Database Concepts (16. fejezet) • Oracle 9i Application Developer’s Guide - Fundamentals (7. fejezet) • PL/SQL User’s Guide and Reference (6. fejezet) Markó Tamás, PTE TTK

  4. A tranzakció fogalma • Az adatfeldolgozás logikai egysége • Egy vagy több DML utasításból áll • Az adatbázis csak az összes utasítás végrehajtása után kerül újra konzisztens állapotba • Egy tranzakció vagy mindegyik utasítását végre kell hajtani, vagy a már elvégzetteket vissza kell görgetni Markó Tamás, PTE TTK

  5. Példa tranzakcióra: banki átutalás az egyik számla egyenlegének csökkentése • UPDATE szamla SET egyenleg = egyenleg - 50 000 WHERE szlaszam=‘11223344-55667788’; • UPDATE szamla SET egyenleg = egyenleg + 50 000 WHERE szlaszam=‘11112222-5555666’; • INSERT INTO naplo VALUES ( SYSDATE, ‘átutalás’, ‘11223344-55667788’, ‘11112222-5555666’, 50 000); a másik számla egyenlegének növelése a művelet naplózása Markó Tamás, PTE TTK

  6. Tranzakciókezelő utasítások • COMMIT; • véglegesíti a tranzakció során elvégzett adatmódosításokat • a módosítások a többi felhasználó számára is láthatóvá válnak • ROLLBACK; • visszagörgeti (meg nem történtté teszi) a tranzakció során elvégzett adatmódosításokat • Mindkettő lezárja a tranzakciót (és ezután új tranzakció kezdődik) Markó Tamás, PTE TTK

  7. A tranzakciók implicit lezárása • Implicit COMMIT hajtódik végre, ha egy DDL (adatdefiníciós, pl. CREATE TABLE) vagy DCL (adatbiztonsági, pl. GRANT) utasítást adunk ki • Implicit COMMIT hajtódik végre, ha a felhasználó kilép az adatbázisból (pl. a módosításokat végző alkalmazás normál befejeződésekor) • Implicit ROLLBACK hajtódik végre, ha a módosításokat végző alkalmazás rendellenesen fejeződik be Markó Tamás, PTE TTK

  8. Az adatbázis állapota lezáratlan tranzakciónál • A tranzakciót megkezdő felhasználó már az új - bár még nem végleges - adatokat látja • Mindenki más a tranzakció kiindulási állapotát látja • Más adatbáziskezelők más megoldást alkalmazhatnak az ilyen helyzet kezelésére 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

  9. A rollback szegmens • Átmeneti tárolóterület • Tranzakció közben a régi (ebben a tranzakcióban módosított) adatok itt tárolódnak • A tranzakció lezárásakor ez az adatterület törlődik, mindenki az adatbázis új állapotát látja Markó Tamás, PTE TTK

  10. A mentési pont (savepoint) fogalma • „Mentési pont”: tranzakció közben létrehozható, egy köztes állapotot azonosító „könyvjelző” • A rollback történhet csak egy meghatározott mentési pontig is • Előnye: hosszú tranzakció közben elkövetett hiba miatt nem kell mindent visszagörgetni Markó Tamás, PTE TTK

  11. A mentési pont használata a mentési hely neve • Létrehozás pl.SAVEPOINT osztondij_feldolg; • Visszagörgetés adott mentési pontig pl.ROLLBACK TO SAVEPOINT osztondij_feldolg;ROLLBACK TO osztondij_feldolg; • A folyó tranzakción belül bármelyik mentési pontig vissza lehet görgetni a két forma egyenértékű Markó Tamás, PTE TTK

  12. Utasítás-szintű ROLLBACK • Egy SQL utasítás sosem hajtódik részlegesen végre: • vagy teljes egészében befejeződik • vagy visszaáll az adatbázis az utasítás kiadása előtti állapotra (utasítás-szintű visszagörgetés) • az utasítások kezdetekor egy implicit mentési pontot hoz létre a rendszer • Ez a mechanizmus teljesen automatikus • Az utasítás-szintű visszagörgetés nem érinti • a korábbi utasítások hatását • a folyamatban lévő tranzakciót Markó Tamás, PTE TTK

  13. Egyidejű tranzakciók lehetséges problémái az SQL92 szerint • Dirty read: • a tranzakció olyan adatokat olvas, amit másik, még nem lezárt tranzakciók írtak • Nonrepeatable (fuzzy) read: • a tranzakció újra olvas korábban már olvasott adatokat, és azt látja, hogy azokat egy másik - már befejezett - tranzakció módosította vagy törölte • Phantom read: • a tranzakció újra olvas korábban már olvasott adatokat, és azt látja, hogy azokba egy másik - már befejezett - tranzakció új sorokat szúrt be Markó Tamás, PTE TTK

  14. A problémák és az Oracle9i • Dirty read: • nem fordulhat elő • Nonrepeatable (fuzzy) read,Phantom read: • alaphelyzetben előfordulhat • be lehet állítani olyan üzemmódot is, hogy ne fordulhasson elő Markó Tamás, PTE TTK

  15. A dirty read elkerülése • A veszélyes szituáció: az egyik felhasználó módosítja, ezzel egyidőben a másik olvassa ugyanazokat az adatokat • Az olvasás befejezéséig a rendszer elmenti az adatok kiindulási állapotát Markó Tamás, PTE TTK

  16. Csak olvasható tranzakció • A „nonrepeatable read” hiba elkerülésére • Az egész tranzakcióban azt az állapotát olvashatjuk az adatbázisnak, amiben a tranzakció kezdetekor volt • Ilyen tranzakcióban nem lehet INSERT, UPDATE, DELETE • Ehhez a tranzakció első utasítása:SET TRANSACTION READ ONLY; Markó Tamás, PTE TTK

  17. Az SQL*Plus és a tranzakciók 1. • Az SQL*Plus kilépéskor egy implicit COMMIT-tel lezárja a függőben lévő tranzakciót • EXIT ROLLBACK (QUIT ROLLBACK) hatására a függőben lévő tranzakció hatása visszagörgetődik • Az AUTOCOMMIT változóval beállítható az is, hogy az SQL*Plus munka közben automatikusan adjon ki COMMIT utasítást Markó Tamás, PTE TTK

  18. Az SQL*Plus és a tranzakciók 2. a két forma egyenrangú • SET AUTOCOMMIT ON;SET AUTOCOMMIT IMMEDIATE; • az SQL*Plus minden DML utasítás után automatikusan elküld egy COMMIT utasítást az adatbázisnak • SET AUTOCOMMIT 10; • e parancs hatására 10 db DML utasítás után az SQL*Plus automatikusan egy COMMIT utasítást is elküld az adatbázisnak Markó Tamás, PTE TTK

  19. Az SQL*Plus és a tranzakciók 3. • SET AUTOCOMMIT OFF; • kikapcsolja a COMMIT utasítás automatikus kiadását • SHOW AUTOCOMMIT; • kiírja a képernyőre az AUTOCOMMIT változó pillanatnyi értékét Markó Tamás, PTE TTK

  20. Az SQL Developer és a tranzakciók • Tools menü / Preferences / Database Connections / Autocommit in SQL Worksheet: • ha be van kapcsolva, minden INSERT, UPDATE, DELETE után automatikusan COMMIT-et is végrehajt Markó Tamás, PTE TTK

  21. Tranzakciók osztott adatbázisban Markó Tamás, PTE TTK

  22. Osztott tranzakciók • Osztott adatbázis: adatbázisok hálózata • külön kiszolgálón működnek • együtt használjuk őket • Osztott adatbázisokban az adatmódosítás (szintaktikailag) a szokásos módon történik • a tényleges feldolgozás különböző gépeken történik • Osztott tranzakció: osztott adatbázisban végrehajtott tranzakció • több helyen kell véglegesíteni vagy visszagörgetni Markó Tamás, PTE TTK

  23. A kétfázisú COMMIT 1. fázisa • Van egy koordinátor, ez mindenkinek üzenetet küld a véglegesítés szándékáról • Ha a munkaállomás kész a véglegesítésre, akkor • a módosítások előzetesen véglegesített állapotba kerülnek • üzenetet küld a koordinátornak a felkészülésről • Ha a munkaállomás visszagörgetni akar, akkor • üzenetet küld a koordinátornak a szándékáról Markó Tamás, PTE TTK

  24. A kétfázisú COMMIT 2. fázisa • Mindenkitől megérkezik az üzenet a koordinátorhoz • Ha mindenki egyetért a véglegesítéssel • a koordinátor kiküldi a „véglegesítés” üzenetet • a munkaállomások végrehajtják a véglegesítést • Ha legalább egy munkaállomás visszagörgetni akar • a koordinátor kiküldi a „visszagörgetés” üzenetet • a munkaállomások végrehajtják a visszagörgetést Markó Tamás, PTE TTK

  25. A tranzakció kétséges állapota • Az egyik munkaállomásról nem érkezik válasz a koordinátor üzenetére • Ilyenkor az elosztott tranzakció állapota kétséges, bizonytalan • Bizonytalan állapotú tranzakció „kézi” lezárása: • COMMIT FORCE ... • ROLLBACK FORCE ... Markó Tamás, PTE TTK

More Related