- 作者介绍:老苏,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;
复制代码 别的数据库打开后,我们最好是做一次备份,数据导出。
好了,我已经将如何开库的“六脉神剑”教授给你了,假如你另有迷惑,欢迎关注。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |