不少Oracle的初学者都会因为checkpoint这个知识点而头痛,绝大多数Oracle文档对完全检查点和增量检查点的描述又都略显朦胧;譬如在线日志的切换引起的是完全检查点还是增量检查点这个问题,就有不少的争论。实际上增量检查点与完全检查点有一个显著的区别:完全检查点发生时控制文件和数据文件头中的checkpoint scn都会被更新,而增量检查点发生时只有控制文件中的checkpoint scn更新; 我们可以通过以下演示证明日志切换引发的到底是何种检查点?:

SQL> select checkpoint_change# from v$datafile_header where status='ONLINE';
CHECKPOINT_CHANGE#
------------------166547616654761665476166547616654761665476
6 rows selected.SQL> alter system checkpoint;
System altered.SQL> select checkpoint_change# from v$datafile_header where status='ONLINE';
CHECKPOINT_CHANGE#------------------169713116971311697131169713116971311697131
6 rows selected./* 手动执行checkpoint,数据文件头的checkpoint scn立即更新了 */SQL> alter system flush buffer_cache;
System altered.SQL> select checkpoint_change# from v$datafile_header where status='ONLINE';
CHECKPOINT_CHANGE#
------------------169713116971311697131169713116971311697131
6 rows selected./* 单纯flush buffer cache冲刷数据库高速缓存不会更新数据文件头的checkpoint scn */SQL> alter system set log_checkpoints_to_alert=true;
System altered.SQL> alter system set log_checkpoint_timeout=20;
System altered./* 设置log_checkpoint_timeout为20s,频繁引发增量检查点 */alert log:
Wed Nov  3 20:24:49 2010
Incremental checkpoint up to RBA [0x3d.dff1.0], current log tail at RBA [0x3d.dff6.0]
Wed Nov  3 20:25:07 2010
Incremental checkpoint up to RBA [0x3d.dff7.0], current log tail at RBA [0x3d.dffc.0]
Wed Nov  3 20:25:25 2010
Incremental checkpoint up to RBA [0x3d.dffd.0], current log tail at RBA [0x3d.e002.0]
Wed Nov  3 20:25:43 2010
Incremental checkpoint up to RBA [0x3d.e003.0], current log tail at RBA [0x3d.e008.0]
Wed Nov  3 20:26:01 2010
Incremental checkpoint up to RBA [0x3d.e009.0], current log tail at RBA [0x3d.e00e.0]SQL> set time on;20:26:38 SQL> select checkpoint_change# from v$datafile_header where status='ONLINE';
CHECKPOINT_CHANGE#
------------------1697131169713116971311697131169713116971316 rows selected./* 可以看到增量检查点并不会引起数据文件头的checkpoint scn 被更新 */20:26:43 SQL>  alter system set log_checkpoint_timeout=1800;
System altered./* 那么日志文件切换就会引起数据文件头的checkpoint scn被更新吗?*/20:28:10 SQL> alter system switch logfile;
System altered.20:29:16 SQL> select checkpoint_change# from v$datafile_header where status='ONLINE';
CHECKPOINT_CHANGE#
------------------169713116971311697131169713116971311697131
6 rows selected./* logfile switch 日志文件切换引起的是一种slow慢的完全检查点,它不同于alter system checkpoint(ASC),ASC要求的脏块写出和控制文件及数据文件头更新时要立即完成的,也就是说当alter system checkpoint语句返回"System altered."后以上工作都已经完成了;而alter system switch logfile或者自然的日志切换引发的是一种慢的完全检查点,它在返回"System altered"时不要求写脏块等工作必须已经完成
*//* 我们可以用冲刷高速缓存的方式保证脏块写出的工作被督促完成 */20:33:39 SQL> alter system flush buffer_cache;
System altered.20:33:45 SQL> select checkpoint_change# from v$datafile_header where status='ONLINE';
CHECKPOINT_CHANGE#
------------------1697544169754416975441697544169754416975446 rows selected./* 虽然日志切换所引发的slow checkpoint(慢的检查点)并无立即完成的要求,但也并非全无限制;当某次日志切换由1号日志组切换到2号日志组时,将引发一个slow checkpoint,之后日志连续切换又要切到1号日志组时要求之前的那个slow checkpoint在切换前必须完成
*/20:41:35 SQL> set timing on;20:42:02 SQL>  select * from v$log;GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------1          1         67   52428800          2 YES INACTIVE               1698288 2010-11-03 20:41:192          1         68   52428800          2 YES INACTIVE               1698292 2010-11-03 20:41:213          1         69   52428800          2 NO  CURRENT                1698302 2010-11-03 20:41:35
Elapsed: 00:00:00.0020:42:17 SQL> delete tv;
51134 rows deleted.
Elapsed: 00:00:01.6820:42:34 SQL> commit;
Commit complete.
Elapsed: 00:00:00.0020:42:36 SQL> alter system switch logfile;
System altered.
Elapsed: 00:00:00.0120:42:40 SQL> alter system switch logfile;
System altered.
Elapsed: 00:00:00.0120:42:43 SQL> alter system switch logfile;
System altered.
Elapsed: 00:00:02.0020:45:28 SQL>  select checkpoint_change# from v$datafile_header where status='ONLINE';
CHECKPOINT_CHANGE#
------------------170068617006861700686170068617006861700686
6 rows selected.
Elapsed: 00:00:00.00alter.log告警日志中的内容:Wed Nov  3 20:42:40 2010
Beginning log switch checkpoint up to RBA [0x46.2.10], SCN: 1700686
...........................
Wed Nov  3 20:42:45 2010
Thread 1 cannot allocate new log, sequence 72
Checkpoint not complete
....................
Completed checkpoint up to RBA [0x46.2.10], SCN: 1700686/* 最近一次的日志切换耗费2s,在告警日志中可以看到此次slow checkpoint的相关记录 */

