Množina příkazů (operací), které jsou vedeny jako jeden celek.
Databázová transakce je jednotka, která převede databázi z jednoho konzistentního stavu do jiného konzistentního stavu.
Konzistentní stav znamená dodržení všech pravidel integritních pravidel, které požadujeme.
Vlastnosti:
-
A Atomicita → transakce proběhne celá nebo vůbec ne. Pokud některá část selže selže celá transakce.
-
C Konzistence → Transakce převede databázi jednoho konzistentního stavu do druhého a zaručuje, že do databáze budou zapsána pouze platná data. Pokud by mělo dojít k zapsání dat, která porušují integritní omezení celá transakce bude vrácena zpět a nedojde k žádným změnám.
-
I Nezávislost → částečné změny provedené během jedné transakce před jejím dokončením nejsou vidět jiným transakcím. To znamená, že když v jednom případě je spuštěno více transakcí tak tyto jsou od sebe izolovány a navzájem se neovlivňují
-
D Trvanlivost → Změny dat zapsané úspěšně ukončenou transakcí jsou v databázi uložené natrvalo.
declare @er int
begin transaction;
set @er = 0;
begin
if @er < > 0
begin
print 'transakce selhala';
rollback
end
else
begin
print 'transakce OK';
commit;
end
endImplementace transakcí:
Transakce se realizují dvěma způsoby:
-
Pomocí transakčního protokolu
-
Multigeneračně
Transakční protokol je soubor dat ve kterém má server uložené transakce a jejich průběh a s jehož pomocí lze vrátit vše do konzistentního stavu po pádu OS nebo selhání HW
K zajištění izolovanosti se používá zámků neboli zamykání dat na úrovni databáze/tabulky/řádku (page)
Zamykání znamená, že se jiným transakcím znemožní práce s daty, které používá právě probíhající transakce což vede k řazení transakcí do fronty a zpomalení paralelního zpracování.
Paralelní se zpracování se řeší:
-
Způsoby zamykání
-
Vstupní izolovanosti
Fylozofie se dále dělí na:
-
Optimistický způsob
-
Pesimistický způsob
U optimistické filozofie, že ve většině případů nebude docházet ke konfliktům při přístupu ke konkurenčním datům
Proto jsou data zamykána jen na nezbytně nutnou dobu a nepoužívají se na čtení
To ovšem může vést k deadlockům → jedna transakce zapne data, které potřebuje druhá transakce
To znamená navzájem na zdroje, které jsou blokovány → závislost do pruhu
Pesimistická filozofie zamyká data, ke kterým přistoupila jedna transakce i ke čtení, resp. záleží na vstupní izolaci dat, který má systém nastaven
Multigenerační přístup zapisuje do databáze společně s daty číslo transakce, která je vytvořila nebo změnila.
Jinak řečeno, každá změna v db je zapsána společně s číslem transakce
Při potvrzení aktualizační transakce, RDBMS zkontroluje jestli neexistují transakce s nižším transakčním číslem, které jsou aktivní, pokud ano vytvoří novou verzi aktualizovného záznamu o trasakci
Shrnutí:
-
Transakce se provádí když je více příkazů pohromadě (mimo SELECT)
-
@@error si hlídá systém sám takže kdyby nastal tak systém udělá rollback