背景:
某项目扩容加盘到磁盘组中报磁盘组空间耗尽的错误,如下
明明是加盘,却报空间不足的错误,令人费解
报错的磁盘组为normal冗余,且Usable_file_MB为负,且Free_MB剩余很少或为0
问题排查:
经查询MOS(Doc ID 1367078.1),发现asm管理的磁盘rebalance过程中也需要一些空间,每块磁盘free_mb要大于300才有可能添加成功
查询当前磁盘组的free_mb,发现盘的free_mb的大小均为0
select dg.name,dk.name,dk.header_status,dk.state,dk.mode_status,dk.failgroup,dk.os_mb,dk.total_mb,dk.free_mb,dk.path from v$asm_disk dk,v$asm_diskgroup dg where dk.GROUP_NUMBER=dg.GROUP_NUMBER and dg.name='RBDATA02' order by dk.group_number,dk.failgroup,dk.path;
问题解决:
在线move此磁盘组中的一些数据文件到其他磁盘组中,此磁盘组释放一些空间出来
alter database move datafile '+RBDATA02/RB/tab_rbinvoice_006.dbf' to '+RBARCH/RB/tab_rbinvoice_006.dbf';
等到所有磁盘的free_mb大于300MB时可以重新添加
问题总结:
asm管理的存储rebalance过程中需要所有磁盘有剩余空间,且rebalance不一定是完全平均的,如果有的磁盘剩余太小,即使整个磁盘组剩余足够的空间,add datafile等过程也可能因短板效应失败