oracle数据库无法open,报“ORA-01113 file 1 needs media recovery”错误 ...

打印 上一主题 下一主题

主题 1092|帖子 1092|积分 3276

  1. 作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
  2. 公众号:老苏畅谈运维
  3. 欢迎关注本人公众号,更多精彩与您分享。
复制代码
在体系断电或数据库异常宕机后,数据库启动过程中可能出现ORA-01113 ORA-01110 这些错误,而你又没有备份,未开归档或者归档已经被删除了,那要怎么办呢?
启动报错如下:
  1. SQL> startup;
  2. Fixed Size 1248600 bytes
  3. Variable Size 100663976 bytes
  4. Database Buffers 184549376 bytes
  5. Redo Buffers 7139328 bytes
  6. 数据库装载完毕。
  7. 第 1 行出现错误:
  8. ORA-01113: 文件 1 需要介质恢复
  9. ORA-01110: 数据文件 1: '/u01/app/oracle/oradata/system01.dbf'
复制代码
一、问题原因

从报错信息可以看出,数据文件system01.dbf需要介质恢复,表明该数据文件已担当损。
二、解决问题

再做下面一些操作前,先给数据库做一个冷备份,给自己一个回退的机会:关闭数据库环境下,备份相应的数据文件、控制文件、redo文件及参数文件等。备份完了,你就可以放心大胆使用下面的“六脉神剑”来开库,绝对好使。
1、尝试恢复数据文件
  1. --启动到mount状态
  2. startup mount;
  3. alter database recover datafile '/u01/app/oracle/oradata/system01.dbf'
复制代码
若不成功,则继承以下步骤。
2、修改隐含参数启动数据库
  1. alter system "set _allow_resetlogs_corruption"=true scope=spfile;
  2. alter system "_allow_error_simulation"=true scope=spfile;
  3. alter database open;
复制代码
若不成功,则继承以下步骤。
3、重修控制文件
  1. --先生成控制文件
  2. alter database backup controlfile to trace;
  3. select * from v$diag_info where name='Default Trace File';
复制代码
打开trace文件,找到resetlogs方式重修控制文件那部分内容,如:
  1. STARTUP NOMOUNT
  2.     CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS FORCE LOGGING ARCHIVELOG
  3.         MAXLOGFILES 16
  4.         MAXLOGMEMBERS 3
  5.         MAXDATAFILES 100
  6.         MAXINSTANCES 8
  7.         MAXLOGHISTORY 292
  8.     LOGFILE
  9.       GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,
  10.       GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,
  11.       GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512,
  12.       GROUP 4 '/u01/app/oracle/oradata/redo04.log'  SIZE 50M BLOCKSIZE 512
  13.     -- STANDBY LOGFILE
  14.     DATAFILE
  15.       '/u01/app/oracle/oradata/orcl/system01.dbf',
  16.       '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  17.       '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  18.       '/u01/app/oracle/oradata/orcl/users01.dbf'
  19.     CHARACTER SET ZHS16GBK
  20.     ;
复制代码
执行完重修控制文件,做一个不完全恢复:
  1. RECOVER DATABASE USING BACKUP CONTROLFILE;
复制代码
做完不完全恢复,不发急打开,我们先推进数据库的SCN。
4、推进数据库的SCN
如何推进数据库的SCN,不同数据库版本有不同的方法,可以参考之前的文章:
史上最全,费尽心血总结oracle推进SCN方法(一)
史上最全,费尽心血总结oracle推进SCN方法(二)
史上最全,费尽心血总结oracle推进SCN方法(三)
史上最全,费尽心血总结oracle推进SCN方法(四)
史上最全,费尽心血总结oracle推进SCN方法(五)
史上最全,费尽心血总结oracle推进SCN方法(六)
史上最全,费尽心血总结oracle推进SCN方法(七)
史上最全,费尽心血总结oracle推进SCN方法(八)
这么多种方法,总有一种得当你的。
推进完SCN,就可以使用 alter database open resetlogs 打开数据库
5、增加数据库参数,防止事务恢复
强制打开后,假如碰到ORA-00607错误,可以加以下参数,临时禁止禁用smon事务恢复:
alter system set event=‘10513 trace name context forever,level 2 : 10512 trace name context forever,level 1: 10511 trace name context forever,level 2: 10510 trace name context forever,level 1’ scope=spfile;
6、调整数据库undo管理方式,创建新的undo
后续还可能碰到undo相干的报错,可以通过重修该表空间解决:
  1. create undo tablespace undotbs2 datafile '/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 10G;
  2. alter system set undo_management=MANUAL scope=spfile;
  3. alter system set undo_tablespace= 'undotbs2'  scope=spfile;
复制代码
7、善后处置惩罚工作
我们在处置惩罚过程中,添加了一些使数据库不同等的不安全的参数,记得数据库正常后,要去掉,如:
  1. alter system "set _allow_resetlogs_corruption"=false scope=spfile;
  2. alter system "_allow_error_simulation"=false scope=spfile;
复制代码
别的数据库打开后,我们最好是做一次备份,数据导出。
好了,我已经将如何开库的“六脉神剑”教授给你了,假如你另有迷惑,欢迎关注。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表