Databázová transakce

Z Wikipedie, otevřené encyklopedie

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á (atomická). 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]

Transakce převádí databázi z jednoho konzistentního stavu na druhý.[2] To znamená, že její účel je zajistit určité dynamické integritní omezení (tj. omezení, jež nespadá do kategorie tzv. databázových integritních omezení, jež jsou ovšem ze své podstaty statická). Například nelze ukončit převod peněz z účtu na účet bez toho, aby jak operace odečtení ze zdrojového účtu tak operace připočtení na cílový účet byly obě provedeny.

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 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.

Transakční bezpečnost[editovat | editovat zdroj]

Charakteristickým prvek transakce je to, buď proběhne úspěšně jako taková, nebo – v případě nějakých problémů a komplikací – se vrátí do původního stavu; tedy, nestane se, že by se proces „zadrhnul“ někde uprostřed. Vlastnost, která dokonání transakce v celku nebo bezpečný návrat do původního stavu dokáže zajistit, se nazývá transakční bezpečnost (tedy odolnost vůči případným problémům, které by transakci mohly uvrhnout do nedefinovaného stavu).

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  1. http://www.postgres.cz/index.php/Slovn%C3%ADk#ACID
  2. What is a Transaction?. Kernel Transaction Manager [online]. Microsoft, 2021-01-07 [cit. 2022-09-27]. Dostupné online. (anglicky)