Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Exklusive Tabellensperre (Lesesperre) bei Oracle 10g?

Wenn Sie nur verhindern möchten, dass eine andere Sitzung die Daten ändert, können Sie

ausgeben
LOCK TABLE whatever
/

Dadurch werden andere Sitzungen daran gehindert, die Daten zu aktualisieren, aber wir können andere Personen nicht daran hindern, sie zu lesen.

Beachten Sie, dass in Oracle eine solche Tabellensperre selten erforderlich ist, da Oracle eine Richtlinie der Lesekonsistenz anwendet. Das heißt, wenn wir eine Abfrage ausführen, die fünfzehn Minuten dauert, um die letzte zurückgegebene Zeile auszuführen, stimmt sie mit der ersten Zeile überein; mit anderen Worten, wenn die Ergebnismenge in umgekehrter Reihenfolge sortiert worden wäre, würden wir immer noch genau dieselben Zeilen sehen.

bearbeiten

Wenn Sie eine Warteschlange implementieren möchten (ohne tatsächlich Oracles integrierte erweiterte Warteschlangenfunktion ) dann SELECT ... FOR UPDATE ist der Weg zu gehen. Dieses Konstrukt ermöglicht es einer Sitzung, eine oder mehrere Zeilen auszuwählen und zu sperren. Andere Sitzungen können die entsperrten Zeilen aktualisieren. Die Implementierung einer echten Warteschlange ist jedoch ziemlich umständlich, es sei denn, Sie verwenden 11g. Nur in der neuesten Version hat Oracle das SKIP LOCKED unterstützt Klausel. Weitere Informationen .