Oracle 同步、异步完全检查点
oracle检查点分类Oracle检查点分为:全量检查点和增量检查点,全量检查点分为同步全量检查点和异步全量检查点。
全量检查点从当前(也就是最新的)重做记录开始,LGWR将所有的重做记录写入到redo log 文件中,DBWn进程将当前重做记录之前产生的脏数据块写入到数据文件中,最后CKPT将检查点SCN写入到数据文件头和控制文件中。
同步全量检查点优先级高,检查点没有完成,命令不会返回。包括:除shutdown abort之外的其他关闭命令,以及alter system checkpoint命名。针对表空间文件的全量检查点命令alter tablespace offline、online、begin backup、end backup、readonly、readwrite,这些命令会修改对应表空间文件的文件头检查点SCN以及控制文件中文件SCN。
异步全量检查点优先级低,检查点没有完成(可能是没有将redo buffer 全部写入到redo log file、可能正在归档、也可能是脏数据还没有写入到data file 中)的情况下就会返回命令,比如alter systemswitch logfile(将在后续试验中证明该命令是异步全量检查点)以及日志的自动却换。
增量检查点取一条重做记录,该重做记录由oracle内部决定,LGWR将该重做记录之前的数据写入到在线日志文件中,DBWN将该重做日志之前的脏数据写入到data file中,最后CKPT进程将检查点SCN记录到控制文件中。需要仔细得体会下增量检查点与异步全量检查点的区别。
实验实验一
目的:
证明alter system checkpoint为同步全量检查点,alter system switch logfile为异步全量检查点。
过程:1、 开启检查点alert信息。
alter system set log_checkpoints_to_alert= true;
2、 监控alert文件
tail -f alert_orcl.log
3、 查看控制文件检查点SCN、查看控制文件文件头SCN、查看文件头SCN。
select t.NAME,t.CHECKPOINT_CHANGE#,t.CHECKPOINT_TIME,t.CHECKPOINT_COUNT from v$datafile_headert;--文件头检查点scn
select t.CHECKPOINT_CHANGE#,T.CURRENT_SCN fromv$database t;--控制文件检查点scn
select t.NAME,t.CHECKPOINT_CHANGE#,T.LAST_CHANGE#,t.CHECKPOINT_TIME fromv$datafile t;---控制文件文件头检查点SCN
查看控制文件检查点SCN、查看控制文件文件头SCN、查看文件头SCN都是16341058。
4、 执行alter system checkpoint。
5、 查看alert日志信息。
Beginning global checkpoint up to RBA [0xe7.ffd4.10],SCN: 16348837
Completed checkpoint up to RBA[0xe7.ffd4.10], SCN: 16348837
开始了一个全局检查点,检查点SCN为16348837,并立即返回完成检查点,这就是同步全量检查点。
6、再次查看控制文件检查点SCN、查看控制文件文件头SCN、查看文件头SCN。
结果全为16348837。与alert日志中的信息一致。
7、执行alter system switch logfile,手动切换日志
8、查看alert日志信息
Beginning log switch checkpoint up to RBA [0xe8.2.10],SCN: 16348963
Thread 1 advanced to log sequence 232 (LGWR switch)
Current log# 1 seq# 232 mem# 0:/u01/app/oracle/oradata/orcl/redo01.log
Tue May 07 22:21:32 2013
Archived Log entry 15 added for thread 1sequence 231 ID 0x4f6b0381 dest 1:
开始一个log switch 检查点,并切换了日志,归档了在线日志文件,检查点没有完成。
9、再次查看控制文件检查点SCN、查看控制文件文件头SCN、查看文件头SCN。
结果全为16348837。没有发生变化。
10、过了一段时间后,alert日志自动刷新了,
Tue May 07 22:25:54 2013
Completed checkpoint up to RBA[0xe8.2.10], SCN: 16348963
提示完成了检查点。这就是异步完全检查点,并不立即返回检查点结果。
11、再次查看控制文件检查点SCN、查看控制文件文件头SCN、查看文件头SCN。
检查点SCN全为16348963。这就是异步全量检查点,并不会立即完成检查点,完成检查点后会更新控制文件和数据文件头的检查点SCN。
12、 查看日志文件select * from v$log;
状态为current的日志文件的开始SCN也是16348963。
总结综上所述,alter systemcheckpoint为同步全量检查点,alter system switch logfile为异步全量检查点,两者都能调用CKPT进程将检查点SCN设置到控制文件和数据文件中。两则区别在于,一个是立刻返回并设置检查点SCN,一个是延迟返回并设置检查点SCN
实验二增量检查点。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11693228/viewspace-1061074/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11693228/viewspace-1061074/