• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
Oracle中checkpoint的讨论
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
Oracle中checkpoint的讨论
软件发布 Oracle中checkpoint的讨论
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 认证考试 >> Oracle认证 >> Oracle指导 >> Oracle中checkpoint的讨论

Oracle中checkpoint的讨论

添加时间: 2008-4-24 20:22:27  作者: Oracle指导  阅读次数:10   来源: http://www.d9soft.com

       

   什么是checkpoint?
    checkpoint是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件。
   
    什么时候发生checkpoint?
    我们知道了checkpoint会刷新脏数据,但什么时候会发生checkpoint呢?以下几种情况会触发checkpoint。
    1.当发生日志组切换的时候
    2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候
    3.当运行ALTER SYSTEM SWITCH LOGFILE的时候
    4.当运行ALTER SYSTEM CHECKPOINT的时候
    5.当运行alter tablespace XXX begin backup,end backup的时候
    6.当运行alter tablespace ,datafile offline的时候;
   
    增量 检查 点(incremental checkpoint)
    oracle8以后推出了incremental checkpoint的机制,在以前的版本里每次checkpoint时都会做一个full thread checkpoint,这样的话所有脏数据会被写到磁盘,巨大的i/o对系统性能带来很大影响。为了解决这个问题,oracle引入了checkpoint queue机制,每一个脏块会被移到检查点队列里面去,按照low rdb(第一次对此块修改对应的redo block address)来排列,靠近检查点队列尾端的数据块的low rba值是最小的,而且如果这些赃块被再次修改后它在检查点队列里的顺序也不会改变,这样就保证了越早修改的块越早写入磁盘。每隔3秒钟ckpt会去更新控制文件和数据文件,记录checkpoint执行的情况。
   
    数据字典
    完全检查点
select * from X$KCCRT where indx=0;ADDR          
INDX    INST_ID      RTNUM      RTSTA RTCKP_SCN        RTCKP_TIM  
RTCKP_THR RTCKP_RBA_SEQ RTCKP_RBA_BNO
RTCKP_RBA_BOF RTCKP_ETB         RTOTF      RTOTB         RTNLF     
RTLFH      RTLFT      RTCLN      RTSEQ RTENB           
RTETS    RTDIS                     RTDIT                    
RTLHP RTSID            RTOTS-------- ---------- ---------- ---------- ----------
---------------- -------------------- ---------- ------------- ------------- -------------
---------------- ---------- ----------  ---------- ---------- ---------- ---------- -------
--- ---------------- --------------------   ---------------- -------------------- ---------
- ---------------- --------------------4084B228          0         
1          1         15 720368521        06/25/2004 18:49:37        
1           949             2     16 0600000000000000         
2          0              3          1          3          1        949 1              
05/16/2004 13:29:03  0               1389 tbdb2in1        
06/12/2004 12:30:50 


    这里显示了上一次的完全检查点是在06/25/2004 18:49:37发生,所以我们推断06/25/2004 18:49:37发生了一次日志切换,再去操作系统上去看生产的归档,果然18:49有一个归档生产。
    -rw-r-----    1 oracle   oinstall 83532800 Jun 25 18:49 1_948.dbf
   

    增量检查点
