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 transakcí[editovat | editovat zdroj]

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

  • A - Atomicity - atomicita
  • C - Consistency - konzistence
  • I - Isolation - izolovanost
  • D - Durability - trvalost

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). Více viz atomicita.

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 (ROLLBACK) není zasažena jiná transakce, jinak i tato musí být vrácena. V důsledku tohoto chování může dojít k tzv. řetězovému vrácení (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.

Globální vs. lokální[editovat | editovat zdroj]

  • Lokální transakce probíhá pouze na 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 na různých uzlech. Z toho vyplývá, že je-li nutné provést určitou transakci, tato musí být rozčleněna na dílčí transakce, které jsou pak vykonány na příslušných uzlech.

Optimistické vs. pesimistické[editovat | editovat zdroj]

Transakce se mohou lišit podle způsobu zpracování 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/změně dat se odznačí příznak dočasnosti a data se stanou platnými. (Tento způsob se dá přibližně připodobnit přepisu souboru, při kterém se nejdříve nová verze souboru nakopíruje pod dočasným jménem a teprve poté se tento soubor přejmenuje za starý a tím ho nahradí.)
  • U optimistického zpracování se (optimisticky) předpokládá, že při transakci nenastane chyba a nebude třeba ji vrátit zpět (přestože tato možnost je zachována). 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 vytváří tzv. rollback log coby seznam SQL příkazů, které dokáží prováděné změny 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 s chybou. Naopak, na konci transakce, při které k žádné takové chybě nedošlo, se rollback log 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 transakce[editovat | editovat zdroj]

  • Aktivní - od počátku provádění transakce
  • Částečně potvrzený - stav po provedení poslední operace transakce
  • Chybný - nelze pokračovat v normálním průběhu transakce
  • Zrušený - nastane po skončení operace ROLLBACK
  • Potvrzený - po úspěšném vykonání 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) tak 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