ITPub博客

首页 > 数据库 > Oracle > oracle重做日志组状态及切换解析

oracle重做日志组状态及切换解析

原创 Oracle 作者:yushi2262 时间:2014-05-08 20:16:07 0 删除 编辑
      Oracle重做日志(redo log)是用来记录操作条目,用于数据库数据恢复。为了提高效率,oracle通常建议设置三组redo log。本文将对重做日志组的状态以及多种状态之间切换做解析,力求掌握该知识点。
一.概述
  oracle重做日志组通常有四种状态,即unused,inactive,active,current。
  unused通常指从未被使用的日志组,即新添加的日志组。
  current状态为LGWR进程正把redo log buffer的日志写进日志组中。
  active为刚刚完成日志切换后的状态,此时该日志组中提交的事务引起的数据改变还没有完全从DB buffer cache写入到数据文件中,因此该日志组还不能被覆盖,并且待完全写入后变为inactive
状态。所以如果发生数据库crash,该日志组是实例恢复必需的日志组。如果数据库为归档模式,那么是在该状态下完成归档的。
  inactive状态的日志可以被覆盖,可以允许写入日
志,并且oracle判断不需要进行实例恢复。如果是在归档模式下,那么此阶段证明归档已经完成。
二.实验
本次实验以开启归档模式为例:
日志组为三组,状态分别为inactive,inactive,current。如图:

手动归档后,观察发现组1的状态变为current,组3的状态变为active,组2的状态不变 。如下图:

说明当前写入的日志组为组1,组3正在进行归档和进行必要的数据写入至datafile。待这两项工作完成后,再看如下图:

说明组3已经完成了归档,可以允许下一次写入了。在非归档模式下,组3的状态也能变成inactive,说明完成了数据从DB BUFFER CACHE写入至DB files。
三、总结
    上述实验很好的说明了oracle日志组在整个生命周期所具有的状态。当然没有看到unused状态,这种状态是当日志组刚新添到数据库后的状态,这种操作在生产环境中很少,所以本次实验没有看到这种状态。
    另外有人会认为在手动日志切换时为什么使用命令alter system archive log current。这里也做一个说明。
     两组命令最后的效果一样。alter system switch logfile是不等归档完成就进行switch logfile操作,速度快,尤其在非归档模式下适用,对当前实例生效。而alter system archive log current要等待归档完成才操作,对所有实例生效。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29620680/viewspace-1157026/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-04-21

  • 博文量
    8
  • 访问量
    22403