1、Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文件。这两类重做日志文件都用于恢复;其主要目的是,万一实例失败或介质失败,它们能够恢复数据。由于数据库缓冲,对磁盘数据的更新不是实时的,但是对redo日志的更新会在commit之后确切发生。 如果在事务提交之后,磁盘数据更新之前,系统发生故障,在系统重启之后会将那些已经写入redo,但是还没有更新到磁盘的数据进行重做,这样系统就恢复到故障时间点之前了。 redo日志默认有3组,循环写入,第一组(每个组所有成员同时写入同样的信息)满了,切换到第二个,第二个满了切换到第三个,当所有组都写满之后,日志进程再次开始写第一个,后面的数据覆盖前面的数据,即为非归档模式。 鉴于redo如此重要,需要将已写满的日志归档,即复制内容到其他地方,生成数据库基本都是开启归档日志模式,但是会影响系统性能。
2、对数据执行修改时,数据库会生成undo信息,这样当你执行的事务或语句由于某种原因失败了,或者你用一条ROLLBACK语句请求回滚,就可以利用这些undo信息将数据放恢复到修改前的样子。redo用于在失败时重放事务(即恢复事务),undo则用于取消一条语句或一组语句的作用。undo保存在undo表空间中,且包含在redo日志中。当执行DML操作时,旧数据会写入undo中。事务回滚,未提交时,rollback,把undo中的旧数据重新写回数据段中;已提交时,进行闪回(flashback)操作 ,大多都是基于undo数据实现的。读一致性:用户检索数据时&#x