关于Oracle的redo和undo的理解

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

redo 记录了所有操作,用于恢复( redo records all the database transaction used for recovery)
undo 记录了所有的前印象,用于回滚( undo is used to store uncommited data infor used for rollback)

redo 已递交的事务,实例恢复时要写到数据文件去的
undo 未递交的事务.

redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。因为该数据已经提交,但是只存在联机日志文件中,所以在恢复时需要将数据从联机日志文件中找出来,重新应用一下,使已经更改数据在数据文件中也改过来!

undo的原因是:在oracle正常运行时,为了提高效率,加入用户还没有commit,但是空闲内存不多时,会由DBWR进程将脏块写入到数据文件中,以便腾出宝贵的内存供其它进程使用。这就是需要 UNDO的原因。因为还没有发出commit语句,但是oracle的dbwr进程已经将没有提交的数据写到数据文件中去了。

undo 也是也是datafile, 可能dirty buffer 没有写回到磁盘里面去。
只有先 redo apply 成功了,才能保证 undo datafile 里面的东西都是正确的,然后才能rollback

undo的目的是使系统恢复到系统崩溃前(关机前)的状态,再进行 redo是保证系统的一致性.
不做 undo,系统就不会知道之前的状态,redo就无从谈起

所以instance crash recovery 的时候总是先rollforward, 再rollback

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23577591/viewspace-691725/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23577591/viewspace-691725/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值