oracle数据库无法open,报“ORA-01113 file 1 needs media recovery”错误,教你用“六脉神剑”来开库

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

在系统断电或数据库异常宕机后,数据库启动过程中可能出现ORA-01113 ORA-01110 这些错误,而你又没有备份,未开归档或者归档已经被删除了,那要怎么办呢?

启动报错如下:

SQL> startup;
Fixed Size 1248600 bytes
Variable Size 100663976 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
第 1 行出现错误:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: '/u01/app/oracle/oradata/system01.dbf'

一、问题原因

从报错信息可以看出,数据文件system01.dbf需要介质恢复,表明该数据文件已经受损。

二、解决问题

再做下面一些操作前,先给数据库做一个冷备份,给自己一个回退的机会:关闭数据库情况下,备份相应的数据文件、控制文件、redo文件及参数文件等。备份完了,你就可以放心大胆使用下面的“六脉神剑”来开库,绝对好使。

1、尝试恢复数据文件

--启动到mount状态
startup mount;
alter database recover datafile '/u01/app/oracle/oradata/system01.dbf'

若不成功,则继续以下步骤。

2、修改隐含参数启动数据库

alter system "set _allow_resetlogs_corruption"=true scope=spfile;
alter system "_allow_error_simulation"=true scope=spfile;
alter database open;

若不成功,则继续以下步骤。

3、重建控制文件

--先生成控制文件
 alter database backup controlfile to trace;
 select * from v$diag_info where name='Default Trace File';

打开trace文件,找到resetlogs方式重建控制文件那部分内容,如:

STARTUP NOMOUNT
    CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS FORCE LOGGING ARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,
      GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,
      GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512,
      GROUP 4 '/u01/app/oracle/oradata/redo04.log'  SIZE 50M BLOCKSIZE 512
    -- STANDBY LOGFILE
    DATAFILE
      '/u01/app/oracle/oradata/orcl/system01.dbf',
      '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
      '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
      '/u01/app/oracle/oradata/orcl/users01.dbf'
    CHARACTER SET ZHS16GBK
    ;

执行完重建控制文件,做一个不完全恢复:

 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相关的报错,可以通过重建该表空间解决:

create undo tablespace undotbs2 datafile '/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 10G;
alter system set undo_management=MANUAL scope=spfile;
alter system set undo_tablespace= 'undotbs2'  scope=spfile; 

7、善后处理工作
我们在处理过程中,添加了一些使数据库不一致的不安全的参数,记得数据库正常后,要去掉,如:

alter system "set _allow_resetlogs_corruption"=false scope=spfile;
alter system "_allow_error_simulation"=false scope=spfile;

另外数据库打开后,我们最好是做一次备份,数据导出。

好了,我已经将如何开库的“六脉神剑”传授给你了,如果你还有疑惑,欢迎关注。
请添加图片描述

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老苏畅谈运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值