在datafile header上记录rba,在恢复时就能非常准确的知道需要哪个日志文件(通过the log file sequence number)以及哪个block(通过the log file block number)以及 在这个日志block上从哪个byte开始读取恢复(通过the byte offset)
select hxfil file_num,fhrba_seq sequence,fhrba_bno sequence_block,fhrba_bof block_offset from x$kcvfh;
col file_name for a30 select HXFIL File_num,substr(HXFNM,1,45) File_name, FHSCN SCN,FHRBA_SEQ Sequence from X$KCVFH;
判断datafile做recover需要的archive log的sequence是多少,也就是说做recover到这个sequence,那么control file和datafile header中的记录就一致了。
The value for the column X$KCVFH.FHSTA (file header status) for an open database with an online datafiles in versions prior to version 10 were all 4, 9i,10g open状态 9i全部是4 (fuzzy) 10g 8196(system,fuzzy),其他4
一致关闭后,startup mount(fuzz=no) 8192(system) 0(其余)
(10g以后)(scn与time互换) scn-> time select to_char(scn_to_timestamp(9065273060811),'yyyy-mm-dd hh24:mi:ss') scn from dual;
time -> scn select timestamp_to_scn( to_timestamp('2013-09-13 07:15:31','yyyy-mm-dd hh24:mi:ss') ) scn from dual;
虽然参数“_allow_resetlogs_corruption”可以在checkpoint SCN不一致时强制打开数据库,但是这样的数据库在open后必须马上作全库的export,然后重建数据库并import数据。
以下条件需要使用using backup controlfile 1)、使用备份控制文件 2)、重建resetlogs控制文件,如果重建立noresetlogs不必要使用using backup controlfile
以下条件需要使用resetlog 1)在不完全恢复(介质恢复) 2)使用备份控制文件
1. recover database using backup controlfile 如果丢失当前控制文件,用冷备份的控制文件恢复的时候,用来告诉oracle,不要以controlfile中的scn作为恢复的终点;
2. recover database until cancel 如果丢失current/active redo的时候,手动指定终点。
3. recover database using backup controlfile until cancel; 如果 丢失当前controlfile并且current/active redo都丢失,会先去 自动 应用归档日志,可以实现最大的恢复;
4. recover database until cancel using backup controlfile; 如果 丢失当前controlfile并且current/active redo都丢失,以旧的redo中的scn为恢复终点。因为没有应用归档日志,所有会丢失数据。
二、总结 1、using backup controlfile用于恢复备份的控制文件与当前的控制文件不一致的情形 2、一旦使用了using backup controlfile方式,控制文件的类型将由 current 转移到 backup 类型,同时open_resetlogs为required 3、一旦使用了using backup controlfile方式,后续再次使用recover database将变得无效 4、必须要使用 resetlogs 方式打开数据库,即使我们做的是完全恢复
recover database using backup controlfile until cancel; 然后输入测试库的redo,逐个试,直接能起库为止。/paic/hq/t1inv/data/oradata/t1inv/redo61.log
recover automatdic standby DATABASE until TIME '2013-12-09 06:30:00';