ASM normal冗余方式与失败组损坏(失效)测试
下面是分6个场景,使用不同数量失败组,磁盘数。通过dd方式人为损坏asm头部,主要测试asm磁盘组在受损失效后,是否还可以mount,以及数据有效性。
测试环境:Oracle 11.2.0.4 RAC
场景1:2个失败组,每个失败组fg一个磁盘 dd一个失败组其中一个磁盘,看asm磁盘组是否可以mount
磁盘组准备
create diskgroup test normal redundancy
failgroup fg1 disk '/dev/asm_1g_1' size 1g
failgroup fg2 disk '/dev/asm_1g_2' size 1g
ATTRIBUTE 'au_size'='4M';
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
2、建立表空间、创建验证用测试表
create tablespace test datafile '+test' size 100m;
create table test(id number) tablespace test;
insert into test values(1);
commit;
select * from test;
3、dd 第一个失败组中的第1个磁盘
dd if=/dev/zero of=/dev/asm_1g_1 bs=1024 count=1 失败组 fg1
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 FAILGROUP 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、重新挂载test磁盘组
alter diskgroup test dismount force; -->强制卸载asm磁盘组
SQL> alter system flush buffer_cache; -->清buffer
ora.orcl.db
1 ONLINE OFFLINE 数据库已宕机 Instance Shutdown
2 ONLINE OFFLINE Instance Shutdown
alter diskgroup test mount force; -->重新mount
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG2 /dev/asm_1g_2 REGULAR
4 0 MISSING UNKNOWN OFFLINE NORMAL TEST_0000 FG1 REGULAR
可以强制mount,现在有效的失败组只有1个fg2
5、再次验证数据是否有效
SQL> select * from test;
ID
----------
1
ASMCMD> pwd
+test/orcl/datafile
ASMCMD> ls
TEST.256.1012053799
结果:2个失败组(每个失败组包含1个asm盘),dd 1个失败组 1个asm磁盘,asm磁盘组受损后可以重新强制mount,并且数据验证无误,数据文件还在
场景2:2个失败组,每个fg二个磁盘 dd一个失败组其中二个磁盘,看数据是否还在
磁盘组准备
create diskgroup test normal redundancy
failgroup fg1 disk '/dev/asm_1g_1' size 1g
failgroup fg1 disk '/dev/asm_1g_2' size 1g
failgroup fg2 disk '/dev/asm_1g_3' size 1g
failgroup fg2 disk '/dev/asm_1g_4' size 1g
ATTRIBUTE 'au_size'='4M';
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
2、建立表空间、创建验证用测试表
create tablespace test datafile '+test' size 100m;
create table test(id number) tablespace test;
insert into test values(1);
commit;
select * from test;
3、dd 第1个失败组中的所有磁盘
dd if=/dev/zero of=/dev/asm_1g_1 bs=1024 count=1 失败组fg1
dd if=/dev/zero of=/dev/asm_1g_2 bs=1024 count=1 失败组fg1
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED CANDIDATE ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED CANDIDATE ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
失败组fg1已受损
4、重新挂载test磁盘组
alter diskgroup test dismount force; --强制卸载asm磁盘组
SQL> alter system flush buffer_cache; ---清buffer
oracle实例已宕机
ora.orcl.db
1 ONLINE OFFLINE Instance Shutdown
2 ONLINE OFFLINE Instance Shutdown
alter diskgroup test mount force; ---重新强制mount
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 0 MISSING UNKNOWN OFFLINE NORMAL TEST_0000 FG1 REGULAR
4 1 MISSING UNKNOWN OFFLINE NORMAL TEST_0001 FG1 REGULAR
强制mount后,只有失败组FG2存活了
5、再次验证数据是否有效
SQL> select * from test;
ID
----------
1
SQL> !asmcmd
ASMCMD> ls test/orcl/datafile
TEST.256.1012055033
结果:2个失败组(每个失败组包含两个asm盘),dd 1个失败组 所有asm磁盘,数据验证无误,数据文件还在,asm磁盘组可以强制mount
场景3:3个失败组,每个fg二个磁盘 dd一个失败组其中所有磁盘,看数据是否还在
磁盘组准备
create diskgroup test normal redundancy
failgroup fg1 disk '/dev/asm_1g_1' size 1g
failgroup fg1 disk '/dev/asm_1g_2' size 1g
failgroup fg2 disk '/dev/asm_1g_3' size 1g
failgroup fg2 disk '/dev/asm_1g_4' size 1g
failgroup fg3 disk '/dev/asm_1g_5' size 1g
failgroup fg3 disk '/dev/asm_1g_6' size 1g
ATTRIBUTE 'au_size'='4M';
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
2、建立表空间、创建验证用测试表
create tablespace test datafile '+test' size 100m;
create table test(id number) tablespace test;
insert into test values(1);
commit;
select * from test;
3、dd 1个失败组中的所有磁盘
dd if=/dev/zero of=/dev/asm_1g_3 bs=1024 count=1 失败组fg2
dd if=/dev/zero of=/dev/asm_1g_4 bs=1024 count=1 失败组fg2
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED CANDIDATE ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED CANDIDATE ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
6 rows selected.
4、重新挂载test磁盘组
alter diskgroup test dismount force;
SQL> alter system flush buffer_cache;
ora.orcl.db
1 ONLINE OFFLINE Instance Shutdown
2 ONLINE OFFLINE Instance Shutdown
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 where name like 'TEST%' order by path;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU MODE_ST STATE NAME FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
4 2 MISSING UNKNOWN OFFLINE NORMAL TEST_0002 FG2 REGULAR
4 3 MISSING UNKNOWN OFFLINE NORMAL TEST_0003 FG2 REGULAR
6 rows selected.
5、再次验证数据是否有效
SQL> select * from test;
ID
----------
1
SQL> !asmcmd
ASMCMD> ls test/orcl/datafile
TEST.256.1012055033
结果:3个失败组(每个失败组包含两个asm盘),dd 1个失败组 所有asm磁盘,数据验证无误,数据文件还在,asm磁盘组可以强制mount
场景4:3个失败组,每个fg二个磁盘 dd二个失败组其中各一个磁盘,看数据是否还在
磁盘组准备
create diskgroup test normal redundancy
failgroup fg1 disk '/dev/asm_1g_1' size 1g
failgroup fg1 disk '/dev/asm_1g_2' size 1g
failgroup fg2 disk '/dev/asm_1g_3' size 1g
failgroup fg2 disk '/dev/asm_1g_4' size 1g
failgroup fg3 disk '/dev/asm_1g_5' size 1g
failgroup fg3 disk '/dev/asm_1g_6' size 1g
ATTRIBUTE 'au_size'='4M';
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
2、建立表空间、创建验证用测试表
create tablespace test datafile '+test' size 100m;
create table test(id number) tablespace test;
insert into test values(1);
commit;
select * from test;
3、dd 2个失败组中的各一个磁盘
dd if=/dev/zero of=/dev/asm_1g_1 bs=1024 count=1 失败组fg1
dd if=/dev/zero of=/dev/asm_1g_3 bs=1024 count=1 失败组fg2
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED CANDIDATE ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED CANDIDATE ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
6 rows selected.
4、重新挂载test磁盘组
alter diskgroup test dismount force;
SQL> alter system flush buffer_cache;
ora.orcl.db
1 ONLINE OFFLINE Instance Shutdown
2 ONLINE OFFLINE Instance Shutdown
alter diskgroup test mount force;
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "TEST" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "TEST"
结果:3个失败组(每个失败组包含两个asm盘),dd 2个失败组 各一个asm磁盘,asm磁盘组无法mount
场景5:4个失败组,每个fg二个磁盘 dd二个失败组其中各一个磁盘,看数据是否还在
磁盘组准备
create diskgroup test normal redundancy
failgroup fg1 disk '/dev/asm_1g_1' size 1g
failgroup fg1 disk '/dev/asm_1g_2' size 1g
failgroup fg2 disk '/dev/asm_1g_3' size 1g
failgroup fg2 disk '/dev/asm_1g_4' size 1g
failgroup fg3 disk '/dev/asm_1g_5' size 1g
failgroup fg3 disk '/dev/asm_1g_6' size 1g
failgroup fg4 disk '/dev/asm_1g_7' size 1g
failgroup fg4 disk '/dev/asm_1g_8' size 1g
ATTRIBUTE 'au_size'='4M';
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
4 6 CACHED MEMBER ONLINE NORMAL TEST_0006 FG4 /dev/asm_1g_7 REGULAR
4 7 CACHED MEMBER ONLINE NORMAL TEST_0007 FG4 /dev/asm_1g_8 REGULAR
8 rows selected.
2、建立表空间、创建验证用测试表
create tablespace test datafile '+test' size 100m;
create table test(id number) tablespace test;
insert into test values(1);
commit;
select * from test;
3、dd 1个失败组中的一个磁盘
dd if=/dev/zero of=/dev/asm_1g_1 bs=1024 count=1 失败组fg1
dd if=/dev/zero of=/dev/asm_1g_3 bs=1024 count=1 失败组fg2
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED CANDIDATE ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED CANDIDATE ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
4 6 CACHED MEMBER ONLINE NORMAL TEST_0006 FG4 /dev/asm_1g_7 REGULAR
4 7 CACHED MEMBER ONLINE NORMAL TEST_0007 FG4 /dev/asm_1g_8 REGULAR
8 rows selected.
4、重新挂载test磁盘组
alter diskgroup test dismount force;
SQL> alter system flush buffer_cache;
ora.orcl.db
1 ONLINE OFFLINE Instance Shutdown
2 ONLINE OFFLINE Instance Shutdown
alter diskgroup test mount force;
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "TEST" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "TEST"
结论:4个失败组(每个失败组包含两个asm盘),dd 2个失败组 其中各1个asm磁盘,asm磁盘组无法mount
场景6:3个失败组,每个fg二个磁盘,在不同时间点,依次dd第一个失败组、第二个失败组,看数据是否还在
磁盘组准备
create diskgroup test normal redundancy
failgroup fg1 disk '/dev/asm_1g_1' size 1g
failgroup fg1 disk '/dev/asm_1g_2' size 1g
failgroup fg2 disk '/dev/asm_1g_3' size 1g
failgroup fg2 disk '/dev/asm_1g_4' size 1g
failgroup fg3 disk '/dev/asm_1g_5' size 1g
failgroup fg3 disk '/dev/asm_1g_6' size 1g
ATTRIBUTE 'au_size'='4M';
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 FAILGROUP PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ---------- -------------------- -------
4 0 CACHED MEMBER ONLINE NORMAL TEST_0000 FG1 /dev/asm_1g_1 REGULAR
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
2、建立表空间、创建验证用测试表
create tablespace test datafile '+test' size 100m;
create table test(id number) tablespace test;
insert into test values(1);
commit;
select * from test;
3、第一次dd 第1个失败组中的一个磁盘
dd if=/dev/zero of=/dev/asm_1g_1 bs=1024 count=1 失败组fg1
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 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
6 rows selected.
4、重新挂载test磁盘组
alter diskgroup test dismount force;
SQL> alter system flush buffer_cache;
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 where name like 'TEST%' order by path;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU MODE_ST STATE NAME FAILG PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ----- -------------------- -------
4 1 CACHED MEMBER ONLINE NORMAL TEST_0001 FG1 /dev/asm_1g_2 REGULAR
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
4 0 MISSING UNKNOWN OFFLINE NORMAL TEST_0000 FG1 REGULAR
6 rows selected.
强制mount磁盘组成功,此时fg1失败组还在
5、先验证下测试表数据完整性
SQL> select * from test;
ID
----------
1
6、第二次dd,第一个失败组第二个asm盘
dd if=/dev/zero of=/dev/asm_1g_2 bs=1024 count=1 失败组fg1
7、强制dismount
alter diskgroup test dismount force;
8、再重新强制mount
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 where name like 'TEST%' order by path;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU MODE_ST STATE NAME FAILG PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ----- -------------------- -------
4 2 CACHED MEMBER ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED MEMBER ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
现在只存在两个失败组fg2、fg3
SQL> select * from test;
ID
----------
1
9、第三次dd,第二个失败组所有asm盘
dd if=/dev/zero of=/dev/asm_1g_3 bs=1024 count=1 失败组fg2
dd if=/dev/zero of=/dev/asm_1g_4 bs=1024 count=1 失败组fg2
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 2 CACHED CANDIDATE ONLINE NORMAL TEST_0002 FG2 /dev/asm_1g_3 REGULAR
4 3 CACHED CANDIDATE ONLINE NORMAL TEST_0003 FG2 /dev/asm_1g_4 REGULAR
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
10、强制dismount
alter diskgroup test dismount force;
11、再重新强制mount
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 where name like 'TEST%' order by path;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU MODE_ST STATE NAME FAILG PATH FAILGRO
------------ ----------- ------- ------------ ------- -------- -------------------- ----- -------------------- -------
4 4 CACHED MEMBER ONLINE NORMAL TEST_0004 FG3 /dev/asm_1g_5 REGULAR
4 5 CACHED MEMBER ONLINE NORMAL TEST_0005 FG3 /dev/asm_1g_6 REGULAR
4 2 MISSING UNKNOWN OFFLINE NORMAL TEST_0002 FG2 REGULAR
4 3 MISSING UNKNOWN OFFLINE NORMAL TEST_0003 FG2 REGULAR
发现fg2失败组已联线,此时存活的失败组只有fg3
12、最后再验证数据
SQL> select * from test;
ID
----------
1
SQL> select name,state,total_mb/1024 total_gb,free_mb,required_mirror_free_mb,usable_file_mb from v$asm_diskgroup where name='TEST';
NAME STATE TOTAL_GB FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
---------- ----------- ---------- ---------- ----------------------- --------------
TEST MOUNTED 6 5804 2048 1828
总结:
1、使用normal冗余的asm磁盘组受损后,能否重新mount起来,与失败组有直接联系。在同一时间最多只能容忍1个失败组失效。
同一时间,超过1个失败组失效(例如失败组有N个磁盘,只要1个盘故障,这个失败组就算失效,与失败组内asm盘受损数量无关),那么对应的asm磁盘组就无法mount(即使force mount)。
2、asm磁盘组如果有N个失败组,如N>2,那么可以允许在不同时间点,分别挂掉N-1个失败组。例如在第六个场景下test磁盘组包含三个失败组fg1、fg2、fg3,可以依次挂掉fg1、fg2,最后只剩下fg3,asm镜像数据还在,数据还得以完整。
3、此次6个场景,建的表空间都是小数据文件,USABLE_FILE_MB
参数始终有足够空间。
在下一个章节,我专门做了一个测试
ASM normal冗余USABLE_FILE_MB为负值后,失败组损坏之后是否还能mount
,
附链接:https://blog.youkuaiyun.com/kiral07/article/details/94010971