现象 :启动数据库时,报错如下:

SQL> conn / as sysdba
已连接。
SQL> startup force;
ORACLE 例程已经启动。

Total System Global Area  188743680 bytes
Fixed Size                  1248020 bytes
Variable Size              75498732 bytes
Database Buffers          109051904 bytes
Redo Buffers                2945024 bytes
ORA-00205: ?????????, ??????, ???????


解决思路:

1。查看alert_orcl.log日志,发现问题如下:
Mon Sep 15 20:03:44 2008
ORA-00202: control file: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.
CTL'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 123) 文件名、目录名或卷标语法不正确。

2。shutdown immediate 并用:用复用的控制文件来替换该CONTROL01。CTL,再次启动数据库.

发现还是报这个错误。

3。启动数据库到mount状态,再用create pfile from spfile 创建initorcl.ora文件,查看一下,控制文件路径,发现如下问题:



control01.ctl中间有空黑色的点,把它删除之后,保存。

4。再次启动数据库:
SQL> startup pfile=C:\oracle\product\10.2.0\db_1\database\initorcl.ora
ORACLE 例程已经启动。

Total System Global Area  188743680 bytes
Fixed Size                  1248020 bytes
Variable Size              75498732 bytes
Database Buffers          109051904 bytes
Redo Buffers                2945024 bytes
ORA-00205: ?????????, ??????, ???????
还是报这个错。。


5。再次查看alertorcl.log,却发现报错如下:

ORA-00202: control file: 'C:\ORACLE\PRODUCT\1
.2.0\ORADATA\ORCL\CONTROL03.CTL'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 123) 文件名、目录名或卷标语法不正确。

哈哈,这时心理有数了,再次查initorcl.ora这个文件,发现控件文件3的问题,并修正,顺便核查了一下所有的控制文件,保存后,再次用pfile启动数据库,OK,顺利启动。。

6。顺利启动,一切正常。这时候,我又重新创建spfile from pfile,重新启动数据库后,一切正常。

SQL> startup pfile=C:\oracle\product\10.2.0\db_1\database\initorcl.ora
ORACLE 例程已经启动。

Total System Global Area  188743680 bytes
Fixed Size                  1248020 bytes
Variable Size              75498732 bytes
Database Buffers          109051904 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL>
SQL> create spfile from pfile;

文件已创建。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  188743680 bytes
Fixed Size                  1248020 bytes
Variable Size              75498732 bytes
Database Buffers          109051904 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      C:\ORACLE\PRODUCT\10.2.0\DB_1\
                                                 DATABASE\SPFILEORCL.ORA
SQL>


总结:
今天这个修复控制文件的试验告诉我们两个要注意的问题。

1。启动数据库报ORA-00205: ?????????, ??????, ???????错误,与下列因素有关:

A 查看alert_sid.log日志,查看是哪个控制文件打不开。

B COPY正确的控制文件替换受损的控制文件,启动数据库,若还是报同样的错误。执行C频操作


C create pfile from spfile ,查看initsid.ora文件,控制文件的相关路径是否正确

D 全更改为正确的之后,再启动数据库。


2。所有的SQL语句,不要保存在WORD里边,这是今天控制文件路径错误的根源。切记切记。用记事本做。


参考网摘:


