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

Warum sind in Oracle SQL die gelöschten (nicht festgeschriebenen) Zeilen in der aktuellen Sitzung nicht sichtbar, aber in anderen Sitzungen sichtbar?

Sowie die Diskussion von ACID-Eigenschaften, zu denen ziesemer Sie weitergeleitet haben, sollten Sie über Multi-Version Concurrency Control Bescheid wissen oder MVCC. Wenn Sie „alles darüber“ wissen möchten, lesen Sie Concurrency Control und Wiederherstellung in Datenbanksystemen von Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (als Download verfügbar).

In Oracle und anderen ähnlichen MVCC-DBMS wird beim Starten einer Transaktion ein Zeitstempel vermerkt, der diese Startzeit identifiziert (aber der Zeitstempelwert ist nicht unbedingt ein einfacher Wert „Sekunden seit der Unix-Epoche“). Während diese Transaktion ausgeführt wird, werden keine Daten mit einem Zeitstempel nach ihrer Startzeit eingefügt. Das System hält frühere Versionen der Datenseiten für noch laufende Transaktionen verfügbar. Wenn die Transaktion eine Seite schreibt, erstellt sie eine neue Kopie mit einem neuen Zeitstempel, aber diese Kopie wird anderen Transaktionen nicht zur Verfügung gestellt, bis die ändernde Transaktion festgeschrieben wird, und selbst dann wird sie nur Transaktionen zur Verfügung gestellt, die nach der Festschreibung beginnen.