ASM normal冗余方式与失败组损坏(失效)测试

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.csdn.net/kiral07/article/details/94010971

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值