记录一次normal diskgroup添加磁盘组操作

客户的一个磁盘组空间快满,需要添加一下磁盘,磁盘组的冗余模式为normal,本来觉得是一件不难的事情,在添加过程中还是遇到了一些问题。

本来为2个500G的磁盘组成的normal模式磁盘组,目前可用空间只剩下170G左右的空间(通过Usable_file_MB查看),本次新增两个500G磁盘,准备添加到磁盘组中

这个磁盘组有2个failgroup,一开始按照我的理解,分别在每个磁盘组的failgroup中添加一个磁盘就行了,这样可用空间Usable_file_MB应该就是增加了500GB,

但是通过我的实际操作之后发现,添加完成之后Usable_file_MB只增加到了345698MB,也就是只增加了170G左右

记录一次normal diskgroup添加磁盘组操作_第1张图片

首先搜索了一些文档,总结一下asmcmd lsdg中空间大小的含义:

FREE_MB:磁盘组中没有被使用的空间。

REQUIRED_MIRROR_FREE_MB:如果ASM磁盘或ASM磁盘组出现故障后,要重新满足冗余度的定义,要求有多少的空闲空间。

USABLE_FILE_MB:在满足冗余度之后,还有多少的剩余空间可以用。

计算公式:USABLE_FILE_MB = (FREE_MB - REQUIRED_MIRROR_FREE_MB) / 磁盘冗余度

a)  在磁盘组为Normal冗余模式下,实际剩余可用空间为FREE_MB / 冗余度,也就是FREE_MB的一半,这是因为根据Normal冗余,数据会存在一份相同的镜像,所以实际占用的空间也会多出一倍。

b) USABLE_FILE_MB可以变为负值,表示ASM并不会强制留出REQUIRED_MIRROR_FREE_MB的空间,但是这意味着如果遭遇了ASM磁盘组故障,有可能会没有足够的剩余空间来重新满足冗余度的要求。如果USABLE_FILE_MB为负数,就应该增加磁盘组的空间或者释放出一些空间来。

验证一下上面的结论,下面是我的实战操作,2个failgroup的情况下:

1.首先创建一个normal磁盘组,空间大小2G,两个failgroup,每个failgroup中一个1G的磁盘:

2.在磁盘组中创建一个表空间,大小设置为100M,创建完成之后查看空间大小

记录一次normal diskgroup添加磁盘组操作_第2张图片

3.在磁盘组中新增一个500M的文件记录一次normal diskgroup添加磁盘组操作_第3张图片

4.在磁盘组原failgroup中添加两块1G磁盘

alter diskgroup testdg add 

failgroup TESTDG_0001 disk '/dev/asm-diskg'

failgroup TESTDG_0000  disk '/dev/asm-diskh'

rebalance power 10;

添加完成之后查看磁盘组空间:

添加完成之后,实际的usable_file_mb并不是原来想象中的增加了1GB,而是只增加了500M

这是因为当前的冗余度为2,磁盘组为了保证当asm出现故障后,剩下的空间能继续保持normal冗余,需要保留Req_mir_free_MB的空间,但是这个并不是必须的,因此Usable_file_MB可以为负数,当为负数的时候说明当前的磁盘组已经不能满足normal冗余需求了。

5.测试一下,当前还能写多少数据

按照需求,应该还可以再写入1G多的数据,测试一下是否真的如此:

记录一次normal diskgroup添加磁盘组操作_第4张图片

测试发现确实还能继续写入1G多的空间,当写入的空间超过上面的800多M的时候,usable_file_mb变成了负数

记录一次normal diskgroup添加磁盘组操作_第5张图片

因此上面的结论是正确的。

你可能感兴趣的:(oracle,rac,oracle,troubleshoting,linux,运维,服务器)