当前位置:  数据库>oracle

理解redo(6)日志却的流程和直接路径加载的REDO分析

    来源: 互联网  发布时间:2017-05-06

    本文导语: 当server process得到redo allocation latch进行redo log buffer分配之前,需要先嗅一下redo log file是否有足够的空间。倘若空间不足,则sp会发送switch log file的请求,然后坐等log file switch completion事件的完成了。 日志却请求发出后,CKPT会进行...

当server process得到redo allocation latch进行redo log buffer分配之前,需要先嗅一下redo log file是否有足够的空间。倘若空间不足,则sp会发送switch log file的请求,然后坐等log file switch completion事件的完成了。

日志却请求发出后,CKPT会进行一次增量检查点事件,而LGWR开始进行日志却换工作。

具体流程如下:

1)LGWR进程会通过控制文件中的双向链表,查找到一个可用的REDO LOG文件,作为新的CURRENT REDO LOG。

算法如下:

日志文件是inactive,并且已经归档了

优先使用unused日志文件组

2)将redo log buffer中还未写入的redo entries flush到current online redo log file,并且将最后一条redo entries的SCN作为本日志文件的high SCN记录在redo log header里面,然后关闭current online redo log file。

3)进行第二次控制文件事务,将刚刚关闭的REDO LOG标识为ACTIVE(这是个增量检查点事件,之所以标识为active,是因为它所保护的dirty buffer可能还未写到数据文件,如果已经全部写到磁盘了,则可以标识为inactive)将新的当前REDO LOG标识为CURRENT,如果数据库处于归档模式,还要将老的日志组记录到控制文件归档列表记录中,并且通知ARCn对该日志文件进行归档。

4)LGWR打开新的日志组的所有成员,在日志文件头记录当前日志sequence#和第一个redo block 的SCN(LOW SCN)

5)LGWR修改SGA中的标志位,允许生成新的REDO LOG信息

综上所述,日志切换是一种较为昂贵的操作。因为在却换期间,对数据库所有的交易都将被阻塞。但是加大REDO LOG文件大小和丢失数据的多少是无关的。理由:

1)redo entries是顺序写入的,写入一个和写入多个,对于恢复而言是一样的

2)存储故障,受影响的肯定是所有的REDO LOG文件

ARCHIVE模式下,直接路径加载会记录REDO。在非ARCHIVE LOG 模式下,直接路径加载这个动作不会记录REDO,但是Oracle由于系统改动需要维护段、区、表空间等而会产生REDO的。

下面将redo log file给dump出来

  • 09:29:36 sys@ORCL (^ω^) conn hr/hr  
  • 已连接。  
  • 09:34:57 hr@ORCL (^ω^) create table test as select * from dba_objects where 1=2;  

  •     
     
     

    您可能感兴趣的文章:

     
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • DirectDraw:lpitch的理解
  • 分布式系统的故障独立性如何理解
  • 对TCP协议状态及状态转换理解
  • 套接字应该怎么理解
  • c/c++内存堆分配和栈分配理解
  • 如何理解fork函数返回2次啊?
  • 请问下面一句话应该怎样理解?
  • 句柄?句柄?“句柄”到底是什么东西?怎样理解?
  • unsigned char modeflags :5;是如何来理解?
  • 问一个《深入理解计算机系统》中的问题
  • 深度理解try{}cathc(){}
  • 深入理解PHP内核 TIPI
  • 求最容易理解,最容易上手的java书籍,servlet书籍,请指教,谢谢!!
  • 在JTree中的USEROBJECT有什么用处,我一直不理解?
  • 如何理解ResourceBundle和Locale?和应用的场合?谢谢
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • System.gc();怎么理解?
  • system.map文件的作用和理解
  • sembuf.sem_num到底如何理解?--初学者向各位请教
  • 如何准确理解“程序”、“进程”、“线程”这三个概念
  • makefile这句话应该则怎么理解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,