`
leili
  • 浏览: 179512 次
社区版块
存档分类
最新评论

理解redo(5)深入学习RBA

阅读更多

    1 定义

              RBA就是redo entries在重做日志文件中所对应的地址

 

    2 组成

               RBA由三部分组成:
                                              序列号(4个字节)
                                              块号(4个字节)
                                              起始字节(2个字节)
               以上都是16进制存储

 

    3 类型

                3.1 LRBA

                      定义:块第一次变脏时所对应的redo entries在redo log file里的位置

                      注释:CKPT-Q按LRBA的顺序维护脏块,执行检查点事件时,DBWn从CKPT-Q按LRBA的顺序写出。LRBA也就是checkpoint position。从检查点位置(LRBA)处,应用重做记录到On disk rba处,这个过程就是前滚

 

                3.2 HRBA

                      定义:脏块在buffer cache中最近一次被更新时产生的redo entries在redo log file里的位置

                      注释:如果HRBA > on-disk RABA,那么HRBA所对应的相关redo entries还在redo log buffer中,如果实例crash,则HRBA是不可能被恢复的。

 

                3.3 checkpoint RBA

                       定义:在CKPT-Q上第一个脏数据块的LRBA,这个RBA之前的脏数据已经被全部写入磁盘。

                       注释:当一个checkpoint事件发生的时候,CKPT进程会记录下当时所写的重做日志记录的地址(即RBA),此时记录的RBA被称之为checkpoint RBA,从上一个checkpoint RBA到当前checkpoint RBA之间的日志所保护的buffer cache中的脏块接下来将会被写进数据文件。

 

                3.4 on-disk RBA

                        定义:LGWR 写日志文件的最末位置的地址,磁盘中重做日志文件的最后一条重做记录。

                        注释:on disk rba是oracle前滚操作的终点。on disk 顾名思义 就是'在磁盘上'的意思.比这个更高的rba,都在log buffer中,还没有来的急被写进磁盘中的日志文件.所以是不能被用于恢复的。

 

                3.5 target RBA

                        定义:检查点事件结束时的checkpoint RBA

                        注释:为了缩短实例恢复的时间,DBWn会尽力把checkpoint RBA的目标值定的长远点。

 

    4 相关视图

                  4.1 查看The incremental checkpoint RBA and the on-disk RBA --X$KCCCP

SQL> select CPDRT,CPLRBA_SEQ||'.'||CPLRBA_BNO||'.'||CPLRBA_BOF "Low  
RBA",CPODR_SEQ||'.'||CPODR_BNO||'.'||CPODR_BOF "On disk RBA",CPODS,CPODT,CPHBT from x$kcccp; 
     CPDRT Low RBA         On disk RBA     CPODS            CPODT                     CPHBT 
---------- --------------- --------------- ---------------- -------------------- ---------- 
        35 686.124.0       686.220.0       2325376          03/02/2008 15:18:54   648319278 


                  注释:

                              CPDRT列是检查点队列中的脏块数目. 
                              CPODS列是on disk rba的scn
                              CPODT列是on disk rba的时间戳 
                              CPHBT列是心跳

 

                   4.2 查看脏块的LRBA和HRBA--X$BH、X$KCVFH(10g之后在x$bh里面只能查看LRBA)

                   --LRBA

 

SQL> select lrba_seq,lrba_bno from x$bh  where lrba_seq!=0;

  LRBA_SEQ   LRBA_BNO
---------- ----------
       107      42042
       107      42260
       107      42120


                  --HRBA

SQL> select hxfil,fhrba_seq,fhrba_bno,fhrba_bof from  x$kcvfh;

     HXFIL  FHRBA_SEQ  FHRBA_BNO  FHRBA_BOF
---------- ---------- ---------- ----------
         1         76       6618         16
         2         76       6618         16
         3         76       6618         16
         4         76       6618         16


                  为什么要查询x$kcvfh,是因为x$kcvfh是v$datafile_header的源

 

                  4.3 查看target RBA
                  --X$TARGETRBA

SQL> select target_rba_seq,target_rba_bno,target_rba_bof from x$targetrba;

TARGET_RBA_SEQ TARGET_RBA_BNO TARGET_RBA_BOF
-------------- -------------- --------------
             0              0              0


               

                   4.4 完全检查点的checkpoint RBA--x$kccrt(内核缓存控制文件重做线程)

SQL> select rtckp_rba_seq,rtckp_rba_bno,rtckp_rba_bof from x$kccrt;

RTCKP_RBA_SEQ RTCKP_RBA_BNO RTCKP_RBA_BOF
------------- ------------- -------------
          112             7            16


 

    5 小结

              RBA的信息不是必须的,因为如果以resetlogs方式打开数据库,则所有的序列号都将被重置为1。Redo 与checkpoint 关系很大,当设log_checkpoints_to_alert 参数为true后,checkpoint 发生时会写入alert log里。在备份与恢复的原理上,这里引用谢老的一句名言:“那就是数据文件的头上不仅包含了checkpoint_change#,更重要的是它包含了这个checkpoint_change#所在的logfile的sequence#,准确的说是rba。有了rba,在恢复时就能准确的知道到底需要哪个logfile(archivelog or redo)”

              通过上面的阐述,现在大家知道谢老话中的“rba”是何方神圣了吧。

 

分享到:
评论

相关推荐

    ORACLE 修改redo日志文件 大小的方法

    本文将深入探讨如何在Oracle环境中修改redo日志文件的大小,以及这一操作的具体步骤和注意事项。 ### 一、理解redo日志文件 在开始修改redo日志文件大小之前,首先需要了解redo日志文件的基本概念。redo日志文件是...

    Redo Log之一:理解Oracle redo log

    总体来说,Oracle redo log不仅是数据恢复的关键,它还是数据一致性、日志管理以及数据库性能优化的一个基础,对数据库管理员(DBA)来说,深入了解redo log的工作原理和管理方法是必备技能之一。

    42 redo log是直接一条一条写入文件的吗?非也,揭秘redo log block.pdf

    最后,对于有兴趣深入研究MySQL源码或是想要进一步了解redo log实现细节的开发者而言,了解redo log block的工作原理是理解整个redo log机制的基础。通过对redo log深入的分析和研究,开发者能够更好地解决实际工作...

    43 直接强行把redo log写入磁盘?非也,揭秘redo log buffer.pdf

    Redo日志(Redo Log)是数据库事务日志的重要组成部分,它主要用于事务的恢复和...此外,理解Redo日志的写入时机和机制,有助于数据库管理员或开发者在面对系统崩溃等紧急情况时,能够更有效地进行数据恢复和故障排除。

    redo使用方法

    在IT行业中,"redo"和"undo"是两个非常重要的概念,主要应用于版本控制、文本编辑器、图形用户界面(GUI)应用等场景。...通过理解这些源代码文件,我们可以深入学习如何在实际项目中实现这一功能。

    实现Redo Undo的一个简单实例,包含源码

    总的来说,理解并实现Redo和Undo机制对于提升Delphi应用程序的用户友好性至关重要。通过分析和学习提供的源代码,开发者不仅可以掌握基本的实现方式,还能了解到如何在实际开发中有效地应用这些概念。

    redo 维护 oracle

    理解并维护redo日志对于确保数据完整性和能够进行有效的故障恢复至关重要。以下是对redo日志及其维护的详细说明: 1. **redo日志的构成** Redo日志由一组redo log files组成,每个文件包含一系列的redo entries,...

    C# undo\redo框架

    本文将深入探讨“C# undo/redo框架”的核心概念、设计模式以及如何实现。 1. **命令模式**: 撤销/重做框架通常基于命令模式设计。命令模式是一种行为设计模式,将请求封装为一个对象,使发出请求与执行请求解耦。...

    GIS软件中undo与redo的设计与实现

    综上所述,GIS软件中的Undo与Redo功能设计与实现是一个复杂的过程,涉及到对软件操作机制的深入理解和准确应用。通过采用命令模式和面向对象的设计方法,可以有效地管理各种编辑操作的撤销和恢复,从而提升GIS软件的...

    多步Undo_Redo的实现

    在本篇文章中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架下的绘图程序中实现多步Undo/Redo功能。 #### 二、基础知识回顾 在讨论具体实现之前,我们先简要回顾一下Undo/Redo的基本概念: - **...

    C#做的简单的Undo、Redo功能的实现

    5. 实现Redo方法,检查`redoStack`是否为空,如果非空,则弹出栈顶状态并应用,同时将当前状态压入`undoStack`。 6. 设置一个属性来控制最大撤销次数,每次添加新状态时检查此值,并根据需要清理`undoStack`的旧状态...

    Oracle_Undo与Redo的通俗

    Oracle_Undo与Redo的通俗 Oracle中的Undo和Redo是两个非常重要的概念,它们都是Oracle数据库中事务管理和恢复机制的关键组件。Undo和Redo都是为了确保数据库的一致性和可靠性。 什么是REDO? REDO记录transaction...

    丢失所有redo-数据文件-控制文件的恢复

    本文将深入探讨这一问题,并提供一系列恢复策略,以帮助DBA在面对如此棘烈的故障时能够有条不紊地进行处理。 ### 一、理解控制文件、数据文件和重做日志的重要性 #### 控制文件(Control Files) 控制文件是数据库的...

    undo redo 原型设计

    cpp文件 undo redo 原型设计 部分代码 class Command { public: virtual BOOL UnDo() = 0; virtual BOOL ReDo() = 0; };

    redo与undo_a.pdf11

    总的来说,理解redo与undo机制对于任何数据库管理员来说都是至关重要的,因为它们直接关系到数据库的稳定性和数据的安全性。通过深入学习和实践,你可以更好地掌握如何在面临系统故障时保护和恢复数据,以及如何有效...

    非IMU模式下一条update语句产生REDO RECORD条数的探究--日志打包

    在数据库管理领域,REDO RECORD是Oracle数据库系统中一个...这需要对Oracle数据库的工作原理有深入的理解,并结合实际系统负载情况进行调整。在实际工作中,我们应定期监控和分析数据库行为,以便及时发现和解决问题。

    Oracle DG下修改redo log和standby redo log日志大小.txt

    Oracle DG下修改redo log和standby redo log日志大小.txt

    行业-42 redo log是直接一条一条写入文件的吗?非也,揭秘redo log block.rar

    首先,理解redo log的基本概念:它是一种二进制日志,记录了数据库中每个事务所做的修改。当事务提交时,这些修改会被写入redo log,以备后续的崩溃恢复使用。redo log分为在线redo log(online redo log)和归档...

Global site tag (gtag.js) - Google Analytics