您的位置:首页 > 其它

因停电等不可控因素导致控制文件损坏

2016-07-22 17:12 260 查看
案例一、今天处理一家医院因停电导致数据库打不开,三个控制文件和日志文件均损坏

提示找不到控制文件,先去文件系统下确认控制文件是否丢失,若丢失一个,使用其他的控制文件直接复制一份即可,若全部丢失,需要使用rman恢复;

如果没有开启归档,则需要重建控制文件

使用不同控制文件启动oracle

alter system set control_files='控制文件路径' scope=spfile;

只能自己创建控制文件

首次尝试

CREATE CONTROLFILE REUSE DATABASE "orcl" NORESETLOGS  NOARCHIVELOG
--要看需要恢复的库是否开启归档,设置NORESTLOGS不会重写redo日志,保证数据一致性

    MAXLOGFILES 16  

    MAXLOGMEMBERS 3  

    MAXDATAFILES 100  

    MAXINSTANCES 8  

    MAXLOGHISTORY 4672  

LOGFILE  

  GROUP 1 '存储路径+redo01.log'  SIZE 50M,  

  GROUP 2 '存储路径+redo02.log'  SIZE 50M,  

  GROUP 3 '存储路径+redo03.log'  SIZE 50M  

-- STANDBY LOGFILE

DATAFILE  

 '路径+所有数据文件名称'

CHARACTER SET ZHS16GBK;

遇到问题 

1、此步骤不需要创建临时表空间

2、注意逗号位置

3、遇到ORA-01192: must have at least one enabled thread
c121

发现redo日志出现错误,将NORESETLOGS改为RESETLOGS成功创建;

再次重启报参数错误

执行create pfile ='c:\aa.ora' from spfile;

shutdown immediate;

编辑aa.ora

末尾添加隐含参数_allow_resetlogs_corruption=true强制启动数据库,设置此参数之后,在数据库Open过程中,Oracle会跳过某些一致性检查,从而使数据库可能跳过不一致状态

重启数据库

执行startup mount pfile='c:\aa.ora';

成功启动;

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp02.dbf'
size 100M;--添加一个临时数据文件

使用隐含参数_allow_resetlogs_corruption,以后可能会出现一些问题,为了保险起见,将数据导出后重建数据库实例。

案例二、又是停电,很频繁又难解决

这次的停电导致 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务,怀疑是实例服务的问题,重启服务没效果,查阅http://blog.sina.com.cn/s/blog_5007d1b10100oqo8.html这篇文章,修改了listener.ora,重启实例服务和监听服务,进入空闲例程,
直接startup又报ora-00119和ora-00132,此处推荐一篇文章http://blog.csdn.net/xb12369/article/details/26720275,按此方法解决,成功启动

案例三、

停电导致undo表空间损坏,错误代码ora00600[4194] 
重建undo表空间,修改pfile文件夹下的init.ora.2252016132644文件,根据http://www.cnblogs.com/xwdreamer/p/3778383.html提供的方法成功解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: