Oracle
s låskoncept skiljer sig ganska mycket från de andra systemen.
När en rad i Oracle
låses, uppdateras själva posten med det nya värdet (om något finns) och dessutom placeras ett lås (som i huvudsak är en pekare till transaktionslås som finns i återställningssegmentet) direkt in i posten.
Detta innebär att låsa en post i Oracle
innebär att uppdatera postens metadata och utfärda en logisk sidskrivning. Du kan till exempel inte göra SELECT FOR UPDATE
på ett skrivskyddat tabellutrymme.
Mer än så uppdateras inte själva posterna efter commit:istället uppdateras återställningssegmentet.
Det betyder att varje post innehåller viss information om transaktionen som senast uppdaterade den, även om själva transaktionen för länge sedan har dött. För att ta reda på om transaktionen är levande eller inte (och följaktligen om posten är levande eller inte), måste du besöka återställningssegmentet.
Oracle har ingen traditionell låshanterare, och det betyder att för att få en lista över alla lås krävs att man skannar alla poster i alla objekt. Detta skulle ta för lång tid.
Du kan få några speciella lås, som låsta metadataobjekt (med v$locked_object
), lås väntar (med v$session
) etc, men inte listan över alla lås på alla objekt i databasen.