这篇文章将为大家详细讲解有关怎么理解checkpoint cnt和checkpoint scn,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的容县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
[说明]模仿eygle大师的一篇文章,自己动手做了一下,感觉只有这样才能印象深刻。原文参考:http://www.eygle.com/archives/2004/06/checkpoint_scn_ckpcnt.html
1. 在不同情况下dump控制文件
SQL> alter session set events 'immediate trace name CONTROLF level 10';
Session altered.
SQL> alter tablespace system begin backup;
Tablespace altered.
SQL> alter session set events 'immediate trace name CONTROLF level 10';
Session altered.
SQL> alter system checkpoint;
System altered.
SQL> alter session set events 'immediate trace name CONTROLF level 10';
Session altered.
SQL> alter tablespace system end backup;
Tablespace altered.
SQL> alter session set events 'immediate trace name CONTROLF level 10';
Session altered.
SQL>
2. 从udump目录萃取出trace file中关于system表空间的信息,加以分析
a. 系统正常情况下dump的信息
***************************************************************************
DATA FILE RECORDS
***************************************************************************
(blkno = 0x6, size = 180, max = 100, in-use = 3, last-recid= 0)
DATA FILE #1:
(name #6) D:\OPT\ORACLE9I\PRODUCT\9.2.0\ORADATA\ORA92US\SYSTEM01.DBF
creation size=0 block size=8192 status=0xe head=6 tail=6 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:55 scn: 0x0000.00194116 04/14/2021 19:36:49
Stop scn: 0xffff.ffffffff 04/13/2008 20:48:26
Creation Checkpointed at scn: 0x0000.00000005 03/17/2008 15:57:33
thread:0 rba:(0x0.0.0)
enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Offline scn: 0x0000.00192482 prev_range: 0
Online Checkpointed at scn: 0x0000.00192483 04/11/2008 19:27:07
thread:1 rba:(0x1.2.0)
enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Hot Backup end marker scn: 0x0000.00000000
aux_file is NOT DEFINED
b.alter tablespace system begin backup以后
我们注意到Checkpoint cnt增加了1,此处触发了一次表空间checkpoint.
***************************************************************************
DATA FILE RECORDS
***************************************************************************
(blkno = 0x6, size = 180, max = 100, in-use = 3, last-recid= 0)
DATA FILE #1:
(name #6) D:\OPT\ORACLE9I\PRODUCT\9.2.0\ORADATA\ORA92US\SYSTEM01.DBF
creation size=0 block size=8192 status=0xe head=6 tail=6 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:56 scn: 0x0000.001941a7 04/14/2021 19:39:26
Stop scn: 0xffff.ffffffff 04/13/2008 20:48:26
Creation Checkpointed at scn: 0x0000.00000005 03/17/2008 15:57:33
thread:0 rba:(0x0.0.0)
enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Offline scn: 0x0000.00192482 prev_range: 0
Online Checkpointed at scn: 0x0000.00192483 04/11/2008 19:27:07
thread:1 rba:(0x1.2.0)
enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Hot Backup end marker scn: 0x0000.00000000
aux_file is NOT DEFINED
c.alter system checkpoint之后
此时Checkpoint cnt增加,但是scn不再改变
***************************************************************************
DATA FILE RECORDS
***************************************************************************
(blkno = 0x6, size = 180, max = 100, in-use = 3, last-recid= 0)
DATA FILE #1:
(name #6) D:\OPT\ORACLE9I\PRODUCT\9.2.0\ORADATA\ORA92US\SYSTEM01.DBF
creation size=0 block size=8192 status=0xe head=6 tail=6 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:57 scn: 0x0000.001941a7 04/14/2021 19:39:26
Stop scn: 0xffff.ffffffff 04/13/2008 20:48:26
Creation Checkpointed at scn: 0x0000.00000005 03/17/2008 15:57:33
thread:0 rba:(0x0.0.0)
enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Offline scn: 0x0000.00192482 prev_range: 0
Online Checkpointed at scn: 0x0000.00192483 04/11/2008 19:27:07
thread:1 rba:(0x1.2.0)
enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Hot Backup end marker scn: 0x0000.00000000
aux_file is NOT DEFINED
d.alter tablespace system end backup之后
此时数据文件头的冻结被取消,scn开始变化
***************************************************************************
DATA FILE RECORDS
***************************************************************************
(blkno = 0x6, size = 180, max = 100, in-use = 3, last-recid= 0)
DATA FILE #1:
(name #6) D:\OPT\ORACLE9I\PRODUCT\9.2.0\ORADATA\ORA92US\SYSTEM01.DBF
creation size=0 block size=8192 status=0xe head=6 tail=6 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:58 scn: 0x0000.001941b3 04/14/2021 19:39:54
Stop scn: 0xffff.ffffffff 04/13/2008 20:48:26
Creation Checkpointed at scn: 0x0000.00000005 03/17/2008 15:57:33
thread:0 rba:(0x0.0.0)
enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Offline scn: 0x0000.00192482 prev_range: 0
Online Checkpointed at scn: 0x0000.00192483 04/11/2008 19:27:07
thread:1 rba:(0x1.2.0)
enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Hot Backup end marker scn: 0x0000.00000000
aux_file is NOT DEFINED
Checkpoint cnt用于保证在正常操作中使用的数据文件是当前版本.在恢复时防止恢复数据文件的错误版本.Checkpoint cnt是一直递增的,即使表空间处于热备份模式.
由于表空间的创建时间不尽相同,所以不同表空间/数据文件的Checkpoint cnt通常是不同的 (编者注:从dump文件中确实可以看到这一点,不同的datafile的checkpoint cnt确实不一样).
我们知道:
在数据库open的过程中,Oracle要进行两次检查 (编者注:按照eygle在其他很多地方自己的说法,实际情况要复杂很多,这里只是简要说明。也许只有Oracle的开发人员才知道到底要做哪些事情~~~).
第一次检查数据文件头中的Checkpoint cnt是否与对应控制文件中的Checkpoint cnt一致.
如果相等 (编者注:其实如果相等,则System Checkpoint SCN = Datafile Checkpoint SCN = Start SCN), 进行第二次检查.
第二次检查数据文件头的开始SCN和对应控制文件中的结束SCN是否一致
如果结束SCN等于开始SCN,则不需要对那个文件进行恢复 (编者注:如果不等,即Stop SCN为无穷大,则需要Istance Recovery).
(编者注:这里的open过程的说法和我前面转载的关于SCN的文章不尽相同,但是我个人理解第一次就是做是否需要Media Recovery的检查;第二次就是做是否需要做Instance Recovery的检查。第一步如果文件版本不一致,就开始做Media Recover,根据相应的SCN确定需要的log;如果不需要Media Recovery,则检查是否需要Instance Recovery,如果Stop SCN的值为无穷大,则需要,而且要提交redo logs直到最新的那一个)
对每个数据文件都完成检查后,打开数据库.同时将每个数据文件的结束SCN设置为无穷大。
关于怎么理解checkpoint cnt和checkpoint scn就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。