sql >> Database teknologi >  >> RDS >> Oracle

Sådan finder du låste rækker i Oracle

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.



  1. FEJL 1045 (28000):Adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:JA)

  2. kryds anvende xml-forespørgsel klarer sig eksponentielt dårligere, efterhånden som xml-dokumentet vokser

  3. Kaldning af en lagret procedure inden for en lagret procedure

  4. Ret "profilnavn er ikke gyldigt" ved afsendelse af e-mail fra SQL Server