SQL> select * from X$KCCCP where indx=0;ADDR          
INDX    INST_ID      CPTNO      CPSTA      CPFLG     
CPDRT      CPRDBCPLRBA_SEQ CPLRBA_BNO
CPLRBA_BOF  CPODR_SEQ  CPODR_BNO 
CPODR_BOF CPODSCPODT                  
CPODT_I      CPHBT CPRLS                
CPRLC      CPMIDCPSDR_SEQ 
CPSDR_BNO  CPSDR_ADB-------- ---------- ----------
---------- ---------- ---------- ---------- ---------- ---------- --
-------- ---------- ---------- ---------- ---------- --------------
-- -------------------- ---------- ---------- ---------------- ----
------ ---------- ---------- ---------- ----------4084B45C         
0          1          1          2          0      10762      29753      
949      76847          0        949     106814             
0 721554970        06/25/2004 21:05:10  
529794310  529036227 1                
526310932        1413781667        949             
1          0
                                        


   这里显示了low-rba,on-disk rba,checkpoint time等信息。

    每隔3秒钟ckpt会去更新控制文件和数据文件,记录checkpoint执行的情况。
   
   
    这里应该是只更新控制文件,每3秒不是更新数据文件
    说 记录 checkpoint 的执行情况,这个说法,没错,但不够详细,应该说,由于增量检查点和 checkpoint  queue 的 原理 ,ckpt 进程每次只是告诉 dbwr ,写dirty  buffer将要一直写到最新这个位置,仅仅是告诉 dbwr 一个 checkpoint queue  中的结束点,而 ckpt 每3秒中,在控制文件中报告一下 dbwr 最新写入的位置。 这样使得,比如数据库要做恢复的时候(instance  recovery)可以从这个最新位置开始做恢复,而不是从数据文件中的 checkpoint  scn 开始做恢复,这样将缩短恢复时间,尤其是 instance  crash 的情况下启动更快
   
    另外要注意的是,检查点发生的时候,ckpt 去更新数据文件头和控制文件,并不是把当前检查点发生时候的 scn 更新进去,而是把上一次dbwr写入已经完成的检查点发生时候的  scn 更新进去 ,也就是说,更新控制文件和数据文件头 是 滞后于检查点的发生的,这个从恢复的原理也很容易理解,因为检查点发生的时候 dirty buffer还没有写入,自然不能立即更新成当前的 scn 了.

 

上下文章:

 

上一篇文章: 给数据库管理员设定访问限制 下一篇文章: Oracle中如何去定位未知的对象

相关文章:

  • 如何手动创建oracle数据库
  • oracle 多元化控制文件
  • Oracle数据库的快照是一个表
  • 删除Oracle数据库中重复的没用数据
  • 在ORACLE的存储过程中如何做简单的动态查询

相关软件:

  • Ecora Enterprise Auditor for Oracle-破解补丁 Cracked v3_6_5185
  • OptionsOracle V1.3.1
  • Oracle 8 故障解决手册(PDF)
  • Oracle WebServer 中文手册(CHM)
  • Oracle 9i 应用服务器详解(PDG)
  • 精通Oracle 9i(PDG)

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

Oracle认证分类导航

  • Oracle动态
  • Oracle指导
  • Oracle题库

本类经典文章推荐

  • Oracle中关于逻辑备份与恢复
  • Oracle开发人员JAVA存储过程
  • 为数据库的表自动生成行号
  • Oracle中的OOP概念
  • 用java从oracle取数
  • 冷备份移植到另一台Solaris机器上
  • 如何将excel数据导入oracle中
  • Oracle10.2g安装记录
  • 数据库监控工具ForOraclev1.2
  • oracle双机群集系统

Oracle指导阅读排行

  • Oracle系统表查询
  • 实例:Oracle导出EXCEL文件
  • Oracle常用的OCI函数上
  • 案例学习Oracle错误:ORA-00060
  • 案例学习Oracle错误:ORA-00604
  • Tomcat+SQLServer连接池配置
  • 如何将excel数据导入oracle中
  • Oracle企业管理器(OEM 2.1)使用...
  • ORACLE数据库简介
  • 案例学习Oracle错误:ORA-00904

Oracle认证阅读总排行

  • Oracle系统表查询
  • 实例:Oracle导出EXCEL文件
  • Oracle常用的OCI函数上
  • 在ORACLE的存储过程中如何做简单的...
  • 案例学习Oracle错误:ORA-00060
  • 案例学习Oracle错误:ORA-00604
  • Tomcat+SQLServer连接池配置
  • 如何将excel数据导入oracle中
  • Oracle企业管理器(OEM 2.1)使用...
  • AIX下自动启动Oracle数据库与监听...

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有