Oracle
 sql >> Database >  >> RDS >> Oracle

In Oracle SQL, perché le righe eliminate (non vincolate) non sono visibili nella sessione corrente ma sono visibili in altre sessioni?

Oltre alla discussione sulle proprietà ACID a cui ziesemer ti ha segnalato, dovresti conoscere il Controllo della concorrenza multi-versione o MVCC. Se vuoi sapere "tutto al riguardo", considera la lettura di Controllo della concorrenza e ripristino nei sistemi di database di Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (disponibile per il download).

In Oracle e altri DBMS MVCC simili, quando si avvia una transazione, viene conservata una nota di un timestamp che identifica quell'ora di inizio (ma il valore del timestamp non è necessariamente un semplice valore di "secondi dall'epoca di Unix"). Mentre la transazione è in esecuzione, non vedrà alcun dato inserito con un timestamp dopo l'ora di inizio. Il sistema mantiene disponibili le versioni precedenti delle pagine dati per le transazioni ancora in esecuzione. Quando la transazione scrive una pagina, ne crea una nuova copia con un nuovo timestamp, ma tale copia non viene resa disponibile ad altre transazioni fino al commit della transazione di modifica e, anche in questo caso, viene resa disponibile solo alle transazioni che iniziano dopo il commit.