sql >> Database >  >> RDS >> Oracle

Hoe vergrendelde rijen in Oracle te vinden

Oracle 's sluitconcept is heel anders dan dat van de andere systemen.

Wanneer een rij in Oracle wordt vergrendeld, wordt de record zelf bijgewerkt met de nieuwe waarde (indien aanwezig) en bovendien wordt een vergrendeling (die in wezen een verwijzing is naar transactievergrendeling die zich in het terugdraaisegment bevindt) rechtstreeks in de record geplaatst.

Dit betekent dat het vergrendelen van een record in Oracle betekent het bijwerken van de metagegevens van het record en het uitgeven van een logische paginaschrijfactie. U kunt bijvoorbeeld SELECT FOR UPDATE . niet doen op een alleen-lezen tabelruimte.

Meer nog, de records zelf worden niet bijgewerkt na het vastleggen:in plaats daarvan wordt het terugdraaisegment bijgewerkt.

Dit betekent dat elk record enige informatie bevat over de transactie die het voor het laatst heeft bijgewerkt, zelfs als de transactie zelf al lang niet meer bestaat. Om erachter te komen of de transactie actief is of niet (en dus of het record actief is of niet), moet u het terugdraaisegment bezoeken.

Oracle heeft geen traditionele vergrendelingsmanager en dit betekent dat voor het verkrijgen van een lijst van alle vergrendelingen alle records in alle objecten moeten worden gescand. Dit zou te lang duren.

U kunt een aantal speciale vergrendelingen verkrijgen, zoals vergrendelde metadata-objecten (met behulp van v$locked_object ), wacht wacht (met behulp van v$session ) etc, maar niet de lijst met alle sloten op alle objecten in de database.



  1. Hoe verbinding maken met de SQL Server-database vanuit JavaScript in de browser?

  2. Fouten negeren met psql \copy meta-command

  3. Een reeks datums genereren

  4. Pas op waar u op let