The following is an excerpt from an ORACLE book
During cache recovery, Oracle replays the transactions from the online redo log files since the last checkpoint. During this roll forward operation, both committed and uncommitted changes are applied to the data files. At the end of the roll-forward operation, the data files will have committed changes, uncommitted changes that were written to the data files to free up buffer cache space and uncommitted changes applied by the roll-forward operation. The database can be opened as soon as cache recovery is complete.
The sentece in bold above is the one I don't understand. How can a redo log file generate uncommited data since all its information are recorded after COMMIT ?
Further it says
In the transaction-recovery phase of instance recovery, Oracle applies undo blocks to roll back uncommitted changes in data blocks that were either written before the instance crash or made by the roll-forward operation during cache recovery.
I understand that if dirty blocks were written to disk without a prior COMMIT (if at all possible), during transaction recovery, undo blocks can be used to roll them back. BUT how can undo blocks can be used to rollback uncommitted changes (what arethose changes anyaway...) introduced by replaying redo logs during cache recovery ?
Hmmm I don't get it since online redo log, which should only contain committed information, create uncommited information during instance recovery.