检查点触发几种情况测试:
select checkpoint_Change#,last_Change#,file# from v$ datafile; 控制文件
select checkpoint_change# from v$datafile_header; 数据文件头部
将v$ datafile v$datafile_header关联
Start_scn 来源于数据文件头部
Control_scn 来源于控制文件
Stop scn 来源于控制文件
以上皆为别名,具体看下面SQL。
select a.checkpoint_change# start_scn,b.checkpoint_change# control_scn,b.last_change#
stop_scn,a.file# from v$ datafile_header a,v$datafile b where a.file#=b.file#;
(以下测试查询SCN状态,都是使用该SQL语句查询)
1.手动触发 Alter system checkpoint(完全检查点)
2.热备份 alter database begin backup
(完全检查点,并会进行数据文件检查点冻结,当结束热备份后检查点更新)
日志切换触发检查点的问题 结尾说明
3.表空间read only :
查询表空间以及对应的文件号,便于后续观察。
将表空间置为read only
结论:
触发表空间级检查点
修改数据文件头部记录的起始SCN,
修改控制文件记录的检查点SCN,数据文件结束SCN
将测试表空间置回为read write
查看SCN状态:
控制文件中修改结束SCN为无限大。
4.表空间OFFline
将表空间置为offline:
查看表空间状态
查询SCN状态:
将表空间置为online:
再次查看
结论:
表空间offline 触发表空间级检查点
修改数据文件头部起始SCN为0。
修改控制文件记录的检查点SCN,数据文件结束SCN。
表空间online后,还会触发检查点更新。
5.单个数据文件offline
数据库处于Open状态
将6号文件offline
查看文件状态:
为何不是offline
查看SCN状态:(注意6号文件)
结论:
不更新数据文件头部起始SCN信息
不更新控制文件中检查点信息
更新控制文件中的数据文件结束SCN
此时将数据文件online
需要进行介质恢复。
结论:
在open状态下将单个数据文件offline 然后转换成 online时,需要执行介质恢复。
因为数据文件头部开始的SCN不等于控制文件中记录的结束 SCN号,不满足打开文件要求。
6.RMAN备份触发检查点(open):
查看当前数据文件SCN信息
进行RMAN备份数据文件6.
再次查看检查点信息
发现数据文件检查点信息改变。
进行一次全库备份测试
结果很疑惑有09有10。
原因在此
备份分为两个备份集备份,
第一个备份集开始备份会更新对应数据文件的检查点信息,
当第一个备份集完成,才会进行第二个备份集备份。
第二个备份集开始备份会更新对应数据文件的检查点信息
也就是说会比第一个备份集中的数据文件SCN多一点。
当进行全库备份时,不是将整个库做一次检查点,而是按备份集先后顺序。
这也就是差异所在。
7.日志切换:日志切换等待,日志切换无等待
(1)日志切换无等待
日志切换只是唤醒DBWR与CKPT进程,CKPT进程每三秒醒来会检查DBWR的写进度,当执行日志切换后,DBWR根据自己的写机制来写上一个日志文件,当CKPT进程发现DBWR已经将上一个日志文件中记录的脏块全部写回数据文件,此时CKPT进程更新控制文件中的信息。
1.将上一个日志文件的状态由active更新为inactive
2.修改数据文件头部SCN号
3.修改控制文件中的SCN号
(2)日志切换等待:
日志写入特别频繁,三个日志组状态如下
此时再进行日志切换,会直接唤醒DBWR进程将Active中记录的脏块写回数据文件,然后CKPT进程更新控制文件中记录的日志状态,数据文件头部SCN号以及控制文件中SCN号。
测试结果如下
日志切换前
日志切换后
结论:
日志切换等待时,触发的是完全检查点。
日志切换无等待,不会触发完全检查点,按增量检查点的机制写。
附加Oracle启动流程:
1.Oracle根据SID找到参数文件,根据参数文件中的参数配置来分配共享内存SGA以及启动一些后台进程,此时实例已经启动nomount状态。
2.Oracle根据参数文件找到控制文件,并且确保所有的控制文件一致且有效,此时数据库被装载,此时为mount状态。
3.Oracle根据控制文件找到所有的数据文件,并且进行检查。
第一步检查数据文件头部记录的检查点计数cnt与控制文件中记录的检查点计数CNT是否一致,如果一致,则进行第二步检查。
第二步检查数据文件头部的起始SCN与控制文件中记录的数据文件结束SCN是否一致,如果一致,数据库可以打开,此时为OPEN状态。