bazy_danych:transakcje

:wersja PDF

Transakcja to zbiór operacji na bazie danych, które mogą być wykonane jedynie wszystkie lub żadna.

Transakcja składa się zawsze z 3 etapów:

- rozpoczęcia (`BEGIN`)

- wykonania

- zamknięcia (`COMMIT` - zatwierdzenie, `ROLLBACK` - anulowanie)

W systemach bazodanowych istotne jest, aby transakcja trwała jak najkrócej. Każdy etap transakcji jest logowany. W razie awarii systemu dzięki zawartości logów można odtworzyć stan sprzed transakcji, która nie została zamknięta.

Transakcje opisuje zasada ACID - Atomicity, Consistency, Isolation, and Durability:

- Atomicity (niepodzielna) - transakcja może być wykonana tylko w całości albo wcale.

- Consistency (spójna) - stan bazy danych zawsze przedstawia stan przed lub po transakcji. Zapytania składane systemowi w czasie wykonywania transakcji muszą pokazywać sytuację przed transakcją, nie sytuację przejściową.

- Isolation (odizolowana) - transakcja dzieje się niezależnie od innych wykonywanych operacji, w tym od innych transakcji.

- Durability (trwała) - w przypadku krachu całego systemu bazodanowego, np. w wyniku odcięcia elektryczności, transakcja będzie albo wykonana w całości albo wcale.

# Poziomy izolacji ANSI

Poziom izolacji ANSI/ISO | Brudny odczyt | Odczyt nie dający się powtórzyć | Widmo
--- | --- | --- | ---
READ UNCOMMITED (Odczyt niezatwierdzony) | możliwy | możliwy | możliwy
READ COMMITED (Odczyt zatwierdzony) | niemożliwy | możliwy | możliwy
REPEATABLE READ (Odczyt dający sie powtórzyć) | niemożliwy | niemożliwy | możliwy
SERIALIZABLE (Odczyt uszeregowany) | niemożliwy | niemożliwy | niemożliwy

Brudny odczyt następuje wtedy gdy odczytane zostają informacje zmienione przez transakcje, która nie została jeszcze zatwierdzona.

Odczyt nie dający się powtórzyć to sytuacja w której transakcja odczytuje dane, następnie odczytuje je ponownie i dane te nie są identyczne. Sytuacja taka zachodzi jeżeli transakcje w trakcie swego wykonywania odczytują dane znajdujące się w bazie w momencie złożenia zapytania, a nie w momencie rozpoczęcia transakcji.

Odczyt widmo następuje w momencie gdy jedna transakcja modyfikuje dane, a druga w tym samym momencie (przed zakończeniem pierwszej) dodaje dane. W takiej sytuacji dane dodane w drugiej transakcji mogą nie być zmodyfikowane przez pierwszą.

Poziom izolacji transakcji ustawia się za pomocą polecenia:

`SET TRANSACTION LEVEL poziom`

Różne SZBD oferują różne poziomy izolacji. Zazwyczaj poziomem domyślnym jest `READ COMMITED`.