logfile switch causes incremental checkpoint?相关推荐

  1. Oracle checkpoint详解

    checkpoint扫盲 top什么是checkpoint 在数据库系统中,写日志和写数据文件是数据库中IO消耗最大的两种操作,在这两种操作中写数据文件属于分散写,写日志文件是顺序写,因此为了保证数据 ...

  2. Oracle CheckPoint进程

    在实例经过分配内存结构,加载控制文件后,然后要打开数据库的时候,需要做到控制文件,数据文件,联机重做日志保持相互状态一致性,数据库才可以打开.当数据库发生实例不正常关闭时(比如系统掉电或者Shutdo ...

  3. Oracle checkpoint 说明

    一. Oracle Checkpoint 说明 1.1  Checkpoint (1)A synchronization event at aspecific point in time (2)Cau ...

  4. redolog switch会发生完全检查点还是增量检查点?

    网上有很多资料都没有说清楚发生log switch的时候,到底完全检查点还是增量检查点.有人说是完全检查点,也有人说是增 量检查点.其实如果你深入了解完全检查点和增量检查点的的区别,就应该知道log ...

  5. oracle中的checkpoint,Oracle checkpoint详解

    checkpoint扫盲 什么是checkpoint 在数据库系统中,写日志和写数据文件是数据库中IO消耗最大的两种操作,在这两种操作中写数据文件属于分散写,写日志文件是顺序写,因此为了保证数据库的性 ...

  6. oracle中的checkpoint,详解oracle checkpoint

    这篇文章,源于群中几位网友的疑问,故打算写这篇文章给其释疑. 1. 何为检查点?其存在的意义? 2. 检查点的有哪些分类?检查点的结构如何?什么是checkpoint queue? 通俗的将,检查点仅 ...

  7. 【数据库管理】⑧检查点checkpoint

    1. checkpoint的本质 Checkpoint是Oracle数据库中的一种机制,用于将内存中的数据写入磁盘,以保证数据的持久性和一致性.Checkpoint的本质是将数据库中的脏数据(即已经被 ...

  8. 什么是checkpoint (转)

    checkpoint是什么? z~Pi\*N#^"u-s!n*e4^0checkpoint是数据库的一个内部事件, -g[gh$l)i q0这个事件激活以后会触发数据库写进程(DBWR)将数 ...

  9. oracle checkpoint检查点

    检查点 检查点只是一个数据库事件,它存在的根本意义在于减少崩溃恢复(crash recovery)时间.检查点事件由ckpt后台进程触发,当检查点发生时,ckpt进程会负责通知dbwr进程将脏数据(d ...

最新文章

  1. python赋值语句的一般格式为_Python 基础语法
  2. 【干货】105页周志华教授《机器学习手推公式》开源PDF
  3. 关于AJAX 第三篇
  4. 进制转换与ascll码利用
  5. cordova:Error: Cannot find module '../cordova/platform_metadata'
  6. 日常生活小技巧 -- 网络调试助手
  7. hdu 2025 查找最大元素
  8. PMP敏捷图表之价值流程图
  9. easymock教程_EasyMock教程–入门
  10. 配置文件 web.config 的讨论
  11. win7电脑内存信息的查看方法
  12. linux装Oracle需要jdk,告诉你Ubuntu Linux下安装Oracle JDK的方法及命令
  13. oracle循环数据,oracle循环插入数据
  14. Windows上使用 OpenOCD 给 STM32 下载程序
  15. 开元酒店在中国的签约及在营酒店规模正式超过600家
  16. html5文字云在线制作,一键生成高大上的文字云,这5个工具值得推荐。
  17. 手写迷你Spring框架
  18. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)
  19. 论文笔记 Dependent Gaussian Processes 相关高斯过程
  20. Android 优化开机启动

热门文章

  1. html文档包包含几个基本标记,HTML中包含哪些基本的标记?
  2. Linux Kernel Git国内镜像源
  3. 一文读懂 etcd 的 mvcc 实现
  4. 学会使用 GDB 调试 Go 代码
  5. 在列表,字典,集合中根据条件来筛选数据
  6. JUnit的Rule的使用
  7. 欲求不满之 Redis Lua 脚本的执行原理
  8. ASP.NET Core和Angular 2双剑合璧
  9. PhoneGap3.3 安卓环境配置
  10. python+webdriver(三)