添加 ASM 磁盘故障
问题背景
近期处理了 2 起 ASM 添加磁盘出现的故障,问题现象类似,处理方式也类型。存在共性,所以整理了下相关故障信息,做了一些总结,希望能对大家带来一些参考意义。
故障分析与处理
案例一、某客户
1.1、问题分析
增加磁盘,日志中可以看到已经成功完成磁盘组中
disk
的添加
半个小时后,磁盘头异常:报
ORA-15196
错误,提示
ASM
块头无效。
Rebanlence
过程中,突然
asm
磁盘头故障:
接着磁盘组
dismount
,磁盘被标记为“
de-assignment
”
通过查询官网,可以看到
BUG
造成。
增加磁盘出现问题
只能重建磁盘组恢复:

1.2、问题处理
l 切换 dg(...过程略)
l 老生产禁用和停止相关服务,避免业务连接到老生产 srvctl disable scan_listener srvctl disable scan srvctl disable listener -n test1 srvctl disable listener -n test2 srvctl disable vip -n test1 srvctl disable vip -n test2 停 scan监听 srvctl stop scan_listener 停 scan vip srvctl stop scan 关监听和 VIP服务 srvctl stop listener -n rac1 srvctl stop vip -n rac1 srvctl stop listener -n rac2 srvctl stop vip -n rac2 检查 ip地址,scan ip和vip是否下掉,并重启验证。
l 重建老库磁盘组 检查 db磁盘组的磁盘,并dd掉对应的磁盘头 select * from v$asm_disk; 如: dd if=/dev/zero of=/dev/asm-diskm bs=1024k count=100 重建磁盘组: create diskgroup DB external redundancy disk '/dev/asm-diskl','....','/dev/asm-diskm' attribute 'compatible.asm'='11.2.0.0.0';
l 单独启动 db监听(...过程略)
l 搭建 dg(...过程略)
案例二
客户数据库由于出现归档日志异常增长现象,导致 asm 磁盘组空间被撑满。应急处理删除部分归档,后续规划进行磁盘组扩容,计划晚上添加磁盘。
客户提供了 2 块 1T 共享盘,当晚完成了 ASM 扩容,扩容后客户反馈,业务出现了业务无法连接。排查发现实例宕了, DATA 磁盘组无法 mount 。
2.1、问题 分析
1、 ASM告警日志
问题时间出现告警, DATA 磁盘组成员盘 newdata03(DATA_0000) 异常导致磁盘
组无法挂载。磁盘头异常:报
ORA-15196
错误,提示
ASM
块头无效
,
同时伴随其
ORA
报错。

2、 磁盘权限及磁盘报错 au块检查
通过
kfed
检查磁盘权限正常。磁盘对应
au
块显示损坏

3、 系统磁盘检查
排查发现新增
DATA
磁盘组成员盘
newdata03(DATA_0000),
在系统上已经作为
rman
备份
lv
在使用。由此导致了
DATA
磁盘组的状态异常。
2.2、问题处理
检查备份,只有 2024 年 5 月 30 日的备份片。客户反馈无容灾库。尝试拉起 data 磁盘组失败。报磁盘头问题以及 au=5 blk=0 、 au=5 blk=17 损坏。
设置 events 尝试强制 mount 磁盘组,启动成功。取出归档,打算使用老的备份片加归档在其他环境恢复。 SQL> alter system set events '15195 trace name context forever, level 604'; SQL> alter system set asm_power_limit = 0;
经过仔细盘查和确认后,客户发现该库是存在 dg 备库,检查后,发现满足切换条件,进行了备库强制打开、扩容资源、更换 IP 做临时库使用,支撑院内业务。
后续将临时单机库与修复好的老生产库搭建 dg ,于 2024 年 6 月 4 日晚业务空闲时间切换,让业务重新回归老的 rac 环境。
技术原理
asm 添加盘或者踢盘时,要检查 v$asm_operation , 另外 rebanlence 过程是分三个阶段的:
1) 第一阶段: planning 阶段需要的时间是非常少的。
2) 第二阶段: extent relocation 一般会占取 rebalance 阶段的大部分时间,可以看到估值的时间 EST_MINUTES 单位为分钟, ASM 的 alert 会有显示 rebalance 。
NOTE: membership refresh pending for group 1/0x6ecaf3e6 (DATA) GMON querying group 1 at 32 for pid 19, osid 38421 SUCCESS: refreshed membership for 1/0x6ecaf3e6 (DATA) NOTE: Attempting voting file refresh on diskgroup DATA
有上面日志说明二阶段完成。
3) 第三阶段: compacting 阶段, EST_MINUTES 变成 0 ,检查日志 +ASM2_arb0_10593.trc ,通过 tail 命令查看 ARB0 的跟踪文件,发现 relocating 正在进行,而且一次只对一个条目进行 relocating 。
*** 2023-08-23 18:18:23.540 ARB0 relocating file +DATA.91169.1119274161 (1 entries)
一旦 compacting 阶段完成, ASM 的 alert 日志中会显示 stopping process ARB0 和 rebalance completed:
compact 操作是指尽可能的让 extents 磁盘外圈挪动,读取数据可以获得更快的速度
建议总结
针对添加磁盘出现的 ORA-15196 错误,目前官方文档表示没有有效快速的修复方案,所以总结下来主要有以下规避和解决方案。
添加磁盘前,检查,避免出问题
1 、检查数据库是否有备份或者容灾可用
asm 添加磁盘存在 bug 风险,尽管几率非常低,但在添加磁盘时,还是要检查备份或者容灾是否正常,防止磁盘故障,无法段时间内恢复,但是需要尽快恢复业务可用。如果允许,建议创建新的 asm 磁盘组,不要在原来的磁盘组上添加。
2 、检查需要添加的磁盘是否已经使用
asm 添加盘时要检查,待添加的共享磁盘是否已经被使用,同样添加文件系统的时候也要注意不要把 asm 的共享盘使用掉。可以通过 lsblk 查看有没有分区和挂载文件系统, grid 用户下“ kfod di=all ”去查看 asm 识别的盘。
添加磁盘时出问题
1、 切容灾,第一时间恢复业务,确保业务连续性。这个是优先选择,否则尝试下面步骤
2、 可以尝试通过设置 events 15195 来强制 mount 磁盘组,如果成功,需要尽快导出相关数据 / 文件,然后重建磁盘组或者 DB 。
3、 可以尝试通过 kfed 来修复磁盘
4、 dd 掉磁盘,重建磁盘组。
