Databázová transakce

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Databázová transakce je skupina příkazů, které převedou databázi z jednoho konzistentního stavu do druhého.

Vlastnosti[editovat | editovat zdroj]

Databázové transakce musí splňovat tzv. vlastnosti ACID:[1]

  • atomicitu (angl. atomicity, A);
  • konzistenci (angl. consistency, C);
  • izolovanost (angl. isolation, I);
  • trvalost (angl. durability, D).

Atomicita[editovat | editovat zdroj]

Databázová transakce je jako operace dále nedělitelná (atomární). Provede se buď jako celek, nebo se neprovede vůbec (a daný databázový systém to dá uživateli na vědomí, např. chybovým hlášením). Vizte atomicitu.

Konzistence[editovat | editovat zdroj]

Při a po provedení transakce není porušeno žádné integritní omezení.

Izolovanost[editovat | editovat zdroj]

Operace uvnitř transakce jsou skryty před vnějšími operacemi. Vrácením transakce (operací ROLLBACK) není zasažena jiná transakce, a když ano, i tato musí být vrácena. V důsledku tohoto chování může dojít k tzv. řetězovému vrácení (angl. cascading rollback).

Trvalost[editovat | editovat zdroj]

Změny, které se provedou jako výsledek úspěšných transakcí, jsou skutečně uloženy v databázi, a již nemohou být ztraceny.

Rozsah[editovat | editovat zdroj]

  • Lokální transakce – probíhá pouze v jediném uzlu.
  • Globální (distribuovaná) transakce – přesahuje rozsah jednoho uzlu.

U distribuovaných databází jsou data rozdělena do dílčích částí, které jsou umístěny v různých uzlech. Z toho vyplývá, že je-li nutné provést určitou transakci, tato musí být před provedením na jednotlivých uzlech rozčleněna na dílčí transakce.

Způsob zpracování[editovat | editovat zdroj]

Podle způsobu zpracování se transakce dělí na na pesimistické a optimistické:

  • U pesimistického zpracování se v jeho průběhu změny zaznamenávají do dočasných objektů (například a nejčastěji do řádků tabulek s příznakem dočasných dat, platných jen po dobu transakce), a teprve po přesunu či změně dat se odznačí příznak dočasnosti, a data se tak stanou platnými. Tento způsob lze přirovnat k několika netriviálním změnám v souboru, které se do něj zanesou tak, že vlastní úprava souboru proběhne v souboru pod jiným, dočasným názvem, který se na samém začátku operace vytvoří duplikací (jakoby se odzálohuje), načež se tento soubor s dočasným jménem přejmenuje na trvalý (původní) název (tj. operace, jež v sobě sdružuje zánik původního obsahu a zánik souboru s dočasným názvem, a po níž je zůstane jen nový obsah pod původním názvem souboru).
  • U optimistického zpracování se (optimisticky) předpokládá, že při transakci nenastane chyba, a provedené změny nebude třeba vrátit zpět (přestože tato možnost se připouští). Měněné záznamy v tabulkách jsou při optimistickém zpracování transakce zapisovány „natvrdo“, současně s tím se však, coby seznam SQL příkazů, vytváří tzv. rollback log, na základě něhož je transakcí zastřešené změny možné vrátit zpět. V případě, že při transakci dojde k nějaké nezotavitelné chybě, tento log se provede a transakce (aby dodržela pravidlo atomicity) skončí ve výchozím stavu, načež se vyvolá chyba. V opačném případě, tedy když transakce proběhne bez výskytu nezotavitelné chyby, se na jejím konci rollback log stává bezpředmětným (typicky se maže).

Žurnály[editovat | editovat zdroj]

Jsou záznamy, které uchovávají informace o průběhu transakcí a slouží k zotavení po vzniklé chybě. Žurnály musí být v každém uzlu a obsahují záznamy o historii každé transakce.

Stavy[editovat | editovat zdroj]

  • Aktivní – od počátku provádění transakce.
  • Částečně potvrzený – po provedení poslední operace transakce.
  • Chybný – nelze pokračovat v normálním průběhu transakce.
  • Zrušený – po skončení operace ROLLBACK.
  • Potvrzený – po úspěšném vykonání operace COMMIT.

Prováděné operace[editovat | editovat zdroj]

Pro práci s transakcemi je nutné zavést následující operace:

  • BEGIN – začátek transakce;
  • COMMIT – ukončení transakce a uložení dosažených výsledků do databáze;
  • ROLLBACK – odvolání změn; není-li definován savepoint (místo, po které lze provedené změny vrátit zpět), návrat do stavu před započetím vykonávání transakce.

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  1. http://www.postgres.cz/index.php/Slovn%C3%ADk#ACID