转:http://blog.csdn.net/xyz846/article/details/7464684


recover database using backup control file

简单说两句:

要理解recoverdatabase using backup controlfile,先理解 recover database

也就是说,不加usingbackup controlfile的情况。

在 普通的recover database 或者 recover tablespace, recover datafile时, Oracle会以当前controlfile所纪录的SCN为准,利用archivelog和 redo log的redo entry, 把相关的datafile 的 block恢复到“当前controlfile所纪录的SCN”。而某些情况下,Oracle需要把数据恢复到比当 前controlfile所纪录的SCN还要靠后的位置(比如说,controlfile是backupcontrolfile, 或者 controlfile是根据trace create的。),这时候,就需要用using backup controlfile. 恢复就不会受“当前controlfile所纪录的SCN”的限制。

这时候的限制就来自于你的语句(untiltime , until scn),或者可用的archivelog(until cancel) ...

-------------------------------------------

首先这里我们先介绍四个SCN概念。

1、系统检查点scn

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

select checkpoint_change# from v$database;

2,数据文件检查点scn

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

select name,checkpoint_change# fromv$datafile;

3,启动scn

Oracle把这个检查点的scn存储在每个数据文件的文件头中,这个值称为启动scn,因为它用于在数据库实例启动时,

检查是否需要执行数据库恢复。

select name,checkpoint_change# fromv$datafile_header

4、终止scn

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

select name,last_change# from v$datafile

 

以下条件需要使用usingbackup controlfile

1)、使用备份控制文件

2)、重建resetlogs控制文件,如果重建立noresetlogs不必要使用using backup controlfile

 

2、alter database open resetlog

指定RESETLOGS将重设当前LOG sequence number为1,抛弃所有日志信息。

以下条件需要使用resetlog

1)在不完全恢复(介质恢复)

2)使用备份控制文件

使用resetlogs打开数据库后务必完整地备份一次数据库。

3、create controlfile resetlogs/noresetlogs

1)用Noresetlogs重建控制文件时,控制文件中 datafile Checkpoint来自Online logs中的Current log头

2)用Resetlogs重建控制文件时,控制文件中datafile Checkpoint来自各数据文件头。

 

当systemscn,datafile scn,start scn 不全相等,需要介质恢复,如果stopscn null需要实例恢复

resetlogs抛弃所有在上一次恢复没有用到的日志信息,确保不被重新用与恢复。

1、系统正常关闭:

system scn=datafile scn=start scn=stop scn

1)system scn=datafile scn=start scn,不需要介质恢复

2)stopscn not null,不需要实例恢复

2、系统异常关闭:

system scn=datafile scn=start scn,stop scn null

1)system scn=datafile scn=start scn,不需要介质恢复

2)stopscn null,需要实例恢复

3、旧数据文件

system scn=datafile scn>start scn,stop scn null/notnull

1)system scn=datafile scn>start scn,需要介质恢复成system scn=datafilescn=start scn

2)stopscn null,需要实例恢复,not null 不需要实例恢复

4、备份控制文件

system scn=datafile scn<=start scn(当数据文件为旧的相等),stop scn notnull/null

1)system scn=datafile scn<=start scn,需要使用using backup controlfile介质恢复成system scn=datafile scn=start 

scn=current log scn(当前日志最大SCN)

2)为保证上一次恢复没有用到log日志不被使用,必须resetlogs

5、重建noresetlogs控制文件

控制文件中 datafileCheckpoint来自Online logs中的Current log头

current log scn=system scn=datafilescn>=start scn,stop scn not null/null

1)current log scn=system scn=datafilescn>=start scn,需要介质恢复成systemscn=datafile scn=start scn=redolog scn(当前日志最大SCN),stopscn not null

2)stopscn not null 不需要实例恢复

6、重建resetlogs控制文件

控制文件中datafileCheckpoint来自各数据文件头。

system scn>=datafile scn=start scn,stopscn not null/null

1)system scn>=datafile scn=start scn,需要使用using backup controlfile介质恢复成system scn=datafile scn=startscn(当前日志最大SCN),stopscn not null

2)stop notnull,因为SCN已经为redolog scn,log已经不能使用,必须resetlogs