控制文件丢失处理方法

控制文件损坏可能导致数据库实例故障,因此DBA 必须掌握控制文件损坏的处理方法。单
个控制文件损坏是比较容易恢复的,因为一般的数据库系统,控制文件都不止一个,而且所有的
控制文件都互为镜像,只要复制一个完好的控制文件替换已损坏的控制文件就可以了。控制文件
损坏所导致的最典型的问题就是启动数据库出错,不能加载数据库。
SQL>startup
ORA-00205: error in identifying controlfile, check alert log for more info
查看报警日志文件,有如下信息:
alter database mount
Mon May 14 13:59:51 2010
ORA-00202: controlfile: 'D:\oracle\oradata\orcl\control01.ctl'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。
遇到这种情况,需要首先关闭数据库实例。
SQL>shutdown abort
由于数据库根本就没有加载,所以shutdown abort 是十分安全的。关闭数据库实例后,需要
复制一个完好的控制文件替换已损坏的控制文件,或修改init.ora 中的控制文件参数,取消已损
坏的控制文件,然后重启数据库。
恢复单个控制文件是比较简单的,因为数据库中所有的控制文件都是镜像的,只需要简单地
复制、替换就可以了。这也是我们建议在不同磁盘上镜像控制文件的主要原因,如果磁盘故障导
致了某个控制文件损坏,只要还有一个控制文件是完好的,就可以进行恢复。
如果所有的控制文件都损坏了怎么办呢?这种情况下,就需要使用备份的控制文件了。如果
比较幸运,系统有备份,那么只要将备份取出,就可以恢复了。基于这样的原因,老白建议多做
控制文件的备份,长期保留一份由ALTER DATABASE BACKUP CONTROL FILE TO TRACE 产
生的控制文件的文本备份(每次新增数据文件后都重新备份一次)。
上面我们讨论的是一些比较理想的场景。在某些情况下,我们可能不够走运,当有多个控制
文件损坏了,或者人为删除了所有的控制文件,通过控制文件的复制已经不能解决问题时,就需
要重新建立控制文件。同时应注意,ALTER DATABASE BACKUP CONTROL FILE TO TRACE
可以产生一个控制文件的文本备份。
以下是重新创建控制文件的详细步骤。
(1) 关闭数据库。
SQL>shutdown immediate;
(2) 删除所有控制文件,模拟控制文件丢失。
(3) 启动数据库,出现错误,且不能启动到加载状态下。
SQL>startup
ORA-00205: error in identifying controlfile, check alert log for more info
查看报警日志文件,有如下信息:
SQL>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) 如果没有错误,数据库将启动到打开状态下。
上面介绍了重建控制文件的方法。重建控制文件用于恢复全部控制文件的损坏,需要注意其
书写的正确性,保证包含了所有的数据文件与联机日志。我们在启动数据库之前,一定要确保所
有的数据文件都已经被包含在重建的控制文件脚本中了。如果在编辑过程中误删了某个文件,当
数据库打开后,要想再将其加入到数据库中,就需要恢复这个数据文件,否则无法使该数据文件
处于在线状态。但如果丢失了归档日志,这个文件可能就无法再次加入到数据库中了。
在做数据库恢复时,我们经常会碰到这样一种情况:因为某个磁盘损坏了,不能再恢复或存
储数据文件到这个磁盘,而在存储到其他磁盘时,就必须重新创建控制文件,用于识别这个新的
数据文件。这时也可以用上述方法进行恢复。
下面来看一个更为极端的情况:丢失了所有的控制文件及备份控制文件,同时没有保存记录
文件。这种情况下该如何处理呢?比较麻烦,我们需要根据系统中的文件或者裸设备,手工编写
创建控制文件的命令。当然,也可以从其他类似的系统中复制一份文件来改写。只要足够仔细,
没有遗漏任何文件,也可以达到目的。无论我们是否采用这种最为极端的方式来解决问题,老白
都希望大家把工作做在前面,尽可能避免以这种方式来进行恢复。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25462274/viewspace-2118816/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25462274/viewspace-2118816/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值