ASM normal冗余,损坏一个失败组,是否可以通过增加新失败组修复
1、创建3个失败组,每个失败组1个磁盘,大小1g
create diskgroup test normal redundancy
failgroup fg1 disk '/dev/asm_1g_1' size 1g
failgroup fg2 disk '/dev/asm_1g_2' size 1g
failgroup fg3 disk '/dev/asm_1g_3' size 1g
ATTRIBUTE 'au_size'='4M';
SQL> select GROUP_NUMBER,DISK_NUMBER,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,NAME,FAILGROUP,PATH,FAILGROUP_TYPE from v$asm_disk where name like 'TEST%' order by path;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU MODE_ST STATE NAME FAILG PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ----- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG2 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG3 /dev/asm_1g_3 REGULAR
2、创建表空间,数据文件撑满asm磁盘组
create tablespace test datafile '+test' size 1400m;
create table test(id number) tablespace test;
insert into test values(1);
commit;
select * from test;
3、dd其中一个失败组磁盘
dd if=/dev/zero of=/dev/asm_1g_1 bs=1024 count=1
SQL> select GROUP_NUMBER,DISK_NUMBER,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,NAME,FAILGROUP,PATH,FAILGROUP_TYPE from v$asm_disk where name like 'TEST%' order by path;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU MODE_ST STATE NAME FAILG PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- ---------- ----- -------------------- -------
4 0 CACHED CANDIDATE ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG2 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG3 /dev/asm_1g_3 REGULAR
4、手动卸载asm磁盘组
SQL> alter diskgroup test dismount force;
5、清除buffer
SQL> alter system flush buffer_cache;
System altered.
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 35670
Session ID: 1 Serial number: 5
数据库已宕机
6、尝试mount
SQL> alter diskgroup test mount;
alter diskgroup test mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15040: diskgroup is incomplete
ORA-15042: ASM disk "0" is missing from group number "4"
7、尝试增加失败组fg1
SQL> alter diskgroup test add failgroup fg1 disk '/dev/asm_1g_1' size 1g;
alter diskgroup test add failgroup fg1 disk '/dev/asm_1g_1' size 1g
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15001: diskgroup "TEST" does not exist or is not mounted
发现asm磁盘组没有mount,就无法增加失败组
8、force挂载asm磁盘组
alter diskgroup test mount force;
SQL> select GROUP_NUMBER,DISK_NUMBER,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,NAME,FAILGROUP,PATH,FAILGROUP_TYPE from v$asm_disk order by path;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU MODE_ST STATE NAME FAILG PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ----- -------------------- -------
0 8 CLOSED CANDIDATE ONLINE NORMAL /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG2 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG3 /dev/asm_1g_3 REGULAR
4 0 MISSING UNKNOWN OFFLINE NORMAL TEST_0000 FG1 REGULAR
强制挂载之后,受损fg1失败组已经离线
9、重新增加失败组fg1
SQL> alter diskgroup test add failgroup fg1 disk '/dev/asm_1g_1' size 1g;
SQL> select GROUP_NUMBER,DISK_NUMBER,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,NAME,FAILGROUP,PATH,FAILGROUP_TYPE from v$asm_disk order by path;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU MODE_ST STATE NAME FAILG PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ----- -------------------- -------
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG2 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG3 /dev/asm_1g_3 REGULAR
重新增加失败组fg1成功,又重新恢复成3个失败组
注意一个细节,可以发现原本失败组fg1 /dev/asm_1g_1 对应的名字为TEST_0000,现在变为了TEST_0003
总结:
只要asm磁盘组还能mount force,可以通过增加失败组的方式恢复原冗余结构(失败组名称可以与之前失效失败组名称相同)。