今天,一同事让帮忙看看一个问题。
主要的问题是:业务人员创建一个大小为100GB的表空间时失败,提示空间不足。但是使用asmcmd lsdg命令查看时,该diskgroup还剩余1.5TB的空间。
(1).我用让同事执行如下命令,查看该diskgroup中各个磁盘的空间使用情况:
col path for a50
set linesize 200
set pagesize 200
select group_number, MOUNT_STATUS, TOTAL_MB, FREE_MB, NAME, FAILGROUP, PATH from v$asm_disk where group_number=1 order by 1, 6, 5;
可以看出,这个diskgroup中共有177个磁盘,前面174块磁盘都是32GB大小,页后来新增的3块磁盘是500GB大小。前面32GB的盘数据分布均衡,每块盘只剩余32MB左右的空间,而后来新增的3块盘,基本上没有使用。
(2).一般情况下不会出现这种情况,因为向diskgroup中加盘时,会自动触发rebalance。为了防止因为某些原因没有做数据重组,建议手动发起rebalance操作。
SQL> alter diskgroup data rebalance power 8;
(3).手动发起rebalance操作,数据重组完成后,这3块磁盘仍然未写入任何数据。一时没想明白是什么原因,一般情况下,即使diskgroup中磁盘的大小不一致,也不会像现在这样,完全不写入数据。建议同事从diskgroup中删除这3块磁盘,然后新增32GB的盘加入该diskgroup.
(4).同事删盘时报错,如下所示:
(5).从错误日志可以看出,提示这3块磁盘是quorum disk。很奇怪 ,查看ASM的日志,看看当初加盘的日志。结果发现了如下日志:
可以看出,这3块磁盘被当作quorum disk加入了diskgroup中了,所以不允许存放任何用户数据。
(6).解决办法:
知道了原因, 处理就非常简单了。
SQL> alter diskgroup data drop quorum disk 'data_0174','data_0175','data_0176';
总结:
为什么会出现这样的问题呢? 后来得知这3块磁盘是通过asmca图形界面进行添加的。
可以看到,在图形界面,有Quorum选项,当初在向diskgroup中添加磁盘时,肯定是把这个选项也选中了。 其实非常不建议使用asmca的图形界面来管理磁盘,因为它还有另外一个大坑:那就是没办法指定failgroup,默认一个磁盘就是一个failgroup。而在一些分布式环境,需要将一个存储节点中的所有磁盘做成一个failgroup。所以,磁盘管理,还是用命令行吧。