如果所有的控制文件都损坏,但是没有进行备份的情况下,需要我们手工进行创建控制文件。
控制文件是一个比较复杂的过程,也比较耗时,故强烈建议在数据库的文件结构发生变化的时候,使用如下的命令生成一份创建控制文件的脚本,以防万一。最好也做好控制文件的备份工作:
详细脚本:
SQL>shutdown immediate;
SQL>startup mount;
SQL>alter database backup controlfile to trace;
下面是创建脚本的过程:
如果没有报错的话:
SQL>shutdown immediate;
SQL>shutdown noumount;
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
SQL>alter database mount;
SQL>alter database open;
SQL> ALTER TABLESPACE "TEMP"
ADD TEMPFILE 'D:/ORACLE/ORADATA/ORCL/TEMP01.DBF' SIZE 500M
到此位置,所有的操作已经完成。
附加说明:
以上代码,在数据库正常关闭后,并且所有的在线日志都是有效的话,该方法可以打开数据库。
如果数据是非normal或immediate方式关闭,且所有在线日志文件无效的话,在创建控制文件的时候需要把NORESETLOGS 改为 Resetlog。
并且在控制文件成功创建后,需要一次介质修复操作;
SQL>recover database;
SQL>alter database open;
SQL> recover database using backup controlfile;
SQL>alter database open resetlogs;
如果数据文件是从备份中恢复或在最后一次shutdown 时不是normal 或immediate时候要求进行恢复: 创建完成后,由于temp表空间的文件没有包含在控制文件中,导致表空间无数据文件,我们必须要使用下面的语句进行添加: