DATABÁZOVÉ A INFORMAˇCNÍ SYSTÉMY

Transkript

DATABÁZOVÉ A INFORMAˇCNÍ SYSTÉMY
DAIS – 3. Transakce, zotavení
1/48
DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY
Michal Krátký
[email protected]
Katedra informatiky
Fakulta elektrotechniky a informatiky
VŠB – Technická univerzita Ostrava
2012/2013
DAIS – 3. Transakce, zotavení
O BSAH P ŘEDNÁŠKY
1. Zotavení, řízení transakcí
2. Transakce
3. Zotavení systému
4. Transakce v SQL
2/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Z OTAVENÍ
Zotavení (angl. recovery) znamená zotavení databáze z nějaké
chyby (přetečení hodnoty atributu, pád systému).
I
Budeme se bavit především o velkých SŘBD, které
zotavení řeší.
I
Při jakékoli chybě musí být databáze v korektním stavu.
Jinými slovy: výsledkem zotavení musí být korektní stav
databáze.
I
K dosažení tohoto stavu často využíváme nějaké
redundantní informace, která je pro uživatele (za
normálních okolností) skryta.
I
Při zotavení pak SŘBD využívá tuto redundantní informaci
pro rekonstrukci databáze v nekorektním stavu.
3/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
T RANSAKCE
Transakce je logická (nedělitelná, atomická) jednotka práce s
databází, která začíná operací BEGIN TRANSACTION a končí
provedením operací COMMIT nebo ROLLBACK.
4/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
P ŘÍKLAD TRANSAKCE
Chceme převést 100Kč z úctu číslo 345 na účet číslo 789.
BEGIN TRANSACTION;
try {
UPDATE Account 345 { balance -= 100; }
UPDATE Account 789 { balance += 100; }
COMMIT;
}
catch(SqlException) {
ROLLBACK;
}
Je zřejmé, že převod musí být proveden jako jedna nedělitelná
operace, ačkoli se jedná o dvě operace UPDATE.
V tomto případě je databáze po provedení první operace
UPDATE v nekorektním stavu – databáze nereflektuje stav
reálného světa: 100Kč zmizelo.
5/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
V LASTNOSTI TRANSAKCÍ
I
Obecně tedy transakce jako logická jednotka práce s
databází nezahrnuje jednu databázovou operaci, ale
častěji posloupnost operací.
I
Úkolem transakce je převést korektní stav databáze na jiný
korektní stav, přičemž nemusí zanechat databázi v
korektním stavu po jednotlivých operacích transakce.
Poznámka: Abychom splnili podmínku korektnosti, musíme v
tomto případě provést obě nebo žádnou operaci UPDATE.
6/48
DAIS – 3. Transakce, zotavení
7/48
Transakce, zotavení
Transakce
Z OTAVENÍ
I
Jak může dojít k chybě při provádění transakcí?
I
Rozlišujeme:
I
I
lokální chyby: chyba v dotazu, přetečení hodnoty atributu
I
chyby globální
I
chyby systémové (soft crash): výpadek proudu, pád systému
či SŘBD
I
chyby média (hard crash)
Komponenta SŘBD, která se stará o řízení transakcí se
nazývá manager transakcí (angl. transaction
management) nebo monitor transakčního zpracování
(angl. transaction processing monitor).
DAIS – 3. Transakce, zotavení
8/48
Transakce, zotavení
Transakce
F REKVENCE VÝSKYT Ů A ČAS ZOTAVENÍ PRO ZÁKLADNÍ
TYPY CHYB
Theo Härder and Andreas Reuter: Principles of
Transaction-Oriented Database Recovery. ACM Computing
Survey, Vol. 15(4), ACM Press, 1983:
Typ chyby
Popis chyby
Lokální
Přetečení hodnoty
atributu,
syntaktická chyba v SQL
příkazu
Pád systému
Chyba disku
Systémová
Chyba média
Frekvence
výskytu
10-100/min
Čas zotavení
Několik za týden
1-2/rok
Několik minut
1-2 hodiny
Stejný jako je
čas
provedení
transakce
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
U KON ČENÍ TRANSAKCÍ
Programátor transakce řídí pomocí operací:
I
COMMIT – signalizuje úspěšné ukončení transakce.
Programátor oznamuje transakčnímu manageru, že
transakce byla úspěšně dokončena, databáze je nyní v
korektním stavu, a všechny změny provedené v rámci
transakce mohou být trvale uloženy v databázi. Jinými
slovy všechny změny jsou potvrzeny (angl. comitted) pro
trvalé uložení v databázi.
I
ROLLBACK – signalizuje neúspěšné provedení transakce.
Programátor oznamuje transakčnímu manageru, že
databáze může být v nekorektním stavu a všechny změny
provedené v rámci transakce musí být zrušeny (angl. roll
back nebo undo).
9/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
U KON ČENÍ TRANSAKCÍ , P ŘÍKLAD
BEGIN TRANSACTION;
try {
UPDATE Account 345 { balance -= 100; }
UPDATE Account 789 { balance += 100; }
COMMIT;
}
catch(SqlException) {
ROLLBACK;
}
V tomto případě jsou operací COMMIT zaznamenány nové
částky na obou účtech; v případě nějaké chyby, operace
ROLLBACK nastaví částky na obou účtech na hodnoty platné
před začátkem transakce.
10/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
JAK JE MOŽNÉ ZRUŠIT ZM ĚNY PROVEDENÉ V RÁMCI
TRANSAKCE ?
I
Programátor připojením k SŘBD nepracuje přímo s
datovým souborem.
I
SŘBD se skládá z celé řady komponent a programátor,
naštěstí, nemůže přímo pracovat s fyzickou reprezentací
dat.
I
Pro podporu operace ROLLBACK má systém k dispozici
log nebo journal na disku kde jsou zaznamenány detaily o
všech provedených operacích.
I
V případě ROLLBACK operace je systém na základě
záznamu v logu schopen vrátit hodnoty příslušného
záznamu na původní hodnoty.
11/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
T RANSAKCE , VLASTNOSTI 1/2
I
Zotavení a transakce přináší větší režii systému, nicméně
drtivé množství aplikací se bez nich neobejde.
I
Na první pohled je patrné, že zotavení úzce souvisí s
paralelním během transakcí (tzv. souběhem), v této chvíli
ale nebudeme souběh uvažovat.
12/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
T RANSAKCE , VLASTNOSTI 2/2
I
V této chvíli se budeme zajímat o transakce jako o
prostředek zotavení: jakmile po UPDATE/DELETE/INSERT
zadám COMMIT, databázový systém nesmí za žádných
okolností o tyto aktualizace přijít.
I
Transakce nemůže být uvnitř jiné transakce, tedy BEGIN
TRANSACTION se nemůže vyskytovat bez toho aby
předchozí transakce byla ukončena operací COMMIT nebo
ROLLBACK. Tato vlastnost plyne z nedělitelnosti
transakcí.
13/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Transakce
KOREKTNÍ VS KONZISTENTNÍ STAV DATABÁZE ?
I
Pojem konzistentní databáze znamená přesně to, že v
databázi neexistují žádné výjimky z daných integritních
omezení.
I
V příkladu s převodem peněz mezi účty nejsme schopni
žádné integritní omezení definovat.
I
Proto tedy říkáme, že transakce je posloupnost operací
převádějící databázi v korektním stavu do jiného
korektního stavu.
I
Pojem korektní má tedy ten význam, že respektujeme
výsledek operací, který jsou vykonány v reálném světě.
14/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Zotavení transakce
P OTVRZOVACÍ BOD 1/2
I
Transakce začíná vykonáním operace BEGIN
TRANSACTION a končí vykonáním COMMIT nebo
ROLLBACK.
I
Operace COMMIT zavádí tzv. potvrzovací bod (angl.
commit point, u starších systémů mluvíme o synchpoint,
tedy o synchronizačním bodu).
I
Potvrzovací bod odpovídá úspěšnému ukončení logické
jednotky práce s databází a představuje tedy bod ve
kterém je databáze v korektním stavu.
I
Naproti tomu ROLLBACK vrací databázi do stavu ve
kterém byla při vykonání BEGIN TRANSACTION, jinými
slovy vrací databázi k předchozímu potvrzovacímu bodu.
15/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Zotavení transakce
P OTVRZOVACÍ BOD 2/2
V okamžiku potvrzení transakce jsou:
I
všechny změny provedené v rámci transakce trvale
uloženy v databázi,
I
všechny adresace (např. ty nastavené pomocí kurzorů) a
zámky entic uvolněny (viz pozdější přednášky).
Z předchozího výkladu je zřejmé, že transakce není jen
jednotkou práce s databází, ale rovněž jednotkou zotavení:
pokud systém zhavaruje, uživatel musí mít k dispozici
databázi, která bude obsahovat všechny potvrzené změny.
16/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Zotavení transakce
Z P ŮSOBY IMPLEMENTACE S ŘBD
I
Všechny aktualizace jsou uloženy v paměti ⇒ po pádu
systému přijdeme o data.
I
Všechny aktualizace jsou uloženy okamžitě na disk ⇒
výsledkem bude pomalý (nepoužitelný) systém.
I
Práce s pamětí je o tři řády rychlejší než práce s diskem.
I
Pamět’: až GB/s
I
Sekvenční čtení/zápis na disk: desítky-stovky MB/s
I
Náhodné čtení/zápis na disk: stovky kB/s (SSD poskytují
vyšší propustnost).
17/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Zotavení transakce
I MPLEMENTAČNÍ DETAILY 1/3
I
Z důvodu efektivity používá SŘBD vyrovnávací pamět’
umístěnou v hlavní paměti (angl. cache buffer) obsahující
aktuální záznamy z databáze.
I
Může se tedy stát, že potvrzené záznamy nebyly před
pádem systému fyzicky zapsány na disk. Přesto musí být
systém schopen zotavení.
18/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Zotavení transakce
I MPLEMENTAČNÍ DETAILY 2/3
I
Všechny změny musí být zapsány do logu před samotným
zápisem změn do databáze. Před ukončením vykonávání
operace COMMIT je do logu zapsán tzv. COMMIT
záznam.
I
Takovéto pravidlo nazýváme pravidlo dopředného
zápisu do logu (angl. write-ahead log rule). Systém je
pak schopen na základě informací z logu provést zotavení
databáze.
19/48
DAIS – 3. Transakce, zotavení
20/48
Transakce, zotavení
Zotavení transakce
I MPLEMENTAČNÍ DETAILY 3/3
Cache Buffer
data
DBMS
data/příkazy
log
Disk
data
Tabulky
Indexy
...
SELECT …
UPDATE …
DELETE ...
DAIS – 3. Transakce, zotavení
Transakce, zotavení
Zotavení transakce
L OG VS DATA
I
Proč není možné zapsat aktualizace do databáze na disku,
ale můžeme zapsat záznamy do logu na disku (z pohledu
efektivity)?
I
Aktualizace dat jsou často řešeny náhodnými zápisy do
souborů datových struktur. Rychlost řádově stovky kB/s.
I
Do logu zapisujeme na konec sekvenčním zápisem
(desítky–stovky MB/s).
21/48
DAIS – 3. Transakce, zotavení
Transakce, zotavení
ACID
V LASTNOST ACID
Každá transakce musí splňovat vlastnost ACID: atomičnost
(angl. atomicity), korektnost (angl. correctness), izolovanost
(angl. isolation) a trvalost (angl. durability):
I
A - Atomičnost – transakce musí být atomická: jsou
provedeny všechny operace transakce nebo žádná.
I
C - Korektnost – transakce převádí korektní stav databáze
do jiného korektního stavu databáze, mezi začátkem a
koncem transakce nemusí být databáze v korektním stavu.
I
I - Izolovanost – transakce jsou navzájem izolovány:
změny provedené jednou transakcí jsou pro ostatní
transakce viditelné až po provedení COMMIT.
I
D - Trvalost – jakmile je transakce potvrzena, změny v
databázi se stávají trvalými i po případném pádu systému.
22/48
DAIS – 3. Transakce, zotavení
Zotavení systému v případě globální chyby
Z OTAVENÍ SYSTÉMU
I
Zotavení není vázáno pouze na jednu transakci, ale i na
celý databázový systém.
I
Takovéto zotavení je nutné v případě globálních chyb
(chyba systému, chyba média apod.).
I
Tato chyba ovlivňuje všechny transakce ve kterých se
vyskytla, na rozdíl od chyb lokálních, které se týkají pouze
transakce jedné.
I
V případě chyby média ovšem navíc dochází ke zničení
části databáze.
23/48
DAIS – 3. Transakce, zotavení
Zotavení systému v případě globální chyby
Zotavení po systémové chybě
Z OTAVENÍ SYSTÉMU
I
Základním problémem vzniklým při systémové chybě, je
ztráta obsahu hlavní paměti, tedy ztráta obsahu
vyrovnávací paměti SŘBD.
I
Přesný stav transakce přerušené chybou není tedy znám a
transakce musí být zrušena (angl. undo). Pro tuto akci
budeme často používat označení UNDO.
I
Někdy je transakce úspěšně ukončena, ovšem změny
nejsou přeneseny z vyrovnávací paměti na disk. V tomto
případě musí být po restartu systému transakce
přepracována (angl. redo). Pro tuto akci budeme často
používat označení REDO.
24/48
DAIS – 3. Transakce, zotavení
Zotavení systému v případě globální chyby
Zotavení po systémové chybě
KONTROLNÍ BODY
I
Z důvodu efektivity nezapisujeme do databáze na disk
všechny potvrzené aktualizace.
I
Aby SŘBD věděl, které operace musí být pro danou
transakci provedeny, vytváří tzv. kontrolní body (angl.
check points). Kontrolní body jsou vytvářeny např. po
určitém počtu záznamů, které byly zapsány do logu a
zahrnují:
I
I
zápis obsahu vyrovnávací paměti na disk,
I
zápis záznamu o kontrolním bodu do logu.
Záznam o kontrolním bodu zahrnuje všechny transakce
vykonávané v době vytvoření kontrolního bodu.
25/48
DAIS – 3. Transakce, zotavení
26/48
Zotavení systému v případě globální chyby
Zotavení po systémové chybě
KONTROLNÍ BODY, P ŘÍKLAD 1/4
Transakce
T5
T4
T3
T2
T1
Kontrolní bod
tc
Systémová chyba
tf
Čas
DAIS – 3. Transakce, zotavení
27/48
Zotavení systému v případě globální chyby
Zotavení po systémové chybě
KONTROLNÍ BODY, P ŘÍKLAD 2/4
I
Systémová chyba nastala v čase tf .
Transakce
T5
T4
T3
Kontrolní bod tc byl vytvořen ze
T
T
všech kontrolních bodů nejpozději
před tím než nastala systémová
Systémová chyba
Kontrolní bod
t
t
chyba.
I Transakce typu T1 byla úspěšně dokončena před časem tc .
I
2
1
c
f
I
Transakce typu T2 začala před časem tc , byla úspěšně
dokončena po tc a před tf .
I
Transakce typu T3 začala před časem tc nebyla ale dokončena
před tf .
I
Transakce typu T4 začala po tc a byla dokončena před tf .
I
Transakce typu T5 začala po tc , ale nebyla dokončena před tf .
Čas
DAIS – 3. Transakce, zotavení
28/48
Zotavení systému v případě globální chyby
Zotavení po systémové chybě
KONTROLNÍ BODY, P ŘÍKLAD 3/4
Transakce
T5
T4
T3
T2
T1
Kontrolní bod
tc
Systémová chyba
tf
Čas
I
Po restartu systému musí být transakce typu T3 a T5
zrušeny (undo).
I
Transakce typu T2 a T4 musí být přepracovány (redo).
I
Jelikož změny provedené transakcí T1 byly provedeny před
kontrolním bodem tc , tuto transakci při zotavení vůbec
neuvažujeme.
DAIS – 3. Transakce, zotavení
Zotavení systému v případě globální chyby
Zotavení po systémové chybě
Z OTAVENÍ : UNDO A REDO FÁZE
Po restartu SŘBD spustí tento algoritmus:
1. Vytvoř dva seznamy transakcí: UNDO a REDO.
2. Do UNDO vlož všechny transakce, které nebyly úspěšně
dokončeny před posledním kontrolním bodem. Seznam
REDO je prázdný.
3. Začni procházet záznamy v logu od záznamu posledního
kontrolního bodu.
3.1 Pokud je pro transakci T nalezen v logu záznam BEGIN
TRANSACTION, ponech T v seznamu UNDO.
3.2 Pokud je pro transakci T nalezen v logu záznam COMMIT,
přesuň T ze seznamu UNDO do seznamu REDO.
29/48
DAIS – 3. Transakce, zotavení
30/48
Zotavení systému v případě globální chyby
Zotavení po systémové chybě
KONTROLNÍ BODY, P ŘÍKLAD 4/4
Transakce
T5
T4
T3
T2
T1
Kontrolní bod
tc
Systémová chyba
tf
Čas
Po skončení algoritmu obsahuje seznam UNDO transakce T3 a
T5 a seznam REDO transakce T2 a T4 . Nyní systém prochází
log zpětně a ruší transakce ze seznamu UNDO (tedy jejich
jednotlivé operace), poté prochází logem dopředu a
přepracovává transakce ze seznamu REDO. Po zpracování
obou seznamů je zotavení ukončeno a systém je připraven k
dalšímu provozu.
DAIS – 3. Transakce, zotavení
Zotavení systému v případě globální chyby
Zotavení po chybě média
Z OTAVENÍ PO CHYB Ě MÉDIA
I
Zotavení v případě chyby média začíná obnovením
databáze ze záložní kopie popř. dump souboru1 .
I
V dalším kroku je procházen log a všechny transakce,
které byly dokončeny po čase vytvoření zálohy jsou
přepracovány.
I
V tomto případě nejsou žádné transakce zrušeny:
aktualizace byly zrušeny prostou ztrátou dat.
1
Tento soubor obsahuje úplný obraz databáze a je vytvářen z databáze
popř. využit pro rekonstrukci databáze nejčastěji utilitami dump/restore nebo
unload/reload.
31/48
DAIS – 3. Transakce, zotavení
Základní techniky zotavení
Z ÁKLADNÍ TECHNIKY ZOTAVENÍ
Dosud jsem popsali koncepty zotavení, nyní si představíme dvě
základní techniky zotavení:
I
zotavení odloženou aktualizací,
I
zotavení okamžitou aktualizací.
Tyto názvy se vztahují k aktualizaci logu a datového souboru.
32/48
DAIS – 3. Transakce, zotavení
Základní techniky zotavení
Z OTAVENÍ ODLOŽENOU AKTUALIZACÍ 1/2
I
Zotavení odloženou aktualizací (angl. deferred update)
neprovádí aktualizaci databáze na disku dokud transakce
nedosáhne potvrzovacího bodu: všechny aktualizace
databáze jsou zaznamenány do pamět’ového bufferu.
I
Jakmile transakce dosáhne potvrzovacího bodu (je zadán
COMMIT), aktualizace jsou nejprve zaznamenány do logu
a následně do databáze (pravidlo dopředného zápisu do
logu).
I
Pokud transakce selže, není nutné provést UNDO
(databáze nebyla aktualizovaná).
33/48
DAIS – 3. Transakce, zotavení
Základní techniky zotavení
Z OTAVENÍ ODLOŽENOU AKTUALIZACÍ 2/2
I
REDO bude provedeno v případě kdy systém zapsal
aktualizace do logu, ale k zapsání změn do databáze
nedošlo.
I
Do logu jsou v případě odložené aktualizace zapsány
nové hodnoty (kvůli REDO).
I
Tato technika zotavení se nazývá NO-UNDO/REDO
algoritmus.
I
Ačkoli se tato technika zdá výkonná (zejména z pohledu
minimalizace I/O), v praxi se používá pouze v případě, kdy
systém provádí krátké transakce a každá transakce mění
pouze několik málo položek. Pro ostatní typy transakcí
hrozí přetečení popř. velká expanze lokálních bufferů.
34/48
DAIS – 3. Transakce, zotavení
Základní techniky zotavení
Z OTAVENÍ OKAMŽITOU AKTUALIZACÍ 1/2
I
Zotavení okamžitou aktualizací (angl. immediate
update) může provádět aktualizace databáze na disku
před tím než transakce dosáhne potvrzovací bod.
I
Operace jsou v tomto případě zapsány do logu vynuceným
zápisem a poté je aktualizována databáze (pravidlo
dopředného zápisu do logu).
I
Pokud transakce selže před dosažením potvrzovacího
bodu a během provádění transakce došlo k aktualizaci
databáze, pak je nutné provést UNDO.
I
V případě okamžité aktualizace ukládáme do logu
původní hodnoty, což umožní systému provést při
zotavení operaci UNDO.
35/48
DAIS – 3. Transakce, zotavení
Základní techniky zotavení
Z OTAVENÍ OKAMŽITOU AKTUALIZACÍ 2/2
I
V tomto případě budou pro zotavení aplikovány jak
operace UNDO tak operace REDO, proto tuto techniku
nazýváme UNDO/REDO algoritmus.
I
Ve speciálním případě, kdy jsou všechny aktualizace
transakce zapsány do databáze před dosažením
potvrzovacího bodu (a při zotavení tedy odpadá REDO),
pak mluvíme o UNDO/NO-REDO algoritmu.
36/48
DAIS – 3. Transakce, zotavení
Základní techniky zotavení
Z OTAVENÍ VS SOUB ĚH
I
V některých aktuálních databázových systémech (např.
Key-value DBMS), nejsou, kvůli dosažení maximálního
výkonu, podporovány transakce pro řešení problémů
paralelního přístupu, ale pouze jako prostředek pro
zotavení.
I
Programátor má zaručeno, že jednou potvrzené
aktualizace se z databáze neztratí (z ACID tedy například
dodržujeme jen ACD ne I).
I
V relačních SŘBD není možné řešení paralelního běhu
transakcí vypnout, to je jeden z důvodu, proč takové
databáze poskytují nižší propustnost než některé
specializované SŘBD.
37/48
DAIS – 3. Transakce, zotavení
Transakce v SQL
Záchranné body
Z ÁCHRANNÉ BODY
I
Transakci jsme dosud prezentovali jako nedělitelnou
jednotku práce s databázi.
I
Koncept záchranných bodů (angl. savepoints) zavedený
v SQL99, ale transakci rozděluje na menší části.
I
V případě operace ROLLBACK nedochází ke zrušení celé
transakce, ale k návratu na záchranný bod.
I
Musíme si uvědomit, že záchranný bod není ekvivalentní
potvrzení změn: změny provedené transakcí nejsou stále
viditelné pro ostatní transakce dokud ta neprovede operaci
COMMIT.
38/48
DAIS – 3. Transakce, zotavení
Transakce v SQL
Transakce v SQL
T RANSAKCE V SQL
I
Transakce v SQL následují teorii, která byla popsána v
předchozích kapitolách.
I
Všechny SQL příkazy jsou atomické2 .
I
Operace BEGIN TRANSACTION se v SQL provede
příkazem START TRANSACTION, operace COMMIT
příkazem COMMIT WORK a operace ROLLBACK příkazem
ROLLBACK WORK.
I
Při práci s databázovým systémem musíme dát pozor
zejména na AUTOCOMMIT ⇒ Pokud je nastaveno
AUTOCOMMIT ON pak operace ROLLBACK nedává
smysl.
2
s výjimkou příkazů CALL a RETURN
39/48
DAIS – 3. Transakce, zotavení
Transakce v SQL
Transakce v SQL
S YNTAXE P ŘÍKAZU START TRANSACTION 1/2
START TRANSACTION <volitelné parametry>;
Kde <volitelné parametry> specifikují režim přístupu (angl.
access mode), úroveň izolace (angl. isolation level) a velikost
diagnostikované oblasti (angl. diagnostics area size):
40/48
DAIS – 3. Transakce, zotavení
Transakce v SQL
Transakce v SQL
S YNTAXE P ŘÍKAZU START TRANSACTION 2/2
I
Úroveň izolace zadáváme ve tvaru ISOLATION LEVEL
<izolace>, kde <izolace> je READ UNCOMMITED,
READ COMMITED, REPEATABLE READ a SERIALIZABLE
(viz další přednášky).
I
Režim přístupu může být READ ONLY nebo READ WRITE.
Pokud nespecifikujeme žádný režim, je nastaven READ
WRITE. Pokud ovšem zvolíme úroveň izolace READ
UNCOMMITED, pak je nastaven režim READ ONLY. Pokud
tedy zvolíme režim READ WRITE, pak úroveň izolace
nesmí být READ UNCOMMITED.
I
Velikost diagnostikované oblasti se nastavuje jako celé
číslo uvedené za klíčovým slovem DIAGNOSTICS SIZE a
specifikuje kolik výjimek bude systém ukládat na
zásobníku.
41/48
DAIS – 3. Transakce, zotavení
Transakce v SQL
Transakce v SQL
S YNTAXE COMMIT A ROLLBACK
COMMIT [WORK] [AND [NO] CHAIN];
ROLLBACK [WORK] [AND [NO] CHAIN];
I
Vidíme tedy, že WORK je doplňkové slovo a implicitní volba
je AND NO CHAIN.
I
AND CHAIN automaticky vykoná START TRANSACTION
se stejnými parametry jako v předchozím případě po
provedení COMMIT.
I
Po potvrzení transakce jsou automaticky uzavřeny všechny
kurzory, je tedy proveden CLOSE, s jedinou výjimkou
kurzoru deklarovaného jako WITH HOLD (viz další
přednášky).
42/48
DAIS – 3. Transakce, zotavení
Transakce v SQL
Transakce v SQL
Z ÁCHRANNÉ BODY V SQL
I
Záchranný bod je vytvořen příkazem:
SAVEPOINT <jméno záchranného bodu>;
I
Příkazem ROLLBACK TO <jméno záchranného
bodu>; provedeme zrušení všech operací provedených
za specifikovaným záchranným bodem.
I
Příkaz RELEASE <jméno záchranného bodu>; zruší
specifikovaný záchranný bod, po tomto příkazu tedy
nemůže provést ROLLBACK k tomuto bodu.
I
Po ukončení transakce jsou automaticky zrušeny všechny
záchranné body.
43/48
DAIS – 3. Transakce, zotavení
44/48
Transakce v SQL
Transakce v SQL
T RANSAKCE V PL/SQL, P ŘÍKLAD I, 1/2
Vezměme v úvahu tabulku Student:
CREATE TABLE Student (
login CHAR(5) PRIMARY
fname VARCHAR(30) NOT
lname VARCHAR(30) NOT
email VARCHAR(40) NOT
);
KEY,
NULL,
NULL,
NULL
DAIS – 3. Transakce, zotavení
45/48
Transakce v SQL
Transakce v SQL
T RANSAKCE V PL/SQL, P ŘÍKLAD I, 2/2
Nyní chceme vložit do databáze záznamy o dvou studentech, v
případě chyby nebude vložen ani jeden záznam.
BEGIN
INSERT INTO Student VALUES(’sob28’, ’Jan’, ’Sobota’,
’[email protected]’);
INSERT INTO Student VALUES(’sob28’, ’Jan’, ’Neděle’,
’[email protected]’);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
V tomto případě se nepodaří vložit druhý záznam, celá
transakce bude tedy zrušena.
DAIS – 3. Transakce, zotavení
Transakce v SQL
Transakce v SQL
T RANSAKCE V PL/SQL, P ŘÍKLAD II, 1/3
Vezměme v úvahu část schématu systému evidujícího autory a
recenzenty článků. V takovém systému může být jedna osoba
v celé řadě rolí (autor, recenzent, administrátor apod.).
Vezměme v úvahu tabulku Person:
CREATE TABLE Person (
login
VARCHAR(20) PRIMARY KEY,
email
VARCHAR(50) UNIQUE NOT NULL,
password
VARCHAR(20) NOT NULL,
firstName
VARCHAR(20) NOT NULL,
middleName
VARCHAR(20),
secondName
VARCHAR(20) NOT NULL,
email2
VARCHAR(50),
web
VARCHAR(70));
46/48
DAIS – 3. Transakce, zotavení
47/48
Transakce v SQL
Transakce v SQL
T RANSAKCE V PL/SQL, P ŘÍKLAD II, 2/3
tabulku Role:
CREATE TABLE Role (
id
INT NOT NULL PRIMARY KEY IDENTITY,
name
VARCHAR(50) NOT NULL UNIQUE);
a tabulku evidující role osob:
CREATE TABLE PersonRole (
idPerson
INT REFERENCES Person NOT NULL,
idRole
INT REFERENCES Role NOT NULL,
UNIQUE(idPerson, idRole));
DAIS – 3. Transakce, zotavení
Transakce v SQL
Transakce v SQL
T RANSAKCE V PL/SQL, P ŘÍKLAD II, 3/3
Při vložení nové osoby chceme zároveň přidat této osobě roli
"Autor" (která má id=1). Transakce tedy bude vypadat takto:
BEGIN
INSERT INTO Person VALUES(’sob28’, ’[email protected]’,
’heslo’, ’Jan’, NULL, ’Sobota’, NULL, NULL);
INSERT INTO PersonRole(’son28’, 1);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
Pokud selže vložení osoby (např. osoba je už v systému
evidována), pak vložení role osoby nedává smysl a celá
transakce bude zrušena.
48/48

