Kontrola konkurenčných transakcií
Kontrola konkurenčných transakcií
Multipoužívateľské systémy riadenia bázy dát umožňujú prístup k tej istej databáze ľubovoľnému počtu transakcií. V takomto prípade je pre SRBD veľmi dôležitý mechanizmus, ktorý kontroluje, či sa konkurenčné transakcie navzájom pri práci neprekrývajú.
Problém stratenej zmeny dát: Transakcia T1 vyberie z tabuľky záznam R, hneď po nej nasleduje druhá transakcia T2, ktorá vyberie ten istý záznam. Transakcia T1 záznam R zmení a zmenu uloží. Transakcia T2 zmení pôvodný záznam R a zmenu uloží. V tomto momente sa zmena, ktorú vykonala transakcia T1, prepísala.
Problém nepotvrdenej závislosti: Transakcia T1 vyberie záznam R, zmení ho a pokračuje ďalej v práci. Transakcia T2 vyberie už zmenený záznam R a pracuje s ním. Pri práci transakcie T1 nastane chyba a systém urobí operáciu ROLLBACK, teda uvedie záznam R do pôvodného stavu. Teraz transakcia T2 pracuje s dátami, ktoré neexistujú a v podstate ani nikdy neexistovali.
Najrozšírenejší mechanizmus, ktorý zabezpečuje kontrolu konkurenčných transakcií, je uzamykanie záznamov (locking). Ak transakcia potrebuje istotu, že databázový záznam, s ktorým pracuje, sa nepredvídateľne nezmení, vyžaduje uzamknutie objektu, teda objekt zostane stabilný, kým to transakcia vyžaduje.
SRBD poskytuje dva typy uzamknutí objektu:
• výlučné uzamknutie (exclusive lock), ozn. X lock – ak transakcia potrebuje záznam zmeniť
• zdieľané uzamknutie (shared lock) ,ozn. S lock – v prípade výberu záznamu.
V situácii, keď transakcia robí výber záznamu a potom jeho zmenu, mení sa S na X lock.
Deadlock je situácia, keď dve a viac transakcií simultánne čakajú na seba navzájom, kým jedna z nich neuvoľní uzamknutie.