暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

数据库管理-第309期 苦逼的坏块修复(20250404)

原创 胖头鱼的鱼缸 2025-04-04
378

数据库管理309期 2025-04-04

数据库管理-第309期 苦逼的坏块修复(20250404)

作者:胖头鱼的鱼缸(尹海文) Oracle ACE Pro: Database PostgreSQL ACE Partner 10年数据库行业经验 拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证 墨天轮MVP,ITPUB认证专家 圈内拥有“总监”称号,非著名社恐(社交恐怖分子) 公众号:胖头鱼的鱼缸 CSDN:胖头鱼的鱼缸(尹海文) 墨天轮:胖头鱼的鱼缸 ITPUB:yhw1809。 除授权转载并标明出处外,均为“非法”抄袭

胖头鱼的鱼缸_01.png
本周因为EMC存储中同时坏了两块盘(当然还有一些列热备和TRACK的问题),因此连续3天凌晨配合存储进行割接,在这期间看到了RAC集群的IO等待较高,EMC修复部分问题后IO等待又下去了,以为问题已经解决,但是在今天经业务侧反馈数据库有坏块报错(其实EMC操作前就有预警),正好今天又有全备,通过全备日志发现有27个数据文件报有坏块。

1 坏块

坏块,block/page corrupt,其实字面意思就是一个块出现了异常,里面数据无法使用了,需要进行修复。在使用这些块时会有以下报错:

ORA-01578: Oracle data block corrupted (file #num, block #num)

这时候会明确告诉你哪个数据文件的哪个块损坏了,这个块就需要进行修复。

2 检查数据文件

一般来说在这种情况下我会去检查这个数据文件是否还有其他坏块,可以通过dbv命令进行检查:

dbv file=/path/to/file

image.png
这里可以看到具体的坏块编号和总的坏块数量。除了使用dbv以外,在备份过程中也会对数据文件进行检查,通过备份日志也能查看到对应有坏块的数据文件。
image.png
当然也能在RMAN中使用下面命令手动对数据库所有数据文件进行检查:

rman target / RMAN> validate database;

检查完成后也会有上面类似的输出结果。

3 修复坏块

坏块的修复需要几个条件:

  • 有效可用的备份
  • ADG

当使用到坏块时会自动触发坏块修复,在有ADG的情况下会通过备库自动完成修复:
image.png
在有有效可用备份的情况下也能恢复,但是在使用NBU等三方备份设备时,可能会因为备份存储目标位置不同导致恢复失败,这种情况下则需要通过手工指定备份路径的方式进行恢复,这里不做展示了,类似命令可以通过《数据库管理-第189期 在19c上truncate了表咋办(20240513)》查看。
而在有ADG灾备库的环境中就比较方便了:

rman target / RMAN> blockrecover datafile #num block #num;

image.png
这里也可以看到是从备库进行的恢复。

4 复盘

在本次故障中,因为一些数据文件教老,不易触发自动修复,且为了避免后期使用到时对业务系统产生影响(毕竟有报错会产生),通过备份日志对所有发现坏块的数据文件进行了手动坏块修复。在修复过程中发现了一些有趣的现象:

  • 每个数据文件坏块数量都是16的倍数
  • 每一组(按16个坏块划分)都是连续编号的块出现异常,每一组之间不一定连续

这里可以简单计算一下,16*8k=48k,这里也能大概推测出EMC存储底层的单元大小了。

总结

本期复盘了一下因EMC存储异常导致的坏块问题,如何检查并修复这些坏块。
老规矩,知道写了些啥。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论