案例一、今天处理一家医院因停电导致数据库打不开,三个控制文件和日志文件均损坏
提示找不到控制文件,先去文件系统下确认控制文件是否丢失,若丢失一个,使用其他的控制文件直接复制一份即可,若全部丢失,需要使用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
- 发现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提供的方法成功解决