oracle日志组损坏的处置方法

以下场景针对的是日志组中所有的redo log都已经损坏。

场景一: inactive 日志组损坏,

假如日志组 4 损坏,状态 inactive。解决很简单,重建日志组即可

SQL> alter database clear logfile group 4; 这里 clear 的意思是重建 group4 的文件。

场景二: current 日志组损坏

本例日志组 1 状态是 CURRENT 状态的,现在模拟当前日志组损坏

[oracle@prod]$ rm /u01/oradata/prod/redo01.log

[oracle@prod]$ rm /u01/disk2/prod/redo01b.log

SQL> alter system switch logfile; 切换几次,触动它一下。

告警日志会记录有关信息

暂时好像没有什么问题发生,继续切换,当 current 又转会到 group1 时,session 死!

当前日志损坏的问题比较复杂,可以分以下几种情况讨论

1)数据库没有崩溃

第一步,可以做一个完全检查点,将 db buffer 中的所有 dirty buffer 全部刷新到磁盘上。

SQL> alter system checkpoint;

第二步,尝试数据库在打开状态下进行不做归档的强制清除。

SQL> alter database clear unarchived logfile group n;

数据库此时为打开状态,这步若能成功,一定要做一个新的数据库全备,因为当前日志无法归档,归档日志 sequence 已无法保持连续性。全备的目的就是甩掉之前的归档日志。

2)数据库已经崩溃,只能做传统的基于日志的不完全恢复或使用闪回数据库。

SQL> recover database until cancel;

SQL> alter database open resetlogs;

3)如果之前没有可用的备份,或问题严重到任何方法都不能 resetlogs 打开数据库,为了抢救数据,考虑最后一招使用 Oracle的隐含参数:_allow_resetlogs_corruption=TRUE

Oracle 不推荐使用这个隐含参数

该参数的含义是:允许数据库在不致性的情况下强制打开数据库。_

在不一致状态下强行打开了数据库后,建议做一个逻辑全备。

场景三: active 日志组损坏

做检查点切换,如成功,按照 inactive 损坏处理。否则,按 current 损坏处理。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值