故障恢复:一次底层超融合故障导致的异常处理
时间:2022-07-23
本文章向大家介绍故障恢复:一次底层超融合故障导致的异常处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
墨墨导读:底层超融合故障导致数据库产生较多坏块,最终导致数据库宕机。
背景概述
某客户数据由于底层超融合故障导致数据库产生有大量的坏块,最终导致数据库宕机,通过数据抢救,恢复了全部的数据。
下面是详细的故障分析诊断过程,以及详细的解决方案描述:
故障现象
数据库宕机之后,现场工程师开始用rman备份恢复数据库,当数据库alert日志提示控制文件有大量坏块。
并且提示无法访问在线日志。
恢复过程
客户只restore了数据,通过编写脚本recover数据库。
recover失败提示控制文件有坏块
发现控制文件已经损坏,开始重建控制文件
然后重新recover database
发现归档也居然有损坏,通过allow 10 corruption处理。
export ORACLE_SID=****
rman target / nocatalog log=/app/backup/data/rman_reover_`date +%Y%m%d-%H%M%S`.log <<EOF
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
recover database allow 10 corruption; --允许10个坏块
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
}
EOF
exit
恢复发现有少量坏块
Read datafile mirror 'DATADG_0002' (file 35, block 100790) found same corrupt data (logically corrupt)
Read datafile mirror 'DATADG_0005' (file 35, block 100790) found same corrupt data (logically corrupt)
Read datafile mirror 'DATADG_0006' (file 35, block 101236) found same corrupt data (logically corrupt)
Read datafile mirror 'DATADG_0001' (file 35, block 101236) found same corrupt data (logically corrupt)
并且dbv未发现物理坏块,都是逻辑坏块,影响不大,可控。
重建控制文件,并且必须确保redo都recover完成后再resetlogs。
查看x$kcvfh.afs,发现都为0,不需要介质恢复。
通过添加参数尝试打开
*._allow_resetlogs_corruption=TRUE
*._allow_error_simulation=true
尝试打开数据库。
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-01578: ORACLE data block corrupted (file # 4, block # 176)
ORA-01110: data file 4: '+DATADG/**/datafile/undotbs2.428.1038879793'
Process ID: 129255
Session ID: 1047 Serial number: 1
打开报undotbs2出现坏块。我们来尝试通过设置10046 event来诊断
EXEC #140221347801464:c=0,e=231,p=0,cr=1,cu=2,mis=0,r=1,dep=1,og=3,plh=3078630091,tim=1588059192262342
CLOSE #140221347801464:c=0,e=2,dep=1,type=3,tim=1588059192262358
PARSE #140221347802408:c=0,e=7,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=3,plh=906473769,tim=1588059192262394
BINDS #140221347802408:
Bind#0
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=7f87d3a15aa0 bln=22 avl=02 flg=05
value=14 --14号rollback segment
EXEC #140221347802408:c=1000,e=57,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=3,plh=906473769,tim=1588059192262474
FETCH #140221347802408:c=0,e=13,p=0,cr=2,cu=0,mis=0,r=1,dep=1,og=3,plh=906473769,tim=1588059192262496
CLOSE #140221347802408:c=0,e=2,dep=1,type=3,tim=1588059192262511
WAIT #140221397039552: nam='db file sequential read' ela= 2058 file#=4 block#=176 blocks=1 obj#=0 tim=1588059192264600
DDE rules only execution for: ORA 1110
----- START Event Driven Actions Dump ----
---- END Event Driven Actions Dump ----
----- START DDE Actions Dump -----
Executing SYNC actions
----- START DDE Action: 'DB_STRUCTURE_INTEGRITY_CHECK' (Async) -----
Successfully dispatched
发现访问14号回滚段后出现故障,_corrupted_rollback_segments来屏蔽回滚段。
再次尝试打开,发现又报192号block出现坏块
决定通过一条shell脚本屏蔽所有回滚段,烦不了了!
成功打开
后台日志出现undotbs2有坏块,尝试重建undo
新建undo,并且删掉老的undo表空间
SQL> alter system set undo_tablespace=undotbs02 sid='sid1';
SQL> drop tablespace UNDOTBS2 including contents and datafiles;
然后对系统进行validate校验,发现两个对象有坏块,还好不是业务数据,truncate搞定。
墨天轮原文链接:https://www.modb.pro/db/24652
- WordPress 显示数据库查询次数、查询时间及内存占用的代码
- WCF服务在高负载下可能会变慢
- WordPress 后台管理菜单名称重命名的方法
- 从Akismet 黑名单中洗白的方法
- 移除除管理员之外的其他用户的WordPress 更新升级提示
- 为 WordPress 后台管理菜单自定义排序
- WordPress 添加个性化的博客宠物(妹纸篇)
- WordPress 添加个性化的博客宠物(汉纸篇)
- WordPress 退出(登出)的时候跳转到首页
- WordPress免插件仅代码实现面包屑导航
- 开源的作业调度框架 - Quartz.NET
- Windows Server 2003网络负载均衡的实现
- 使用 ETW 对 .NET 应用程序进行性能诊断
- ORB_SLAM论文解读
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法