Oracle
Концепцията на заключване е доста различна от тази на другите системи.
Когато има ред в Oracle
се заключва, самият запис се актуализира с новата стойност (ако има такава) и в допълнение, заключване (което по същество е указател към заключване на транзакцията, което се намира в сегмента за връщане назад) се поставя направо в записа.
Това означава, че заключването на запис в Oracle
означава актуализиране на метаданните на записа и издаване на логическа запис на страница. Например, не можете да направите SELECT FOR UPDATE
в таблично пространство само за четене.
Нещо повече, самите записи не се актуализират след комит:вместо това сегментът за връщане назад се актуализира.
Това означава, че всеки запис съдържа известна информация за транзакцията, която го е актуализирала последно, дори ако самата транзакция отдавна е умряла. За да разберете дали транзакцията е жива или не (и следователно дали записът е жив или не), е необходимо да посетите сегмента за връщане назад.
Oracle няма традиционен мениджър на заключване и това означава, че получаването на списък с всички ключалки изисква сканиране на всички записи във всички обекти. Това ще отнеме твърде много време.
Можете да получите някои специални ключалки, като заключени обекти с метаданни (използвайки v$locked_object
), заключване изчаква (използвайки v$session
) и т.н., но не и списъкът с всички заключвания на всички обекти в базата данни.