数据库恢复后打开时遇到 ORA-01152的解决方法

本文详细解析了在数据库恢复过程中遇到ORA-01152错误的原因,即数据文件的SCN超过了控制文件的SCN,提供了两种解决方案:一是通过归档日志和在线日志恢复一致性;二是利用隐含参数_allow_resetlogs_corruption临时开启数据库,再进行数据一致性检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库恢复后打开时遇到 ORA-01152

数据库恢复后打开时遇到:

RMAN> alter database open resetlogs;
......
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/oracle/u01/app/oracle/oradata/orcl/system01.dbf'

分析原因

oracle对于这个错误的解释是:

ORA-01152: file 1 was not restored from a sufficiently old backup  
Cause: An incomplete recovery session was started, but an insufficient number of logs were applied to make the database consistent. This file is still in the future of the last log applied. The most likely cause of this error is forgetting to restore the file from a backup before doing incomplete recovery.
Action: Either apply more logs until the database is consistent or restore the database file from an older backup and repeat recovery.  

其实说得很清楚,就是说使用了一个旧的控制文件。备份里restore出的controlfile上的scn 小于 datafile上所记录的scn,连解决方法也说清楚了。一是以old controlfile的SCN为准,将datafile恢复到与其一致,这样就会导致数据的不一致。二是以datafile的SCN为准,将controlfile恢复到与其一致,此时就会报ORA-01152的错误,然后我们通过recover database,进而利用归档日志来完成controlfile和datafile的SCN一致,归档找不到再利用redolog来恢复。

恢复到超过controlfile的SCN状态

SQL> recover database using backup controlfile;
......
Specify log: {=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/orcl/redo01.log
Log applied.
Media recovery complete.

注意:/u01/app/oracle/oradata/orcl/redo01.log是手工输入的。
此时恢复完成,应用完所有归档,并重新应用了redolog,启动数据库到open状态

SQL>alter database open resetlogs;
Database altered.

也可以进行时间点的数据恢复(大于之前所需archivelog中的最后一个archivelog即可),例如: set until sequence 15 thread 1; 这个sequence 15 里面的scn是大于数据库里面的SCN的。这样就恢复出一致性的数据,然后用open resetlogs打开数据即可。

利用隐含参数"_allow_resetlogs_corruption"=true打开数据库

更改参数

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
System altered.

恢复数据库

SQL> recover database using backup controlfile until cancel;
SQL> alter database open resetlogs;
SQL> startup force;

将内置参数改回来

SQL> alter system set "_allow_resetlogs_corruption"=false scope=spfile;
System altered.

数据库启动到open状态后查询数据

文章下方是我的微信,欢迎加我。👇

ORA-01547表示数据文件在备份或恢复期间发生了丢失或损坏。这个错误通常会导致数据库无法启动或无法访问特定的数据文件。要解决这个问题,需要找到数据文件的备份,并将其恢复数据库中,以修复丢失或损坏的数据文件。 ORA-01152表示无法在数据库中找到要恢复的数据文件。这个错误通常发生在尝试恢复一个不存在的数据文件解决这个问题的方法是检查数据库的控制文件和日志文件,确保它们包含了正确的数据文件信息。如果需要,可以手动编辑控制文件中的数据文件列表,然后重新尝试恢复操作。 ORA-01110表示打开数据库遇到了错误。这个错误通常发生在数据库启动过程中,可能与数据文件丢失、控制文件损坏或其他数据库文件问题有关。解决这个问题的方法是检查数据库的错误日志和跟踪文件,找到导致错误的原因,并按照相应的解决方案来修复该问题。这可能涉及到恢复备份的数据文件、修复损坏的控制文件或执行其他相关的数据库维护操作。 综上所述,ORA-01547、ORA-01152ORA-01110都是与数据库文件相关的错误。要解决这些错误,需要找到原因,并采取适当的措施来修复或恢复相关的文件。这些错误可能会导致数据库无法启动或无法访问特定的数据文件,因此修复这些错误对于数据库的正常运行非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

姚远Oracle ACE

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

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

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

打赏作者

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

抵扣说明:

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

余额充值