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来判断是否备份控制文件
这里有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来判断是否备份控制文件