Transakční zpracování
Stránky: | E-learning VŠCHT Praha |
Kurz: | Využití databází a jazyka SQL |
Kniha: | Transakční zpracování |
Vytiskl(a): | Nepřihlášený host |
Datum: | neděle, 3. srpna 2025, 00.08 |
1. Transakce
Transakce je posloupnost příkazů, která je vnímána jako jedna operace. SŘBD, který podporuje zpracování transakcí, ale nezaručuje, že transakce bude vždy provedena až do konce. Nicméně, v případě, že například dojde k výpadku systému v průběhu zpracování transakce, je nutné, aby SŘBD uvedl stav databáze do stavu před zahájením provedení transakce.
Transakce, které nemění stav databáze se označují jako read-only, jedná se především o operace dotazování. Ostatní transakce jsou tzv. aktualizační.
2. Příkazy transakcí
Aby se uživateli jevila transakce jako atomická operace, je nutná existence příkazů BEGIN, COMMIT a ROLLBACK.
BEGIN
Příkaz BEGIN otevírá transakci. Všechny dále uvedené příkazy spadají do jedné transakce až po uvedení příkazu COMMIT či ROLLBACK.
COMMIT
Příkaz COMMIT signalizuje SŘBD úspěšnost provedení transakce, tj. že veškeré změny databáze se staly trvalými a mohou být zpřístupněny dalším transakcím. V praxi není vždy nutné vyvolávat příkaz explicitně, postačuje normální ukončení programů, které
realizují transakci.
ROLLBACK
Příkaz ROLLBACK signalizuje SŘBD, že databáze musí být uvedena do původního stavu. Použití příkazu vyžaduje existenci tzv. žurnálu (angl. log file), který je umístěný na stabilním paměťovém médiu, a zaznamenávají se do něho všechny provedené operace.
3. Stavy transakcí
Transakce se v průběhu zpracování může dostat do jednoho z pěti stavů
- aktivní (A) - angl. active - Je stav vznikající od počátku provádění transakce.
- částečně potvrzený (PC) - angl. partially commited - Je stav po provedení poslední operace transakce.
- chybný (F) - angl. failed - Je stav, že nelze pokračovat v normálním zpracování transakce.
- zrušený (AB) - angl. aborted - Je stav po skončení operace ROLLBACK, tzn. uvedení databáze do původního stavu před transakcí.
- potvrzený (C) - angl. commited - Je stav po úspěšném provedení transakce, tj. po potvrzení příkazem COMMIT.
Ve stavech AB nebo C, říkáme, že transakce je ukončena. Ze stavu F transakce přechází po provedení operace ROLLBACK do stavu AB. Ze stavu PC se může transakce dostat do stavu F, protože nemusí být zaznamenány všechny změny na disk, např. v případě výpadku systému.
4. Vlastnosti transakcí
V souvislosti s transakcemi se obvykle hovoří o jejich vlastnostech ACID. Jedná se o první písmena z anglických výrazů atomicity, consistency, independence (popř. isolation) a durability.
Atomicita (atomicity)
Transakce se tváří jako jedna operace. Musí proběhnout buď celá, nebo vůbec ne.
Konzistence (consistency)
Transakce transformuje databázi z jednoho konzistentního stavu do jiného konzistentního stavu.
Nezávislost (independence, isolation)
Transakce jsou nezávislé, tj. dílčí efekty transakce nejsou viditelné jiným transakcím.
Trvalost (durability)
Efekty úspěšně provedené (potvrzené) transakce jsou trvale uloženy do databáze. Také se říká, že změny jsou persistentní.
5. Příklad
Systém SQLite defaultně běží v tzv. auto-commit módu. To znamená, že pro každý příkaz zahajuje systém transakci automaticky. Explicitně lze transakci zahájit příkazem BEGIN TRANSACTION a potvrdit příkazem COMMIT TRANSACTION, případně vrátit zpět příkazem ROLLBACK TRANSACTION.
Příklad
Uvažujme případ, že klient banky má dva účty a chce převést určitou částku z jednoho účtu na druhý. Taková akce ve skutečnosti obnáší dvě operace. Tou první je odečtení částky z jednoho účtu a druhá je přičtení částky k druhému účtu. Pokud by po první operaci došlo k nějaké chybě a následně nedošlo k přičtení částky na druhý účet, klient by přišel o své peníze. Řešením je provedení operací pomocí transakce, kdy se průběh operací bude tvářit jen jako jedna operace. Pokud by při zpracování transakce došlo k nějaké chybě, změny se vrátí do původního stavu.