日期:2014-05-16  浏览次数:20597 次

Oracle redo undo commit rollback剖析

?

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语句,但是oracled