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>