东瑜

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

场景

之前写了一篇文章,是redo日志全部丢失的情况下,数据库实例恢复的方式。但是,这次特殊在,实例恢复失败的情况下。非常规打开数据库(数据库已经不一致了,但是可以通过expdp导出,导出重要的数据)

可以通过下列命令,完成实例恢复

SYS@oradb> recover database until cancel;
完成介质恢复。
SYS@oradb> alter database open resetlogs;

此用户的情况用上述命令,无法恢复!!!!!
首先,数据库的归档满了。无法checkpoint。
其次,redo日志全部没有了。

因此,关闭数据库之后。进行上述操作。alert日志报了如下错误

SQL> recover database until cancel;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done


SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 142116346 (在 09/22/2020 20:06:05 生成) 对于线程 1 是必需的 ORA-00289:
建议: /blqy/oracle/flashback/ARPDB/archivelog/2020_10_16/o1_mf_1_920_%u_.arc
ORA-00280: 更改 142116346 (用于线程 1) 在序列 #920 中

运气不好的是,没有
/blqy/oracle/flashback/ARPDB/archivelog/2020_10_16/o1_mf_1_920_%u_.arc日志文件。

因此,使用隐藏参数

Oracle 的隐含参数:
_allow_resetlogs_corruption=TRUE
SYS>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
SYS>alter system reset "_allow_resetlogs_corruption" scope=spfile; 清除隐含参数
Oracle 不推荐使用这个隐含参数
该参数的含义是:允许数据库在不一致性的情况下强制打开数据库。

然后再次关闭数据库,在启动数据库,如下:

SQL> shutdown immediate;
ORA-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 2505338880 bytes
Fixed Size		    2255832 bytes
Variable Size		  620758056 bytes
Database Buffers	 1862270976 bytes
Redo Buffers		   20054016 bytes
数据库装载完毕。
数据库已经打开。

数据库被强制打开。速度做了expdp的逻辑备份。保证了数据。

posted on 2020-10-16 15:09  东瑜  阅读(182)  评论(0编辑  收藏  举报
\\页脚html代码