Quote:
Originally posted by jmodic
But of course they are recorded in archived redologs. But it is recorded in the archived redo logs where transaction has been commited, not in the redo log where transaction has started.
Immagine this scenario:
Transaction is started at T0 and the current redo log will be archived as arclog number 100. This same transaction is commited later on at time T1. There have been 99 log switches betven T0 an T1. So when the current redo log is archived it is stored as archlog number 200. The marker that the transaction was commited is stored in archlog #200, not in #100!
Now you are performing media recovery. Recover process starts roll forward of archlog #100 and finds your transaction was started. Now what? Should it start checking all archlogs generated after that untill it finds whether it has been commited or not? For each and every started transaction!!?? Can you immagine the overhead? The recovery might take ages to complete!
Oracle has actually implemented something simmilar to what you have suggested in 9i. It is simmilar only in principle, not in implementation - they are not checking which tranasctions were commited, but which changes in redo stream have allready been written to disks, so they are not dirty anymore and need no recovery. But there is one HUGE difference: They have implemented this only for instance recovery, not for media recovery. In instance recovery Oracle has to check only changes in online redo logs, which are typicaly relatively small. But it is unfeasable to do so in media recovery where you might have thousands of archlogs to apply...
Very well explained. Thanks a TON.