Blokování (DBMS)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 17. prosince 2019; ověření vyžaduje 1 úpravu .

Zámek ( angl.  lock ) v DBMS  – značka zachycení objektu transakcí s omezeným nebo výhradním přístupem, aby se zabránilo kolizím a zachovala se integrita dat .

Blokující klasifikace

Podle rozsahu jsou zámky klasifikovány na malá písmena, granulární a predikátové. Podle závažnosti se zámky dělí na společné ( anglicky  shared ) a exkluzivní (exclusive, anglicky  exclusive ). Podle logiky implementace se blokování dělí na optimistické a pesimistické.

Podle rozsahu

Zámek řádků  - působí pouze na jeden řádek databázové tabulky, aniž by omezoval manipulace s ostatními řádky tabulky.

Granulární zámek  – ovlivňuje celou tabulku nebo celou stránku a všechny řádky. Zámek, který omezuje manipulaci se stránkou dat v tabulce (množina řádků spojených atributem sdíleného úložiště), se někdy nazývá zamykání stránky . 

Predikátový zámek působí na oblast ohraničenou predikátem. Obvykle se jedná o zámek na klíč . U takového zámku určuje klíč nebo index hodnotu nebo rozsah hodnot, na které se zámek vztahuje. Takový zámek (stejně jako celotabulkový zámek) mimo jiné chrání před fantomovým čtením a poskytuje úroveň izolace transakcí serializovatelných.

Podle závažnosti

Sdílený zámek je získán transakcí na objektu, pokud je operace, kterou provádí, bezpečná, to znamená, že nemění žádná data a nemá žádné vedlejší účinky . Všechny transakce zároveň mohou provádět operaci stejného typu na objektu, pokud má sdílený zámek, obvykle se takový zámek používá pro operace čtení.

Exkluzivní zámek je umístěn na objekt transakcí, pokud operace, kterou provádí, změní data. Pouze jedna transakce může provést takovou operaci s objektem, pokud má výhradní zámek. Zámek nelze umístit na objekt, pokud již má sdílený zámek.


Podle implementační logiky

Pesimistický zámek je umístěn před navrhovanou změnou dat na všech řádcích, u kterých se očekává, že změna ovlivní. Po dobu trvání takového uzamčení je vyloučena úprava dat z relací třetích stran, data z uzamčených řádků jsou dostupná podle úrovně izolace transakce . Po dokončení zamýšlené úpravy je zaručen konzistentní záznam výsledků.

Optimistické zamykání neomezuje úpravy zpracovávaných dat relacemi třetích stran, ale před zahájením navrhované úpravy si vyžádá hodnotu některého vybraného atributu každého z datových řádků (obvykle název VERSIONa typ celého čísla s použije se počáteční hodnota 0). Před zápisem úprav do databáze je znovu zkontrolována hodnota vybraného atributu, a pokud se změnila, transakce je odvolána nebo jsou aplikována různá schémata řešení kolizí. Pokud se hodnota vybraného atributu nezměnila, provede se změny se současnou změnou hodnoty vybraného atributu (například increment ), aby signalizovaly ostatním relacím, že se data změnila.