日期:2014-05-17  浏览次数:20744 次

关于undo的问题?
以前我以为undo 是日志文件的一种,但是别人回帖说,undo只是一个内存中的回滚段,不是日志文件?

但是这样的话,我又不明白了,如果undo是内存中的回滚段的话,那么服务器断电后,开机后数据库重启的时候如何进行undo操作呢(我记得数据库重新启动的时候是先利用redo日志文件进行redo操作然后再undo操作)?因为这个时候内存SGA、PGA重新分配已经没有undo回滚段了啊,而且undo又不是日志文件,那么如何进行undo操作呢?

------解决方案--------------------
undo 是数据的前映像, redo则是数据操作的记录,insert/update/delete的时候首先写redo,然后才是数据文件 

所以,断电的时候,还未写入redo log的操作会丢失,已经写入redo log的操作则被保存下来 

重启的时候,发现数据文件的SCN和Control file 的SCN不一致,需要进行恢复,则通过应用redo log 来进行恢复,最后检查哪些操作已经commit,哪些没有commit,没有commit的事务进行回退
------解决方案--------------------
顶。!
发现最近探讨的问题比以前越来越深入了,好样的!