在启动数据库的时候,我们可能会遇到如下错误:

ORA-1122 :database file %s failedverification check

ORA-1110 : datafile : 

ORA-1207: ORA 1207 file is more recent thancontrol file

 

ORA-1207的主要原因是因为数据库突然掉电,在重启的时候,就会容易遇到这种错误。

 

MOS上对这个错误的解释如下:

The informationin this file is inconsistent with information from the control file.

The datafileheader CHECKPOINT count is beyond the controlfile CHECKPOINT count.

      

控制文件中记录了整个数据库的全部信息,具体包括数据文件的,日志文件等等。

 

在数据库运行期间,由于检查点发生等原因会不断的更新控制文件,同时数据库在关闭和重启过程中都会更新控制文件的内容,但是数据库服务器突然的掉电,会导致当前的db信息无法适时更新到控制文件中,再次启动数据库后,当oracle检测控制文件和其它文件信息是否一致时,就出现了这个错误。

 

MOS上给出的解决方案是重建控制文件:

 

1.Mount the database

SQL> Startup mount


2. Save the information from the control file:

SQL> Alter database backup controlfile to trace;


3. Create a control file creation script from the tracefile generated inuser_dump_dest.


Use the Noresetlogs option

--注意这里使用的是noresetlogs

 

4. Shutdown the database and start it in NOMOUNT mode


SQL> shutdown abort

SQL> startup nomount


5. Create the control file

Use the script generated by the 'backup controlfile to trace' commandabove. 


Please refer to:

Note735106.1 - How to Recreate a Controlfile



6.Recover the database

SQL> recover database;

7. Open the database

SQL> Alter database open;

 

注意:

我们这里将控制文件的内容备份到trace文件里的前提条件是数据库必须是mount或者open状态,如果连mount都不行的话,我们生成控制文件就麻烦点了。

SQL> Alter database backup controlfileto trace;


在MOS的[ID 735106.1]里说明:

如果没有控制文件的内容,我们也有两种方法来处理ORA-1207的错误,一是使用Restore的方式,另一个是从备份中找回控制文件,如果这2个都没有,我们就必须手工的写编写控制文件的内容。

 

控制文件的内容是有一定格式的,我们只需要按照规定的格式创建就好了。

 

 

 

重建控制文件后我们需要添加Temp表空间,并且留意是否存在只读的表空间,因为重建控制文件会影响到这2个表空间​