热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle体系结构及内存管理11_checkpointqueue和SCN

2019独角兽企业重金招聘Python工程师标准1、检查点队列checkpointqueue:buffercache里的一种chain,按照buf

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、检查点队列 checkpoint queue:buffer cache里的一种chain,按照buffer第一次脏的时间将脏块连接起来,也可以叫lrba chain
              检查点通过它来确定,恢复时需要的重做日志。主要用于减少Crash Recovery 时间
    RBA(Redo Byte Address), Low RBA(LRBA), High RBA(HRBA)
    rba:被修改buffer的日志地址
    lrba:buffer第一次脏的日志地址
    hrba:最近一次脏的日志地址
    lrba-hrba之间的日志就记录着该buffer的改变过程
    on disk rba:是current日志组,最后一条日志的地址。

2、ckpt进程工作方式
完全检查点(全局):发生时,会触发DBWr将所有的脏块写入到磁盘,只有关闭数据库时发生。清理buffer cache和手动检查点
                    同时更新控制文件和数据文件头部检查点信息。
                    alter system checkpoint global;
                    select * from V$DATAFILE_HEADER;  --完全检查点信息
增量检查点:发生时,ckpt会周期性的将检查点队列的第一次脏的块的lrba写入控制文件,发现检查点队列1/4满,比较长,且
            IO不是很繁忙会触发dbwr将检查点队列上比较早脏的块写入磁盘,缩短检查点队列,每隔3秒钟发生一次。只更新
            控制文件中的检查点信息。
部分检查点(文件检查点):脱机只读热备份时发生,日志切换不一定就DBWR写脏块。
    检查点:是一个数据库事件,发生检查点后,oracle会通知DBWR进程将checkpoint SCN之前的脏数据写入磁盘,写入完成后
CKPT进程更新控制文件和数据文件头部的记录检查点信息。
ckpt进程在促进DBWR写脏块时,块中数据可能不是同一个事务的修改。
    一个事务产生的日志可能在log buffer里有,redolog里也有。可丢失的数据:未提交事务修改的数据,log buffer中的
日志对应的事务一定是没有提交的;不可丢失的数据:已提交事务修改的数据。
oracle实例恢复
    oracle数据库如果发生了实例崩溃,再次启动数据库时,oracle会到控制文件中读取low cache rba(就是检查点位置)。
从此处开始应用磁盘上的重做日志,应用到on disk rba的位置,将数据库崩溃时的脏块给构造出来,构造出来的未提交事务对
应的块会再回滚。
    空跑日志:当日志记录的SCN号比块的SCN小时会越过该修改

3、增量检查点发生只是每3秒由CKPT进程去更新控制文件中的low cache rba信息,也就是检查点的位置。
查询检查点脏块信息
    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 where indx=0;
    CPDRT #检查点队列中的脏块数目,CPLRBA_SEQ及current日志组的序列号
    CPODS #on disk rba的scn 
    CPODT #on disk rba的时间戳 
    CPHBT #心跳
补充X$KCCCP视图介绍:
X$KCCCP ——[K]ernel [C]ache [C]ontrolfile management [c]heckpoint [p]rogress
DESC X$KCCCP;
 名称               是否为空? 类型
 ------------------ -------- --------------
 ADDR               RAW(4) 
 INDX               NUMBER  --通常只需要关心indx=0
 INST_ID            NUMBER
 CPTNO              NUMBER
 CPSTA              NUMBER
 CPFLG              NUMBER
 CPDRT              NUMBER --select count(*) from v$bh where dirty='Y';检查点队列中的脏块数
 CPRDB              NUMBER       
 CPLRBA_SEQ         NUMBER  ----最后一次增量检查点中LOW RBA中的序列号
 CPLRBA_BNO         NUMBER  ----最后一次增量检查点在LOW RBA中的块数
 CPLRBA_BOF         NUMBER  ----最后一次增量检查点在LOW RBA中的偏移量
 CPODR_SEQ          NUMBER  ----已写入日志文件的最后一个RBA的序列号=current日志$log.sequence#
 CPODR_BNO          NUMBER  ----已写入日志文件最后一个RBA的块数
 CPODR_BOF          NUMBER  ----已写入日志文件最后一个RBA的偏移量
 CPODS              VARCHAR2(16)  ---- on disk rba 的 scn
 CPODT              VARCHAR2(20)  ---- on disk rba 的时间
 CPODT_I            NUMBER
 CPHBT              NUMBER        -----心跳,每三秒钟加一
 CPRLS              VARCHAR2(16)
 CPRLC              NUMBER
 CPMID              NUMBER
 CPSDR_SEQ          NUMBER  
 CPSDR_BNO          NUMBER
 CPSDR_ADB          NUMBE

相关操作
    alter system checkpoint;
    alter system flush buffer_cache; --清空buffer cache和检查点队列    
    alter system archive log current;
    alter system switch logfile;
    select name,checkpoint_change#,current_scn from v$database;
    select name,checkpoint_change# from v$datafile; 
    select name,checkpoint_change# from v$datafile_header;
    select * from v$log;

4、SCN的意义?system change number系统改变号,将时间通过函数计算出来的数字,方便比较先后、新旧
    时间与SCN互转
select dbms_flashback.get_system_change_number, 
SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;

5、常见的SCN
    控制文件
        系统SCN, current_scn 当前数据库最大的SCN号
            select checkpoint_change# from v$database;
        文件SCN,开始、结束SCN
            select name,checkpoint_change#,last_change# from v$datafile; --多个文件与系统SCN相同,数据文件头部
        数据文件头部,开始SCN
            select name,checkpoint_change# from v$datafile_header;
    数据库正常关闭时,系统SCN,文件SCN,结束SCN,开始SCN值相同;
    数据库正常使用时:文件开始SCN和文件SCN,系统SCN相同,结束SCN为空或者无穷大;
    非正常关闭时:结束SCN为空,以此来判断数据库是否正常关闭;        
    数据库重新启动后SCN号都会改变
    
    日志文件也有SCN号,v$log.FIRST_CHANGE#,同时每条日志条目也有SCN,跑日志时比对,数据库正常时SCN号与最老的active
日志的SCN相同
    select recid,sequence#,first_change#,next_change# from v$log_history where rownum<6;

6、fast_start_mttr_target 参数
    默认即可0单位是秒&#xff0c;定义数据库启动时实例恢复的时限&#xff0c;检查点队列会根据该值调整队列长度和DBWR的写频率&#xff0c;确保在
指定时间里完成实例恢复。设为1和3600看那个值最接近中间值&#xff0c;确定大小。oracle 10G 将该参数设置为0时数据库会根据系
统负载自动检查点调整
    alter system set fast_start_mttr_target&#61;3600[1];
    select TARGET_MTTR,ESTIMATED_MTTR from v$instance_recovery;--数据库评估的MTTR大小
    select * from v$mttr_target_advice; --MTTR大小设置建议

参考文件&#xff1a;
http://www.cnblogs.com/luoyx/archive/2011/12/27/2302960.html
http://www.cnblogs.com/Ronger/archive/2011/12/09/2281650.html
http://blog.csdn.net/robinson1988/article/details/5087993


转:https://my.oschina.net/peakfang/blog/2245162



推荐阅读
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
author-avatar
红色的甜言1986
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有