近期合法买球平台接到某客户的服务请求,称Oracle数据库不能正常为表空间创建数据文件,有可能影响正常业务。合法买球平台工程师及时响应,很快就解决了本次故障,现将处理过程分享给大家。
一、事件背景
操作系统:AIX
数据库版本:11.2.0.3 RAC
客服中心接到客户服务请求,一套用于记录重要信息的RAC环境的Oracle数据库,在为表空间创建数据文件时,时有报错,报错信息为“空间不足,无法创建数据文件”,但磁盘组剩余空间仍有1个TB,如下图:
二、事件分析
工程师迅速响应,在赶往故障现场途中,根据客户提供情况作了初步推断:数据分布不均,可能是造成数据库空间报错的原因。
到达现场查询后,发现故障磁盘组为NORMAL模式,使用了两个存储。其中包含80GB和160GB两种大小的磁盘,部分80G的磁盘剩余空间仅100M左右。
这就是报错的原因:在NORMAL磁盘组中使用不一样大小的磁盘会导致条带化出问题,数据无法均匀分布在每个磁盘上,部分磁盘空间耗尽。所以在创建数据文件时报出空间不足;而且160GB的磁盘最多也只能用到80GB,导致磁盘组虽然剩余空间很多,但都无法使用,造成空间大量浪费。
查询变更记录发现,1个月前这个磁盘组做了磁盘扩容的变更,分别从2个存储增加了8块160GB的磁盘。
下图为现场检查部分磁盘使用情况:
三、变更申请
工程师找到故障症结后,继续从两个存储上各MAP16块80G的磁盘给该磁盘组使用,然后利用ASM在线添加、删除磁盘的特性,一次性将80G的新盘加入并将160G的磁盘移除,最后重平衡数据。
客户白天业务时段为8:00-18:00;数据库做批量数据导入的时间段通常为23:00- 6:00;ASM在线数据重平衡的速度取决于业务量的大小,18:00-23:00之间虽然也有业务,但业务量最小。
为了顺利解决故障,保障客户业务连续性,制定了如下变更操作计划:
1、变更时间:18:00-23:00;
2、变更流程:
a.存储工程师进行划盘操作,先从1个存储MAP16块80G的盘到两个RAC节点,并提供新磁盘的WWID;
b.系统工程师扫描新盘并确认磁盘WWID和hdisk编号;
c.存储工程师继续从另一个存储MAP16块80G的盘到2个RAC节点,并提供新磁盘的WWID;
d.系统工程师继续认盘工作,扫描新盘并确认磁盘WWID和hdisk编号;
e.系统工程师确认32块新盘,将reserve_policy设置成no_reserve。修改磁盘属主为grid:asmadmin,权限为660;
f.数据库工程师进行数据库加盘、删盘、重平衡操作。
四、变更实施
操作步骤如下(磁盘共32块,):
1、 存储1MAP盘后扫描磁盘(存储1使用HBA卡fcs0、2、4、6),
cfgmgr -l fcs0
cfgmgr -l fcs2
cfgmgr -l fcs4
cfgmgr -l fcs6
2、 确认存储1磁盘路径(共16块)
lspath -l hdiskxxx
结果应该为:
Enabled hdiskxxx fscsi0
Enabled hdiskxxx fscsi2
Enabled hdiskxxx fscsi4
Enabled hdiskxxx fscsi6
3、 存储2MAP磁盘后扫描磁盘(存储2HBA卡为fcs1、3、5、7):
cfgmgr -l fcs1
cfgmgr -l fcs3
cfgmgr -l fcs5
cfgmgr -l fcs7
4、确认存储2磁盘路径(共16块)
lspath -l hdiskxxx
结果应该为:
Enabled hdiskxxx fscsi1
Enabled hdiskxxx fscsi3
Enabled hdiskxxx fscsi5
Enabled hdiskxxx fscsi7
5、将新盘的reserve_policy设置成no_reserve()
设置:chdev-l hdiskxxx-areserve_policy=no_reserve
检查:lsattr-E-l hdiskxxx | grep reserve_policy
6、检查磁盘WWID是否与存储工程师给出的一致:
lsattr -El hdiskxxx|grep unique_id
7、检查磁盘大小是否为80GB
bootinfo -s hdiskxxx
结果应为:81920
8、修改属主、属组及权限:
chown grid:asmadmin /dev/rhdiskxxx
chmod 660 /dev/rhdiskxxx
9、 数据库ASM实例检查磁盘状态:
SQL> select a.group_number,
a.name as group_name,
b.path,
b.header_status
from v$asm_diskgroup a,
v$asm_disk b
where a.group_number=b.group_number
and a.group_number=0
order by 3;
部分磁盘信息如下:
header_status为CANDIDATE表示为从来没有被使用过的候选盘,GROUP_NUMBER为0表示磁盘没有分配给任何磁盘组。
10、磁盘组增加新盘、移除旧盘、重平衡:
SQL>alter diskgroup KHDGDATA4 add failgroup FG_KHDGDATA41
disk '/dev/rhdisk254',
'/dev/rhdisk255',
'/dev/rhdisk256',
'/dev/rhdisk257',
'/dev/rhdisk258',
'/dev/rhdisk259',
'/dev/rhdisk260',
'/dev/rhdisk261',
'/dev/rhdisk262',
'/dev/rhdisk263',
'/dev/rhdisk264',
'/dev/rhdisk265',
'/dev/rhdisk266',
'/dev/rhdisk267',
'/dev/rhdisk268',
'/dev/rhdisk269'
failgroup FG_KHDGDATA42
disk '/dev/rhdisk270',
'/dev/rhdisk271',
'/dev/rhdisk272',
'/dev/rhdisk273',
'/dev/rhdisk274',
'/dev/rhdisk275',
'/dev/rhdisk276',
'/dev/rhdisk277',
'/dev/rhdisk278',
'/dev/rhdisk279',
'/dev/rhdisk280',
'/dev/rhdisk281',
'/dev/rhdisk282',
'/dev/rhdisk283',
'/dev/rhdisk284',
'/dev/rhdisk285'
drop disk
KHDGDATA4_0028,
KHDGDATA4_0029,
KHDGDATA4_0030,
KHDGDATA4_0031,
KHDGDATA4_0032,
KHDGDATA4_0033,
KHDGDATA4_0034,
KHDGDATA4_0035,
KHDGDATA4_0056,
KHDGDATA4_0057,
KHDGDATA4_0058,
KHDGDATA4_0059,
KHDGDATA4_0060,
KHDGDATA4_0061,
KHDGDATA4_0062,
KHDGDATA4_0063
rebalance power 7;
11、观察重平衡:
为了降低对业务的影响,重平衡的POWER不能太高,这里只使用了POWER 7,如下图所示,重平衡大约需要5个小时,
SQL> selectgroup_number,power,est_minutes from v$asm_operation;
12、 可以看到重平衡结束后磁盘数据分布均衡:
五、经验总结
1、对于ASM磁盘组中的磁盘(特别是NORMAL类型的磁盘组)应该尽量保证其大小一致;大小不一致的磁盘会导致空间浪费和条带化失效,数据就会不均匀分配,不但影响性能,还可能会导致这种无法创建数据文件的情况。
2、任何变更操作在执行前都应该进行论证变更是否合理、操作步骤是否正确、对业务的影响是否降到最低,有条件的都应在测试环境先进行验证。
如欲了解更多,请登录合法买球平台官方网站:wh.uupt.net