您的位置:首页 > 其它

ORA-00214 ORA-02095 控制文件损坏的恢复实战经验

2013-07-31 17:12 288 查看
问题:

客户服务器死机,强制断电关机,重启电脑后数据库启动时报错:

ORA-00214: ???? ''D:\ORACLE\ORADATA\O73\CONTROL01.CTL'' ?? 7067 ???

''D:\ORACLE\ORADATA\O73\CONTROL02.CTL'' ?? 7061 ???

----------------------------------------------------------------------------

答案:

找了网上很多解决办法,没有一个完整可行的解决方案,经过实际摸索,解决步骤整理如下:

在CMD命令窗口:

D:\>sqlplus /nolog

SQL> conn sys/change_on_install as sysdba;

补充下:如果这里都登录不进去,先把CONTROL01.CTL、CONTROL02.CTL备份后删除,由CONTROL03.CTL复制成CONTROL01.CTL、CONTROL02.CTL,这样启动数据库会报“ORA-01122 ORA-01110 ORA-01207”的错误,这个可以通过后面的重建控制文件来解决。

继续,

SQL> shutdown immediate

SQL> startup nomount

SQL> alter system set control_files=

'D:\ORACLE\ORADATA\O73\CONTROL03.CTL'

scope=spfile;

SQL> alter database mount

SQL> alter database open

如果这3个控制文件有一个是可用的,到这里就可以解决问题了。但是我的情况是执行上面这个“alter system set control_files...”时报ORA-02095错误了,没有一个可用的控制文件,那就重建控制文件,步骤如下:

1.SQL>alter database backup controlfile to trace as 'f:\aa';

数据库已更改。

oracle8里不能as...,而是直接“alter database backup controlfile to trace”,然后到“\oracle\admin\o73\udump\”里找最新生成的文件,比如我这次的 ORA02632.TRC 即是

2.SQL>shutdown immediate 如果数据库是打开状态,则关闭

ORA-01109: 数据库未打开

已经卸载数据库

3.SQL>startup nomount;

ORACLE 例程已经启动。

Total System Global Area 105979576 bytes

Fixed Size 454328 bytes

Variable Size 79691776 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

4.用编辑器打开在第1步生成的f:\aa文件(我这次的是 D:\oracle\admin\o73\udump\ORA02632.TRC);

其实在这个文件中的已经告诉你咋样恢复你的数据库了,找到STARTUP NOMOUNT字样,然后下面可以看到类 似语句,这个文件有好几个类似的生成控制文件语句,

主要针对不同的环境执行不同的语句,象我的数据库没有做任何备份,也不是在归档模式,就执行这句:

CREATE CONTROLFILE REUSE DATABASE "O73" NORESETLOGS NOARCHIVELOG

MAXLOGFILES 32

MAXLOGMEMBERS 2

MAXDATAFILES 32

MAXINSTANCES 16

MAXLOGHISTORY 1815

LOGFILE

GROUP 1 'G:\ORACLE\ORADATA\O73\REDO03.LOG' SIZE 1M,

GROUP 2 'G:\ORACLE\ORADATA\O73\REDO02.LOG' SIZE 1M,

GROUP 3 'G:\ORACLE\ORADATA\O73\REDO01.LOG' SIZE 1M

DATAFILE

'G:\ORACLE\ORADATA\O73\SYSTEM01.DBF',

'G:\ORACLE\ORADATA\O73\RBS01.DBF',

'G:\ORACLE\ORADATA\O73\USERS01.DBF',

'G:\ORACLE\ORADATA\O73\TEMP01.DBF',

'G:\ORACLE\ORADATA\O73\TOOLS01.DBF',

'G:\ORACLE\ORADATA\O73\INDX01.DBF',

'G:\ORACLE\ORADATA\O73\DR01.DBF'

CHARACTER SET ZHS16GBK

;

执行上面这段语句,这个语句重建控制文件,然后看着f:\aa文件完成下面的恢复工作就可以了:

5.SQL>RECOVER DATABASE (恢复指定表空间、数据文件或整个数据库)

6.SQL>ALTER DATABASE OPEN 打开数据库

再看数据库状态,终于是“打开”正常的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: