4、增量检查点,

增量检查点所涉及的主要概念,是一个队列一个进程.队列是检查点队列,进程是CKPT进程.CKPT进程有两项任务,一个是在一定的时机触发DBWR并告知DBWR的Target RBA,另一个任务是每3秒一次将DBWR的写进度更新到控制文件中.CKPT的这两个任务合在一起,叫做--增量检查点.通常所说的触发增量检查点,是指CKPT进程通知DBWR刷新脏块这个操作.

在10g中把 log_checkpoint_to_alert设置为真,可以在告警日志中观察到增量检查点的触发.在9I中看不到增量检查点,可以看到其他检查点的触发信息.


观察增量检查点:

步骤1:

SQL> alter system set log_checkpoints_to_alert=true;

系统已更改。


步骤2:将增量检查点的切换频率定为300秒.

SQL> alter system set log_checkpoint_timeout=300;[单位是秒]

系统已更改。


步骤3:查看告警日志中的增量检查点信息.

...

Incremental checkpoint up to RBA [0x2b9.747.0], current log tail at RBA [0x2b9.848.0]

Mon Mar 03 14:51:40 2008

Incremental checkpoint up to RBA [0x2b9.855.0], current log tail at RBA [0x2b9.876.0]

Mon Mar 03 14:56:43 2008

Incremental checkpoint up to RBA [0x2b9.877.0], current log tail at RBA [0x2b9.8f0.0]

Mon Mar 03 15:01:43 2008

Incremental checkpoint up to RBA [0x2b9.8f5.0], current log tail at RBA [0x2b9.d70.0]

Mon Mar 03 15:06:43 2008

Incremental checkpoint up to RBA [0x2b9.d74.0], current log tail at RBA [0x2b9.fd9.0]

Mon Mar 03 15:11:44 2008

...


注:Incremental checkpoint(增量检查点的意思)/第1个RBA(增量检查点发生时当前的检查点位置)/第2个RBA(检查点发生时的当前的on disk rba);

可以看到每5分钟一次检查点.

另外可以通过v$kcccp视图观察当前的检查点位置.

SQL> select CPDRT,to_char(CPLRBA_SEQ,'xxxx')||'.'||to_char(CPLRBA_BNO,'xxxxx')||'.'||CPLRBA_BOF "Low 16",CPLRBA_SEQ||'.'||CPLRBA_BNO||'.'||CPLRBA_BOF "Low RBA",CPODR_SEQ||'.'||CPODR_BNO||'.'||CPODR_BOF "On disk RBA",CPODS,CPODT,CPHBT from x$kcccp where cphbt<>0;

CPDRT Low 16               Low RBA         On disk RBA     CPODS            CPODT                  CPHBT

---------- -------------------- --------------- --------------- ---------------- -------------------- ----------

26   2ba.    9d.0       698.157.0       698.307.0       2363076          03/03/2008 15:23:07   648336376

为了便于观察:Low 16 是Low RBA 的16进制.

注:在x$kcccp中看到的是DBWR的写进度.当把 log_checkpoints_to_alert这个参数设置为true后,可以在告警日志中看到增量检查点的触发信息.


5、完全检查点.

完全检查点,将会写出所有的脏块,完全检查点发生时,将不能有新的脏块产生,直到完全检查点完成,以非shutdown abort关闭数据库时就会发生完全检查点,还有就是手动发布命令:alter system checkpoint;

完全检查点也将会在数据文件头,控制文件中数据库信息节,数据文件节中写入当前SCN.

查看告警日志信息如下:

Mon Mar 03 15:38:11 2008

Beginning global checkpoint up to RBA [0x2ba.285.10], SCN: 2363568

Completed checkpoint up to RBA [0x2ba.285.10], SCN: 2363568

*****小结:日志切换所触发的检查点,1,要通知DBWR写脏块.2,要向数据文件头和控制文件中写入切换时的SCN.3,把新的连机重做日志的第一重做记录的RBA写进数据文件头.******

6、为什么要记录写入时的SCN和RBA呢

如果现在数据文件头和控制文件中的SCN是2374009,假如说现在发生了介质故障,数据库宕机,将两星期前备份的某一个数据文件还原过来覆盖当前的已损坏的数据文件.这个备份的数据文件头SCN是2370000,当启动数据库时,oracle会发现数据文件头的SCN和控制文件中的SCN 不匹配,此时会要求完成介质恢复.当 recover datafile 时,oracle会根据数据文件头所记载的RBA,到相应的日志文件中寻找重做信息,进行恢复.



oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html