许玉晨 数据和云 

墨墨导读:底层超融合故障导致数据库产生较多坏块,最终导致数据库宕机


背景概述


某客户数据由于底层超融合故障导致数据库产生有大量的坏块,最终导致数据库宕机,通过数据抢救,恢复了全部的数据。

下面是详细的故障分析诊断过程,以及详细的解决方案描述:


故障现象


数据库宕机之后,现场工程师开始用rman备份恢复数据库,当数据库alert日志提示控制文件有大量坏块。


故障恢复:一次底层超融合故障导致的异常处理_Java


并且提示无法访问在线日志。


恢复过程


客户只restore了数据,通过编写脚本recover数据库。


故障恢复:一次底层超融合故障导致的异常处理_Java_02


recover失败提示控制文件有坏块



发现控制文件已经损坏,开始重建控制文件


故障恢复:一次底层超融合故障导致的异常处理_Java_03


然后重新recover database


故障恢复:一次底层超融合故障导致的异常处理_Java_04


发现归档也居然有损坏,通过allow 10 corruption处理。

故障恢复:一次底层超融合故障导致的异常处理_Java_05恢复发现有少量坏块故障恢复:一次底层超融合故障导致的异常处理_Java_06

故障恢复:一次底层超融合故障导致的异常处理_Java_07


并且dbv未发现物理坏块,都是逻辑坏块,影响不大,可控。


重建控制文件,并且必须确保redo都recover完成后再resetlogs。


故障恢复:一次底层超融合故障导致的异常处理_Java_08

故障恢复:一次底层超融合故障导致的异常处理_Java_09


查看x$kcvfh.afs,发现都为0,不需要介质恢复。

故障恢复:一次底层超融合故障导致的异常处理_Java_10

故障恢复:一次底层超融合故障导致的异常处理_Java_11


通过添加参数尝试打开

故障恢复:一次底层超融合故障导致的异常处理_Java_12尝试打开数据库。

故障恢复:一次底层超融合故障导致的异常处理_Java_13打开报undotbs2出现坏块。我们来尝试通过设置10046 event来诊断故障恢复:一次底层超融合故障导致的异常处理_Java_14

发现访问14号回滚段后出现故障,_corrupted_rollback_segments来屏蔽回滚段。

再次尝试打开,发现又报192号block出现坏块

故障恢复:一次底层超融合故障导致的异常处理_Java_15


决定通过一条shell脚本屏蔽所有回滚段,烦不了了!


故障恢复:一次底层超融合故障导致的异常处理_Java_16


成功打开


故障恢复:一次底层超融合故障导致的异常处理_Java_17


后台日志出现undotbs2有坏块,尝试重建undo


故障恢复:一次底层超融合故障导致的异常处理_Java_18


新建undo,并且删掉老的undo表空间

故障恢复:一次底层超融合故障导致的异常处理_Java_19

然后对系统进行validate校验,发现两个对象有坏块,还好不是业务数据,truncate搞定。


故障恢复:一次底层超融合故障导致的异常处理_Java_20


墨天轮原文链接:https://www.modb.pro/db/24652(复制到浏览器或者点击“阅读原文”可打开)。