笑看天下无敌手 发表于 2024-9-19 08:41:56

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;
别的数据库打开后,我们最好是做一次备份,数据导出。
好了,我已经将如何开库的“六脉神剑”教授给你了,假如你另有迷惑,欢迎关注。
https://i-blog.csdnimg.cn/blog_migrate/e4bb3f4e082b086a1ecd806211490eab.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: oracle数据库无法open,报“ORA-01113 file 1 needs media recovery”错误