sql >> Databasteknik >  >> RDS >> Oracle

Hur man hittar låsta rader i Oracle

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.



  1. Exportera SQLite-databas till XML-fil

  2. MySQL TEXT vs BLOB vs CLOB

  3. Skicka e-post med bilagor i Oracle D2k, Oracle Forms 10g, Oracle Forms 6i

  4. SQL OVER()-satsen - när och varför är den användbar?