sql >> Base de Datos >  >> RDS >> Oracle

En Oracle SQL, ¿por qué las filas eliminadas (no confirmadas) no están visibles en la sesión actual pero sí en otras sesiones?

Además de la discusión de las propiedades ACID a las que ziesemer te refirió, debes saber sobre Control de concurrencia de múltiples versiones o MVCC. Si quiere saber 'todo al respecto', considere leer Control de concurrencia y recuperación en sistemas de bases de datos por Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (disponible para descargar).

En Oracle y otros DBMS MVCC similares, cuando inicia una transacción, se mantiene una nota de una marca de tiempo que identifica esa hora de inicio (pero el valor de la marca de tiempo no es necesariamente un simple valor de 'segundos desde la época de Unix'). Mientras se ejecuta esa transacción, no verá ningún dato insertado con una marca de tiempo después de su hora de inicio. El sistema mantiene disponibles las versiones anteriores de las páginas de datos para las transacciones que aún se están ejecutando. Cuando la transacción escribe una página, crea una nueva copia con una nueva marca de tiempo, pero esa copia no está disponible para otras transacciones hasta que se confirma la transacción que la modifica, e incluso entonces, solo está disponible para las transacciones que comienzan después de la confirmación.