日期:2014-05-16 浏览次数:20620 次
?
redo--> undo-->datafile?
insert一条记录时,表跟undo的信息都会放进?redo?中,在commit?或之前, redo?的信息会放进硬盘上。?故障时, redo?便可恢复那些已经commit?了的数据。?
redo->
每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新把数据更新到数据文件。
?
undo->
记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到原来的数据
?
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的d