I'm no DBA, and I'm having a bit of a hard time understanding Oracle's transaction management process.
From what I understood by reading some reliable-looking pages on the Internet (most notably this AskTom note -- but don't bother with the comments), when a transaction is commited, the new data is not reported on the actual data block yet, but stays logged on the rollback segment. When someone issues a SELECT on the data, or when UNDO_RETENTION seconds have passed -- whichever of these two events happens first --, the new data is then (and only then) written on the data blocks.
But someone in our company, supposedly in the know, recently told me the opposite : according to him, when a transaction is commited, the new data is immediately written on the data blocks, and the rollback segment/undo tablespace keeps the old data for a duration of UNDO_RETENTION seconds. This old data stays available during this time for access by queries launched on SCNs prior to the transaction.
So, what really happens inside Oracle, and can you provide references to back up your reply ?
We're using Oracle 9.2.0.8.
Thanks in advance.