Oracle
Koncepcja blokowania różni się od innych systemów.
Gdy wiersz w Oracle
zostaje zablokowany, sam rekord jest aktualizowany o nową wartość (jeśli istnieje), a ponadto blokada (która jest zasadniczo wskaźnikiem blokady transakcji, która znajduje się w segmencie wycofania) jest umieszczana bezpośrednio w rekordzie.
Oznacza to, że zablokowanie rekordu w Oracle
oznacza aktualizację metadanych rekordu i wydanie logicznego zapisu strony. Na przykład nie możesz wykonać SELECT FOR UPDATE
w obszarze tabel tylko do odczytu.
Co więcej, same rekordy nie są aktualizowane po zatwierdzeniu:zamiast tego aktualizowany jest segment wycofywania.
Oznacza to, że każdy rekord zawiera pewne informacje o transakcji, która ostatnio go zaktualizowała, nawet jeśli sama transakcja już dawno umarła. Aby dowiedzieć się, czy transakcja jest aktywna, czy nie (a co za tym idzie, czy rekord jest aktywny, czy nie), należy odwiedzić segment wycofania.
Oracle nie posiada tradycyjnego menedżera blokad, a to oznacza, że uzyskanie listy wszystkich blokad wymaga przeskanowania wszystkich rekordów we wszystkich obiektach. Zajęłoby to zbyt długo.
Możesz uzyskać specjalne blokady, takie jak zablokowane obiekty metadanych (używając v$locked_object
), blokada czeka (za pomocą v$session
) itp., ale nie lista wszystkich blokad na wszystkich obiektach w bazie danych.