Oracle中的Redo和Undo简单介绍

Redo(重做)

除了用于保存数据的数据文件外,每个oracle数据库都会有一组(两个或多个)重做日志文件。重做日志用于保存对数据的所有修改,包括提交的和未提交的修改。在把对数据的修改写到数据文件之前,所有的修改都被写到重做日志中。

 

重做日志的主要目的是在实例失败或者介质损坏时,帮助把数据库恢复到一个合理的状态。例如:当进行实例恢复时,重做日志可以重做那些已经提交但是还没有把修改写入到数据文件中的事务。

 

重做日志由两部分组成:在线重做日志和归档重做日志。为了避免发生单点故障,Oracle会创建多组在线重做日志文件。如果数据库工作在ARCHIVELOG模式,Oracle将在每个检查点创建归档日志,他们可以用于磁盘损坏时的数据库恢复。所以对于生产系统来说,归档重做日志是很重要的,应该把生产系统设置为ARCHIVELOG模式。归档重做日志应该定期的备份和删除。

 

Oracle会重用重做日志文件,当一个日志文件写满时就会切换到另一个日志文件,因此在进行日志切换之前,需要确保前一个日志可以被重写,这是通过建立检查点来实现的,这时DBWn进程将把该日志文件保护的所有脏块写入到磁盘。因此,重做日志文件的大小直接影响建立检查点的频率和性能,建立检查点的频率会根据系统活动发生很大的变化,但是通常情况下是23个小时建立一次。

 

Undo(撤消)

Oracle把所有即将被修改(即执行updatedelete等)的数据记录到undo段中,即在数据被修改之前,Oracle把他们记录到undo段中。

 

Undo信息有两个用途:1.实现Oracle中的多版本机制,从而使读不阻塞写,写也不阻塞读。2.当回滚一个事务时用于把数据库恢复到该事务执行前的状态。

 

回滚段也会被重用,因此应该把回滚段设置成足够大。否则,有可能发生ORA-01555:snapshot too old错误,发生这种错误的一般是因为回滚段设置的太小。例如:你在读取一个数据表中的记录,另一个用户更新该表中你正要读取的记录并且提交了更新,这时你读取那个时点的数据就会被写入到回滚段中,你将从回滚段中读取这些记录,如果这些数据所在的回滚段被覆盖了,就会发生snapshot too old错误。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值