某项目有4个存储节点,每个asm磁盘组有4个failgroup,做容错测试时发现将一个存储节点的target服务停掉(或者将存储节点1down机),某些磁盘组显示的offline磁盘数为0(应该显示3)
grid的gmon进程每300s会检测asm盘组的mount状态,但不会检测到failgroup层面,所以只有当磁盘组发生读写数据文件时,才会检测到fg中的磁盘不可写,并offline
经测试,此问题出现的场景需要满足:
(1)asm磁盘组的FG为偶数个(4个)
将磁盘组的一个FG删除,上述场景不会复现,一个存储节点异常,磁盘组显示的offline磁盘数正常---只要显示正常,gmon将磁盘组的磁盘标记为missing,磁盘读写就正常
(2)asm磁盘组中没有数据文件
若磁盘组中存在数据文件(注意:必须是数据文件,归档日志不可以,ocr备份文件也不行),磁盘组读写正常,但有可能显示的offline磁盘数有问题,但无影响
SQL> select file_name from dba_data_files order by file_name ;
FILE_NAME
--------------------------------------------------------------------------------
+MGMT/test2.dbf
+RBARCH/test4.dbf
+RBDATA01/RB/idx_pcb_001.dbf
+RBDATA01/RB/idx_rb_001.dbf
+RBDATA01/RB/tab_rb_002.dbf
+RBDATA02/test1.dbf
+RBDATA03/test3.dbf
+SETTARCH/test5.dbf
+SYS/RB/DATAFILE/sysaux.261.1045927085
+SYS/RB/DATAFILE/sysaux01.dbf
+SYS/RB/DATAFILE/system.260.1045927085
+SYS/RB/DATAFILE/system01.dbf
+SYS/RB/DATAFILE/undotbs1.262.1045927087
+SYS/RB/DATAFILE/undotbs1_001.dbf
+SYS/RB/DATAFILE/undotbs2.264.1045927091
+SYS/RB/DATAFILE/users.265.1045927091
+SYS/RB/DATAFILE/users01.dbf
磁盘组有10个,其中除了CRS01有3个FG(offline显示正常),其他都有4个FG,其他9个只有+TEST中无数据文件
[grid@pr-rb-odb21 ~]$ asmcmd
ASMCMD> cd +TEST
ASMCMD> ls
+MGMT和RBDATA03里都已存在数据文件,且+MGMT、RBDATA03和+TEST都显示offline_disks为0,
测试读写:
发现+TEST磁盘组报错,无法新建数据文件;虽然上面+MGMT和RBDATA03都显示offline_disks为0,但可以正常创建数据文件,且之后会自动识别到offline disk
综上所述,解决此问题又两种方式:
(1)避免偶数个failgroup
(2)每个偶数个FG的磁盘组中建一个数据文件