Oracle
Koncepce zamykání je zcela odlišná od koncepce ostatních systémů.
Když řádek v Oracle
se uzamkne, samotný záznam se aktualizuje novou hodnotou (pokud existuje) a navíc se přímo do záznamu umístí zámek (což je v podstatě ukazatel na zámek transakce, který se nachází v segmentu vrácení zpět).
To znamená, že zamykání záznamu v Oracle
znamená aktualizaci metadat záznamu a vydání logického zápisu stránky. Nemůžete například provést SELECT FOR UPDATE
v tabulkovém prostoru pouze pro čtení.
Kromě toho se samotné záznamy po odevzdání neaktualizují:místo toho se aktualizuje rollback segment.
To znamená, že každý záznam obsahuje nějaké informace o transakci, která jej naposledy aktualizovala, i když samotná transakce již dávno zemřela. Chcete-li zjistit, zda je transakce aktuální nebo ne (a tedy zda je záznam živý či nikoli), je nutné navštívit segment rollback.
Oracle nemá tradičního správce zámků, což znamená, že získání seznamu všech zámků vyžaduje skenování všech záznamů ve všech objektech. To by trvalo příliš dlouho.
Můžete získat některé speciální zámky, jako jsou zamčené objekty metadat (pomocí v$locked_object
), zámek čeká (pomocí v$session
) atd., ale nikoli seznam všech zámků na všech objektech v databázi.