当检查点发生时(此时的SCN 被称为Checkpoint SCN ),Oracle会通知DBWR进程,把 修改过的数据,也就是此Checkpoint SCN之前的脏数据(Dirty Data)从Buffer Cache 写入磁盘,当写入完成之后,CKPT进程更新控制文件和数据文件头,记录检查点信息,标 识变更。
Checkpoint SCN 可以从数据库中查询得到:
SQL> select file#,NAME,CHECKPOINT_CHANGE#,to_char(CHECKPOINT_TIME,'yyyy -mm-dd hh24:mi:ss') CPT from v$datafile; FILE# NAME CHECKPOINT_CHANGE# CPT ---------- -------------------------------------------------------------------------------- ------------------ -------------------- 1 /u01/app/oracle/oradata/orcl/system01.dbf 6051905239995 2016 -05-05 04:14:32 2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 6051905239995 2016 -05-05 04:14:32 3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 6051905239995 2016 -05-05 04:14:32 4 /u01/app/oracle/oradata/orcl/users01.dbf 6051905239995 2016 -05-05 04:14:32 5 /u01/app/oracle/oradata/orcl/example01.dbf 6051905239995 2016 -05-05 04:14:32 6 /u01/app/oracle/oradata/orcl/DEV_odi_user.dbf 6051905239995 2016 -05-05 04:14:32 7 /u01/app/oracle/oradata/orcl/apex_01.dbf 6051905239995 2016 -05-05 04:14:32 8 /u01/app/oracle/oradata/orcl/APEX_6121090681146232.dbf 6051905239995 2016 -05-05 04:14:32 8 rows selected
在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相 应重做记录对于崩溃/实例恢复不再有用。
检查点的频度对于数据库的恢复时间具有极大的影响, 如果检查点的频率高,那么恢复时需要应用的重做日志就相对得少,恢复时间就可以缩短。 然而,需要注意的是,数据库内部操作的相关性极强,过于频繁的检查点同样会带来性能问 题,尤其是更新频繁的数据库。所以数据库的优化是一个系统工程,不能草率。
更进一步可以知道,如果Oracle 可以在性能允许的情况下,使得检查点的SCN 逐渐逼近 Redo的最新变更,那么最终可以获得一个最佳平衡点,使得 Oracle 可以最大化的减少恢复 时间。
为了实现这个目标,Oracle 在不同版本中一直在改进检查点的算法。
总结
以上就是本文关于Oracle SCN与检查点详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以参考:oracle 数据库启动阶段分析 、 Oracle EBS工具选项:关闭其他表单修改方法 、 oracle 虚拟专用数据库详细介绍 等。有什么问题可以随时留言,小编会及时回复大家的。