前言:
控制文件顺坏一般有2个方法进行还原,第一如果只损坏一个控制文件的话,可以通过拷贝其他冗余的控制文件过来(一般控制文件至少保存在两个位置;
通过语句可以查询控制文件存放的信息:
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/oracle/PIP/origlogA/cntrl/cntrlPIP.dbf
/oracle/PIP/origlogB/cntrl/cntrlPIP.dbf
/oracle/PIP/sapdata1/cntrl/cntrlPIP.dbf
如果控制文件都顺坏的话,但是系统有备份,可以还原相应的控制文件,然后进行不完全恢复,具体数据库的恢复已经有发帖介绍过去,请各位自行查找了;
但是如果是第三中情况了,所有的控制文件都损坏了,而且没有进行备份,那该怎么办?
本文介绍在这种极端情况下的极端方法,前提你对数据库的信息很熟悉了;
操作步骤:
1、在一台运行良好的数据库上面运行以下语句:
SQL> alter database backup controlfile to trace resetlogs;
然后在相应的alert log下面查找trace产生的语句
2、导出相应的trace文件
1)查找STARTUP NOMOUNT语句,将这一行上面的所有行都删除
2)查找所有以--开始的行,把这些行删除
3)修改所有的db_name跟原来的一致
4)找到CREATE CONTROLFILE REUSE DATABASE...语句,将其中的REUSE修改为SET
5)找到RECOVER DATABASE USING BACKUP CONTROLFILE语句,将其用双横线(--)注释掉
6)修改所有的文件路径跟实际环境的路径一致
7)把修改后的文件以*.sql方式命名,然后上传到服务器
3、启动数据库
1) 通过脚本启动数据库 sqlplu:@/oracle/ccf.sql(例如:放在oracle目录下,并以ccf.sql方式命名)