对备份恢复有重要意义的控制文件记录项

  

整理自:临危不惧oracle11g数据库恢复技术


对备份恢复有重要意义的控制文件记录项


dbid保存在控制文件中,在数据文件和日志文件的头部也存在,其作用是判断控制文件、数据文件、日志文件是否属于同一个数据库。


此信息与dbid一致。


该序列号是判断控制文件是否过旧的要素之一,在控制文件被更新后就会增长。控制文件增长包括检查点信息更新、创建或删除表空间等。

控制文件序列号在数据文件和日志文件的头部也有,但与控制文件中的不同,它们在自身的头部被更新时从当时的控制文件中复制的。

在库运行时,当数据文件和日志文件的头部被更新后,控制文件必须复制其部分内容,所以一般情况下,。否则,当前控制文件被认为是旧的。

select controlfile_sequence# from v$database;

select hxfil as file#,fhcsq as controlfile_sequence# from x$kcvfh;

oracle不会只依赖控制文件序列号来判断控制文件是否旧的,还依赖控制文件检查点,如果序列号检验没有通过,那就没有必要校验控制文件检查点scn了。


该scn也是判断控制文件是否是旧的要素之一。完全检查点把scn更新到控制文件中和数据文件头

而增量检查点仅更新到控制文件中。无论哪一种检查点,scn在控制文件中由一个称为控制文件检查点scn的记录表示。

,否则控制文件被认为是旧的,实例恢复无法启动。

select controlfile_sequence#,controlfile_change# from v$database;

select group#,sequence#,first_change# from v$log where status='CURRENT';


控制文件中保存的数据库检查点scn实际是在所有数据文件头部中最小的检查点scn,根据它的值与每个日志文件的高、低scn比较,oracle确定需要使用哪个日志文件。


日志文件中重做记录范围由这两个scn来表示,低位scn是指日志文件中第一条重做记录的scn,高位scn是指下一个日志文件中的第一个重做记录的scn


在默认情况下,控制文件即数据库的rman资料库。相关记录包括:rman的配置、闪回日志路径、重做日志历史、归档路径及属性、rman备份集信息、rman镜像复制信息、rman备份集和rman镜像复制中损坏的块信息、数据文件中坏块信息等。


还原点是scn的别名,通过create restore point命令创建,主要用于闪回技术,保存在控制文件中


每次使用resetlogs子句打开数据库时的scn,日志文件和数据文件头部也会保存此scn,每次打开数据库,oracle都会检查它们是否一致,resetlogs一般是不完全恢复的结果。


Oracle内部主要存在以下四种SCN 

1.系统检查点(系统检查点)SCN 

每当一个检查点完成时,Oracle就把该检查点对应的SCN记录到控制文件中,可以用以下语句查看当前数据库的检查点SCN:,

SYS@xbtst 完成select  checkpoint_change #,得到v $数据库;      CHECKPOINT_CHANGE #   ------------------   ,,,,,,,,,,2084301

2。数据文件头视交叉上核(数据文件的启动视交叉上核),

该SCN记录在每个数据文件头中,正常情况下,该SCN应该和记录在控制文件中的检查点SCN一致,可以用以下语句查看数据文件头的SCN:,

SYS@xbtst 完成select 文件#,checkpoint_change #,得到v $ datafile_header;,      ,,,,文件# CHECKPOINT_CHANGE #   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - -   ,,,,,,,,1,,,,,,,,,,,,2084301   ,,,,,,,,2,,,,,,,,,,,,2084301   ,,,,,,,,3,,,,,,,,,,,,2084301   ,,,,,,,,4,,,,,,,,,,,,2084301   ,,,,,,,,5,,,,,,,,,,,,2084301

3。数据文件的检查点视交叉上核和终止SCN 

这两个视交叉上核不是记录在数据文件中,而是记录在控制文件中,可以通过以下语句查看:,

SYS@xbtst 完成select  checkpoint_change #, last_change #,得到功能;v $,      CHECKPOINT_CHANGE # LAST_CHANGE #   - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - -   ,,,,,,,,,,2084301   ,,,,,,,,,,2084301   ,,,,,,,,,,2084301   ,,,,,,,,,,2084301   ,,,,,,,,,,2084301

那么甲骨文是如何根据这些不同的SCN来判断某个数据文件是否需要恢复以及恢复类型呢?可以用下面的伪代码描述:

if (数据文件检查点SCN  & lt;,数据文件头SCN)   then 才能;“控制文件来自备份,需要进行不完全恢复,恢复之后得用resetlog方式打开”   ,,   else  if (数据文件检查点SCN 祝辞,数据文件头SCN)   ,,,then “数据文件来自备份,需要日志进行完全或不完全恢复”   ,,   else  if (数据文件检查点SCN =,数据文件头SCN),   ,,then “数据库能正常打开,还需要判断是否需要实例恢复”   ,,   ,,if (数据文件终止SCN =,数据文件检查点视交叉上核)   ,,then “数据库打开时不需要实例恢复”   ,,,,,,   ,,else  if (数据文件终止SCN =, NULL)   ,,,,,then “数据库需要实例恢复”

对备份恢复有重要意义的控制文件记录项