数据库启动关闭有关的SCN

数据库的SCN一直是一个既熟悉又陌生的东西,很多人晓得有这个概念,但是是否真正理解就又是一回事,数据库几个视图和函数都能够查询到SCN,SCN最重要的使用地方是数据库启动的时候,这些概念其实很多文章都有介绍,我们再来梳理和巩固下:

四种SCN

1、 系统检查点scn

当一个检查点动作完成后,Oracle就把系统检查点的SCN存储到控制文件中。

Selectcheckpoint_change# from v$database

2、 数据文件检查点scn

当一个检查点动作完成后,Oracle就把每个数据文件的scn单独存放在控制文件中。

Selectcheckpoint_change# from v$datafile

3、 启动scn(数据文件头SCN)

Oracle把这个检查点的scn存储在每个数据文件的文件头中,这个值称为启动scn,因为它用于在数据库实例启动时,检查是否需要执行数据库恢复。

Selectname,chekpoint_change# from v$datafile_heade

4、 终止scn

  每个数据文件的终止scn都存储在控制文件中。

Selectname,last_change# from v$datafile

几个检查点SCN号的关系

1、 正常关闭数据库

当正常关闭数据库时,checkpoint会进行,并且此时保存到控制文件里面的datafile的终止scn和数据文件头的启动scn会相同。 等到open数据库时,Oracle检查datafileheader中的启动 scn和存于control file中的datafile的scn是否相同, 如果相同,再检查datafile的scn和终止 scn是否相同,如果仍然相同,数据库就会正常开启,否则就需要recovery。

等到数据库开启后,储存在control file中的终止 scn就会恢复为NULL值,此时表示datafile是open在正常模式下了。

2、  非正常关闭

数据库非正常关闭(或称为实例崩溃)时,终止SCN不会被设置,依然为NULL,这可以通过把数据库启动至mount状态查询出来。这样Oracle通过这个信息就可以知道实例上次运行时崩溃了,检查点没有执行。这样重新启动时,Oracle会执行实例恢复工作,即先执行前滚、回滚操作,再把数据库打开。

       注意一点:

(1)启动数据库时,如果发现终止 SCN = NULL,表示需要进行crash recovery;

(2)启动数据库时,如果发现有datafile header的启动 SCN 不等于储存于CONTROLFILE的DATAFILE SCN,表示需要进行Media recovery

       (2)这种情况又有2种:

数据文件检查点SCN及系统检查点SCN比文件头启动SCN大:这时的情况是:系统发生介质故障,数据文件被以前的备份代替,控制文件中的数据文件检查点SCN肯定比文件头中的启动SCN要大,这样Oracle就知道要对这个文件进行介质恢复。这时要通过下面语句恢复数据库:

recoverdatabase ……

系统检查点SCN及数据文件SCN比文件头启动SCN小:在数据库恢复时,控制文件可能不是最新的,即把一个较早的控制文件还原为当前的控制文件,然后再执行恢复操作,这时控制文件中的系统检查点SCN和数据文件SCN可能比文件头的启动SCN小。这时恢复数据库要用下面命令:

recoverdatabase using Backup Controlfile或其他的恢复语句


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值