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

Wird Oracle die gesamte Tabelle sperren, während eine DML-Anweisung ausgeführt wird, oder nur die Zeile

Wir können Sperren explizit mit dem Befehl LOCK TABLE erteilen. Weitere Informationen

Andernfalls sperrt eine Einfügung keine anderen Zeilen. Aufgrund des Leseisolationsmodells von Oracle existiert diese Zeile nur in unserer Sitzung, bis wir sie festschreiben, sodass niemand sonst etwas damit anfangen kann. Weitere Informationen .

Eine Update-Anweisung sperrt nur die betroffenen Zeilen. Es sei denn, wir haben mit SELECT ... FOR UPDATE eine pessimistische Sperrstrategie implementiert. Erfahren Sie mehr .

Schließlich blockieren Writer in Oracle keine Reader. So können sogar gesperrte Zeilen von anderen Sitzungen gelesen werden, sie können nur nicht geändert werden. Erfahren Sie mehr .

Dieses Verhalten ist in den Oracle-Kernel eingebettet und kann nicht konfiguriert werden.

Justin macht einen guten Punkt in Bezug auf die DDL-Sperre auf Tabellenebene. Diese Sperre bewirkt, dass eine Sitzung, die DDL für die Tabelle ausführt, wartet, bis die DML-Sitzung festgeschrieben wird, es sei denn, die DDL ist so etwas wie CREATE INDEX, in diesem Fall schlägt sie sofort mit ORA-00054 fehl.