首页 > 代码库 > redo 和 undo

redo 和 undo

redo->记录所有操作,用于恢复(redo records all the database transaction used for recovery)

Redo的作用是恢复已提交的事务,从而保证无论在介质失败还是实例失败时,都可以恢复用户已提交的事务,使数据库达到一致状态。

Redo功能的实现依赖于以下三个组件:

 log buffer

 lgwr

 联机重做日志文件和归档日志文件

 

 

 

undo->记录所有的前印象,用于回滚(undo is used to store uncommited data infor used for rollback)

 

Undo的作用是:

 

回滚操作;

 

支持读一致性;

 

恢复失败的事务。

 

Undo的实现是通过Undo表空间内的undo段来实现的。每个事务只被分配一个undo段,undo段可以服务于多个事务。

 

Undo机制只是逻辑地把数据恢复到修改前的状态,而不是物理地恢复。

 

 

 

 

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

 

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

redo 和 undo