Oracle数据库能够Open的条件:
1 所有控制文件必须存在并且同步
2 所有的online状态的数据文件必须存在并且同步
3 每个重做日志组至少有一个成员存在
4 SHUTDOWN->NOMOUNT->MOUNT->OPEN
NOMOUNT(STARTED):实例必须读取初始化参数文件,不会检查数据文件
MOUNT:检查所有的控制文件是否存在并同步,有一个控制文件丢失或损坏,实例报错,并返回到NOMOUNT状态
OPEN:检查所有的重做日志组内至少有一个成员存在,丢失的成员会生成alert log;检查所有控制文件中记录的数据文件是否存在(不检查offline状态的,当dba把offline的变成online的时候会检查),如果丢失一个文件会报错,并返回到MOUNT状态,v$recover_file会记录所有需要恢复的文件(报错只会报第一个丢失的文件)
5 数据库打开以后,丢失以下文件也会导致失败
5.1 任何控制文件
5.2 任一System表空间或Undo表空间数据文件
5.3 任一个重做日志组(其实只要重做日志组内还有一个成员存在,数据库就不会失败)
5.4 失败后必须shutdown abort后恢复
6 数据库打开以后,丢失System表空间和Undo表空间以外其他表空间的文件不会导致失败
6.1 当数据库 open 的时候会恢复,这个错误会出现在alert log,也可以通过Data Recovery Advisor发现。