Podobné dokumenty

Evropský parlament

Evropský parlament předložit prohlášení o darech s vyjádřením, zda v příslušném roce poslanec přijal dar o hodnotě převyšující 600 EUR spolu s podrobnostmi o každém takovém daru. Za dar se považuje každý příspěvek uč...

Více

DATABÁZOVÉ A INFORMAˇCNÍ SYSTÉMY

DATABÁZOVÉ A INFORMAˇCNÍ SYSTÉMY Tyto proměnné mají stejný efekt jako bychom na databázi poslali totožné dotazy, přestože za proměnou dosazujeme

Více

pedagogická fakulta zápočtová práce databáze divadelních souborů

pedagogická fakulta zápočtová práce databáze divadelních souborů Představení – konkrétní uvedení hry pro diváky charakterizované datem, místem, hodinou, zda se jedná o festival, počtem diváků a souborem. Soubor – nabývá dvou hodnot: Kašpárek a Jitřenka. Festival...

Více

Práce s databází

Práce s databází s klientským softwarem používaného databázového systému. Je tedy nutné aby na klientské stanici byl nainstalován příslušný software.

Více

Pojistné podmínky

Pojistné podmínky a pojistné smlouvy bude probíhat v českém jazyce. Kodex etiky v pojišťovnictví a kodex etiky finančního trhu jsou uloženy na www.das.cz. Uzavřená pojistná smlouva je v elektronické podobě uložena u...

Více

Příručka k programu REVIZEprofi 2

Příručka k programu REVIZEprofi 2 ILLKO. V takovém případě máte nárok na vrácení uhrazeného licenčního poplatku, za předpokladu zničení všech kopií tohoto programu, uložených na pevném disku či jakkoli jinak archivovaných, odinstal...

Více

Uživatelská příručka k webové aplikaci Novell Filr 1.2

Uživatelská příručka k webové aplikaci Novell Filr 1.2 Dále společnost Novell, Inc. nenese žádnou zodpovědnost nebo záruky s ohledem na jakýkoli software a výslovně neuznává jakékoli vyjádřené nebo mlčky předpokládané záruky obchodovatelnosti nebo vhod...

Více

Amadeus Hotel Store

Amadeus Hotel Store ubytovacích zariadení. Tento systém významne rozširuje Vaše možnosti výberu hotela a zaisťuje Vašu províziu

Více