数据库启动时会先判断是否需要进行介质恢复->resetlogs->实例恢复的过程。
1)介质恢复是根据控制文件中的数据文件信息和数据文件本身的头信息进行比较,从而确实是否需要进行介质恢复
2)resetlogs是根据控制文件中日志文件信息、日志文件本身的头信息、数据文件头信息(或控制文件中数据文件信息此时介质恢复已经完成,数据文件和控制文件一致)进行比较,从而确定是否需要进行resetlogs的操作
3)实例恢复则是在不需要resetlogs的情况下,根据控制文件中数据文件stop scn是否为null,从而确定是否需要进行实例恢复
备份知识的说明:
recover database,从旧的数据文件恢复到控制文件中数据文件的scn位置
recover database using backup control,恢复到最新的log scn位置
完全恢复:所以文件保持一致
不完全恢复:只要有一个文件不一致
注意,对于数据文件头、控制文件中数据文件头信息与日志文件头一致,但控制文件中日志文件头信息不与之前三者一致也是不完全恢复,虽然数据没有丢失
这里我们定义一下最新控制文件的概念:1)所有文件全部一致,或2)数据文件一致(除stop scn),日志文件一致
“()”内数据为一致数据
以下对各种启动情况进行分析:
1)正常关机
此时控制文件中的数据文件头信息、控制文件中的数据文件头stop scn、数据文件头、控制文件中的日志文件头信息、日志文件头信息全部一致,此时可以正常打开数据库
2)异常关机
控制文件中的数据文件头信息与、数据文件头一致,所以不需要介质恢复,数据文件和控制文件一致
此时控制文件是最新的,即
控制文件中的日志文件头信息、日志文件头信息一致
(控制文件中数据文件头信息、数据文件头信息)与
(控制文件中的日志文件头信息、日志文件头信息)不
一致,但此时stop scn=null, 所以不需要resetlogs,最新的控制文件。
控制文件中的数据文件头stop scn为null,所以需要进行实例恢复,说明数据文件和日志文件不一致
3)旧的数据文件,最新的控制文件
控制文件中的数据文件头信息与、数据文件头不一致,所以需要介质恢复,数据文件和控制文件不一致
如果:
(1)recover database恢复到当前控制文件中数据文件头信息的位置(完全恢复)
如果:
(1)
(控制文件中数据文件头信息、数据文件头信息)与
(控制文件中的日志文件头信息、日志文件头信息)
一致,所以不需要resetlogs。
控制文件中的数据文件头stop scn不为null,不需要进行实例恢复,数据文件和日志文件一致
(2)
(控制文件中数据文件头信息、数据文件头信息)与
(控制文件中的日志文件头信息、日志文件头信息)不
一致,但stop scn为null
控制文件中的数据文件头stop scn为null,需要进行实例恢复,数据文件和日志文件不一致
(2)recover database until ***恢复到之前的某个点(不完全恢复)
(控制文件中数据文件头信息、数据文件头信息)与
(控制文件中的日志文件头信息、日志文件头信息)不
一致,且stop scn非null,所以需要resetlogs。同时将stop scn重置为null
4)旧的数据文件,不是最新的控制文件
控制文件中的数据文件头信息与、数据文件头不一致,所以需要介质恢复,数据文件和控制文件不一致
如果:
(1)recover database恢复到当前控制文件中数据文件头信息的位置(不完全恢复)
控制文件中的日志文件头信息、日志文件头信息不
一致,所以需要resetlogs。同时将stop scn重置为null
(2)recover database using backup controlfile恢复到当前日志文件的最大scn(不完全恢复)
(控制文件中数据文件头信息、数据文件头信息、日志文件头信息)与
控制文件中的日志文件头信息 不一致
,所以需要resetlogs。同时将stop scn重置为null。
注意:在恢复过程中,控制文件中的日志文件信息并不会虽然恢复而进行推进
5)旧的或备份的控制文件,较新的数据文件
控制文件中的数据文件头信息与、数据文件头不一致,所以需要介质恢复,数据文件和控制文件不一致
recover database using backup controlfile恢复到当前日志文件的最大scn(不完全恢复)
(控制文件中数据文件头信息、数据文件头信息、日志文件头信息)与
控制文件中的日志文件头信息 不一致
,所以需要resetlogs。同时将stop scn重置为null。
6)重建控制文件resetlogs
此时控制文件中的数据文件头信息scn从当前数据文件头scn中获取,而控制文件中的日志文件头信息全零,与日志文件不一致,所以可以理解为是旧的控制文件
(1)(控制文件中数据文件头信息、数据文件头信息、
日志文头信息)一致,可以不用介质恢复
日志文件头和控制文件中日志文件头信息不一致,所有需要resetlogs(丢失联机日志数据)
(2)
也可以用recover database using controlfile 恢复到当前最近日志的scn位置
日志文件头和控制文件中日志文件头信息不一致,所有需要resetlogs(如果联机日志完好,数据不会丢失)
7)重建控制文件noresetlogs
此时控制文件中的数据文件头信息scn从当前日志头scn中获取current log scn,控制文件全部scn都设置为最新,包括日志部分。
(1)如果此时数据文件过旧,则需要介质恢复recover database,此时所有文件一致,不需要resetlogs
(2)如果数据文件已经一致,则可以直接 alter database open。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24104518/viewspace-712569/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24104518/viewspace-712569/