数据打开时,两次比较详解

时间:2020-12-02 09:55:38
OPEN时检查的2步是:检查点计数器,开始和结束SCN
这里有4个SCN参与了这两步检查,其中在控制文件中有3个scn参与了,数据文件中有1个SCN参与了
     1.System Checkpoint SCN(控制文件中)
          select checkpoint_change# from v$database;
          从v$database中查到的checkpoint_change#就是System Checkpoint SCN,这个系统检查点是用来判断控制文件是否是当前的
         
     2.Datafile Checkpoint SCN(控制文件中)
          select name,checkpoint_change# from v$datafile where name like '%users01%';
          每个数据文件在控制文件中都有个检查点SCN,v$datafile的CHECKPOINT_CHANGE#是Datafile Checkpoint SCN,它是控制文件的检查点信息,不是实际数据文件的检查点SCN

     3.Stop SCN(控制文件中)
          select name,last_change# from v$datafile where name like '%users01%';
          LAST_CHANGE#是STOP SCN,它是用来控制崩溃恢复的,如果是读写状态的ONLINE数据文件,此值是NULL,也就是结束SCN无穷大

     4.Start SCN(数据文件中)
          select name,checkpoint_change# from v$datafile_header where name like '%users01%';
          v$datafile_header的CHECKPOINT_CHANGE#就是开始SCN

数据库打开时的两次比较

第1次比较(判断介质恢复)
     查看控制文件和数据文件的checkpoint_change#是否相等,这里用CHECKPOINT_CHANGE#来判断
     select 'controlfile' "SCN location",name,checkpoint_change# from v$datafile where lower(name) like '%users01%'
     union
     select 'file header',name,checkpoint_change# from v$datafile_header where lower(name) like '%users01%';
     如果两个SCN不一致:
          开始SCN > Datafile Checkpoint SCN,说明控制文件是早期的
          开始SCN < Datafile Checkpoint SCN,说明数据文件是老的,需要介质恢复,在恢复最关键的是备份文件的开始SCN

第2次检查(判断崩溃恢复)
     查看控制文件中的结束SCN和数据文件开始SCN,不相等就需要进行崩溃恢复
     select 'controlfile' "SCN location",name,LAST_CHANGE#
     from v$datafile where name like '%users01%'
     union
     select 'file header',name,checkpoint_change#
     from v$datafile_header where name like '%users01%';

如果用的是老的控制文件,在打开的时候就需要借助System Checkpoint SCN
     如果System Checkpoint SCN < 所有数据文件开始SCN:说明该控制文件是备份控制,不是当前控制文件
     查找老控制文件的语句
     select 'controlfile' "SCN location",'SYSTEM checkpoint' name,checkpoint_change#
     from v$database
     union
     select 'file in controlfile',name,checkpoint_change#
     from v$datafile where name like 'users01%'
     union
     select 'file header',name,checkpoint_change#
     from v$datafile_header where name like '%users01%';

控制文件中数据文件的检查点SCN与开始SCN来判断介质恢复
结束SCN与开始SCN来判断崩溃恢复
系统检查点与开始SCN来判断是否备份控制文件