Oracle 多种情况下的检查点触发

检查点触发几种情况测试:

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状态。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值