一、 损坏单个控制文件
    损坏单个控制文件是比较容易恢复的,因为一般的数据库系统,控制文件都不是一个,而且所有的控制文件都互为镜相,只要拷贝一个好的控制文件替换坏的控制文件就可以了。
    1、控制文件损坏,最典型的就是启动数据库出错,不能mount数据库
    SQL>startup
    ORA-00205: error in identifying controlfile, check alert log for more info
    查看报警日志文件,有如下信息
    alter database mount
    Mon May 26 11:59:52 2003
    ORA-00202: controlfile: 'D: Oracleoradatachencontrol01.ctl'
    ORA-27041: unable to open file
    OSD-04002: unable to open file
    O/S-Error: (OS 2) 系统找不到指定的文件。
    2、停止数据库
    SQL>shutdown immediate
    3、拷贝一个好的控制文件替换坏的控制文件或修改init.ora中的控制文件参数,取消这个坏的控制文件。
    4、重新启动数据
    SQL>startup
    说明:
    1、损失单个控制文件是比较简单的,因为数据库中所有的控制文件都是镜相的,只需要简单的拷贝一个好的就可以了
    2、建议镜相控制文件在不同的磁盘上
    3、建议多做控制文件的备份,长期保留一份由alter database backup control file to trace产生的控制文件的文本备份
     二、 损坏全部控制文件
    损坏多个控制文件,或者人为的删除了所有的控制文件,通过控制文件的复制已经不能解决问题,这个时候需要重新建立控制文件。同时注意,alter database backup control file to trace可以产生一个控制文件的文本备份。
    以下是详细重新创建控制文件的步骤
    1、关闭数据库
    SQL>shutdown immediate;

    2、删除所有控制文件,模拟控制文件的丢失
    3、启动数据库,出现错误,并不能启动到mount下
    SQL>startup
    ORA-00205: error in identifying controlfile, check alert log for more info
    查看报警日志文件,有如下信息
    alter database mount
    Mon May 26 11:53:15 2003
    ORA-00202: controlfile: 'D: Oracleoradatachencontrol01.ctl'
    ORA-27041: unable to open file
    OSD-04002: unable to open file
    O/S-Error: (OS 2) 系统找不到指定的文件。
    4、关闭数据库
    SQL>shutdown immediate;
    5、在internal或sys下运行如下创建控制文件的脚本,注意完整列出联机日志或数据文件的路径,或修改由alter database backup control file to trace备份控制文件时产生的脚本,去掉多余的注释即可。
 
         
STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 ' D:ORACLEORADATATESTREDO01.LOG ' SIZE 1M, GROUP 2 ' D:ORACLEORADATATESTREDO02.LOG ' SIZE 1M, GROUP 3 ' D:ORACLEORADATATESTREDO03.LOG ' SIZE 1M DATAFILE ' D:ORACLEORADATATESTSYSTEM01.DBF ' , ' D:ORACLEORADATATESTRBS01.DBF ' , ' D:ORACLEORADATATESTUSERS01.DBF ' , ' D:ORACLEORADATATESTTEMP01.DBF ' , ' D:ORACLEORADATATESTTOOLS01.DBF ' , ' D:ORACLEORADATATESTINDX01.DBF ' CHARACTER SET ZHS16GBK; -- Recovery is required if any of the datafiles are restored backups, -- or if the last shutdown was not normal or immediate. RECOVER DATABASE -- if the last shutdown was not normal or immediate -- noarchive -- RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE -- archive -- RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL -- Database can now be opened normally. ALTER DATABASE OPEN ; -- if recover database until cancel -- ALTER DATABASE OPEN RESETLOGS;
    6、如果没有错误,数据库将启动到open状态下。
    说明:
    1、重建控制文件用于恢复全部控制文件的损坏,需要注意其书写的正确性,保证包含了所有的数据文件与联机日志
    2、经常有这样一种情况,因为一个磁盘损坏,我们不能再恢复(store)数据文件到这个磁盘,因此在store到另外一个盘的时候,我们就必须重新创建控制文件,用于识别这个新的数据文件,这里也可以用这种方法用于恢复。


20090323 碰到的一例因为控制文件故障导致出现启动不了ORACLE的事例及解决过程
 
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145488364 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
ORA-00214: ???? 'E:\ORACLE\PRODUCT\10.1.0\ORADATA\OAMIS\CONTROL01.CTL' ??
735082 ??? 'F:\DOUBLEORACLE\CONTROL04.CTL' ?? 734445 ???

1、SQL> shutdown immediate
ORA-01507: ??????

ORACLE 例程已经关闭。

2、
SQL> create pfile from spfile;
文件已创建。
3、编辑init参数,去掉上面报错的两个控制文件。即*.control_files='e:\oracle\product\10.1.0\oradata\oamis\control02.ctl','e:\oracle\product\10.1.0
\oradata\oamis\control03.ctl'
SQL> conn / as sysdba
已连接到空闲例程。
4、
SQL> create spfile from pfile;
文件已创建。
5、SQL> startup
ORACLE 例程已经启动。
Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145488364 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
数据库装载完毕。
数据库已经打开。
SQL>