老师说的:
redo->已递交的事务,实例恢复时要写到数据文件去的 
undo->未递交的事务.断电的时候先undo然后再redo呢?个人感觉只需要redo一次就够了吧,把未commit的数据写入data files不就行了吗?

解决方案 »

  1.   

    http://space.itpub.net/?uid-118838-action-viewspace-itemid-474642这上面讲的比较详细,去看看吧!
      

  2.   

    其实就字面来理解吧, 参考word中的undo、redo 
      
    每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新把数据更新到数据文件 
      
    undo,记录更改前的一份copy,但你/系统rollback时, 把这份copy重新覆盖到原来的数据
      

  3.   

    断电的时候,我觉得没有redo和undo的先后之分了;同时停止
    我看参考书这样写:
    1.禁止建立新的连接,并且不允许连接到数据上的用户执行新的事务;
    2.立即终止sql语句的执行
    3.不回退所有正执行的事务
    4.数据库高速缓存的内存不会写到数据文件中
    5.重做日志缓存不会写到重做日志文件中;
    6.oracle断开所有连接
      

  4.   

    undo 是数据的前映像, redo则是数据操作的记录,insert/update/delete的时候首先写redo,然后才是数据文件所以,断电的时候,还未写入redo log的操作会丢失,已经写入redo log的操作则被保存下来重启的时候,发现数据文件的SCN和Control file 的SCN不一致,需要进行恢复,则通过应用redo log 来进行恢复,最后检查哪些操作已经commit,哪些没有commit,没有commit的事务进行回退
      

  5.   


    嗯,那断电之后数据库从新启动的时候,redo以及undo如何做呢?
      

  6.   


    没有错,这是oracle数据库的数据一致性所需要做的工作,一致性指的就是数据文件、日志文件、控制文件。只有这样做了,三个文件的SCN号才能保持一致。关于SCN的解释请参考http://hi.baidu.com/h_sn999/blog/item/d15430ce755f3639b700c82f.html