Oracle
's låsekoncept er helt anderledes end de andre systemer.
Når en række i Oracle
bliver låst, opdateres selve posten med den nye værdi (hvis nogen), og derudover placeres en lås (som i det væsentlige er en pegepind til transaktionslås, der findes i tilbagerulningssegmentet) lige ind i posten.
Det betyder, at låsning af en post i Oracle
betyder opdatering af postens metadata og udstedelse af en logisk sideskrivning. For eksempel kan du ikke gøre SELECT FOR UPDATE
på et skrivebeskyttet tablespace.
Mere end det opdateres selve posterne ikke efter commit:I stedet opdateres rollback-segmentet.
Det betyder, at hver post indeholder nogle oplysninger om den transaktion, der sidst opdaterede den, selvom selve transaktionen for længst er død. For at finde ud af, om transaktionen er i live eller ej (og derfor, om posten er i live eller ej), er det nødvendigt at besøge rollback-segmentet.
Oracle har ikke en traditionel låsemanager, og det betyder, at opnåelse af en liste over alle låse kræver scanning af alle poster i alle objekter. Dette ville tage for lang tid.
Du kan få nogle specielle låse, såsom låste metadataobjekter (ved at bruge v$locked_object
), lås venter (ved hjælp af v$session
) osv., men ikke listen over alle låse på alle objekter i databasen.