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.