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

问题:
客户服务器死机,强制断电关机,重启电脑后数据库启动时报错:
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 打开数据库

再看数据库状态,终于是“打开”正常的了。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值