ASM磁盘(asm_disk),故障组(failgroup),磁盘组(diskgroup)之间的关联分析

 

ASM磁盘(asm_disk),故障组(failgroup),磁盘组(diskgroup)之间的关联分析

May 12th, 2010 zhaoyu Leave a comment Go to comments


ASM有几个容易让人迷糊的概念,ASM磁盘,故障组,磁盘组, DISK就是我们的磁盘,这个磁盘一般都是做raid以后看到的磁盘,当然在windows下,也可以用perl格式化几个raw的文件来做asm disk,本文就以后者来举例.故障组(FAILGROUP),这个概念是最令人迷惑的,实际上故障组就是ASM DISK的一个逻辑组合,如果不指定哪些ASM DISK属于哪个FAILGROUP,那么可以理解每个ASM DISK都是一个FAILGROUP,磁盘组比较好理解,就是ASM DISK的组合,那么磁盘组和故障组又有什么关系呢,磁盘组有3种镜像的方式:External redundancy, Normal redundancy, High redundancy.这三种镜像的方式,就是针对故障组来说,如果有2个故障组,就是Normal方式镜像,如果有3个故障组就是High方式镜像.

现在让我们体验这3个概念:
我们可以从DBCA看到我们未划入磁盘组的磁盘,在这个之前我们需要到ASM下,设置好ASM磁盘搜索的路径:

?
1
Cocuments and Settingsoracle> set ORACLE_SID=+ASM

Cocuments and Settingsoracle>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 – Production on星期二5月27 13:58:22 2008

Copyright (c) 1982, 2007, Oracle.
All Rights Reserved.

连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

?
1
2
3
4
5
6
SQL> set linesize 120
SQL> show parameter asm_disks
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
asm_diskstring                       string                 d:asm diskDISK_file_disk*
SQL>

或者我们进入DBCA进行修改:
我们可以看到已经有3个磁盘组,我们选择新建->更改搜索路径,改成磁盘所在的路径,这时我们可以看到我们已经出现的候选磁盘



因为这里默认新建磁盘组是常规方式,所以才出现故障组这列.这个时候,我们可以在这个列上为故障组起名字,如果希望把前两个磁盘划到一个故障组,后面的划到一个故障组,就起相同的名字:

如果我们不起名字,而选择默认,那么故障组的名字和磁盘的名字将是一样,同时,会形成四个故障组.我们可以看之前,我已经创建的磁盘组,FAILGROUP名字与ASM 磁盘名字一样:

关于ASM故障组可以参考:

    http://www.dbcloud.info/?p=57

我们查看这个四个磁盘是什么状态呢:

?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
SQL> select group_number,disk_number, name ,failgroup,create_date,path from v$asm_disk;
group   disk
number number NAME                 FAILGROUP            CREATE_DATE         PATH
------ ------ -------------------- -------------------- ------------------- -------------------------------
      0      0                                                               D:ASM DISKDISK_FILE_DISK10
      0      1                                                               D:ASM DISKDISK_FILE_DISK7
      0      2                                                               D:ASM DISKDISK_FILE_DISK8
      0      3                                                               D:ASM DISKDISK_FILE_DISK9
      1      0 DISK_GROUP1_0000     DISK_GROUP1_0000     2007-09-04 22:15:18 D:ASM DISKDISK_FILE_DISK1
      1      1 DISK_GROUP1_0001     DISK_GROUP1_0001     2007-09-04 22:15:18 D:ASM DISKDISK_FILE_DISK2
      2      0 DISK_GROUP2_0000     DISK_GROUP2_0000     2007-09-04 23:00:23 D:ASM DISKDISK_FILE_DISK3
      2      1 DISK_GROUP2_0001     DISK_GROUP2_0001     2007-09-04 23:00:23 D:ASM DISKDISK_FILE_DISK4
      3      0 RMAN_GROUP_0000      RMAN_GROUP_0000      2008-05-20 14:48:25 D:ASM DISKDISK_FILE_DISK5
      3      1 RMAN_GROUP_0001      RMAN_GROUP_0001      2008-05-20 14:48:25 D:ASM DISKDISK_FILE_DISK6
已选择10行。

我们可以看到以前的磁盘的FAILGROUP和他们的磁盘一个名字,而这四个候选的磁盘还没有被划分.
如果这个我们选择磁盘组高冗余的方式,是否可以呢?

我们可以看到,由于我们把每2个磁盘划为1个故障组,这个时候,不能创建高冗余方式的磁盘组.
那么我们是否可以创建冗余的方式呢,我们可以用DBCA和命令创建

我们可以通过EM获取命令,当然也可以直接写:


我们可以看到和DBCA的效果是一样的:
这个磁盘名,就是为磁盘设备指定一个别名,我们填写完以后,选择显示SQL

确认:

?
1
2
3
4
5
6
7
SQL> CREATE DISKGROUP DISK_GROUP4 NORMAL REDUNDANCY
FAILGROUP FAILGROUP2 DISK 'D:ASM DISKDISK_FILE_DISK8' NAME DISK8 SIZE 16 M , 'D:ASM DISKDISK_FILE_DISK9' NAME DISK9 SIZE 16 M
FAILGROUP FAILGROUP1 DISK 'D:ASM DISKDISK_FILE_DISK10' NAME DISK10 SIZE 16 M , 'D:ASM DISKDISK_FILE_DISK7' NAME DISK7 SIZE 16 M ;
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15041: diskgroup space exhausted

磁盘组的空间不够大.

我又新建了4个50M的磁盘文件,重新创建磁盘组:

?
1
2
3
SQL> CREATE DISKGROUP DISK_GROUP4 NORMAL REDUNDANCY FAILGROUP FG2 DISK 'D:ASM DISKDISK_FILE_DISK13' NAME DISK13 SIZE 50 M , 'D:ASM DISKDISK_FILE_DISK14' NAME DISK14 SIZE 50 M FAILGROUP FG1 DISK 'D:ASM DISKDISK_FILE_DISK11' NAME DISK11 SIZE 50 M , 'D:ASM DISKDISK_FILE_DISK12' NAME DISK12 SIZE 50 M ;
  
磁盘组已创建。


我们可以看到两个故障组内,磁盘的数据大小一致.

?
1
2
3
ASMCMD> lsdg disk_group4
State    Type    Rebal  Unbal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Name
MOUNTED  NORMAL  N      N         512   4096  1048576       200       94               50              22              0  DISK_GROUP4/

我们看到这个磁盘组还没有存储数据,就占用了106M的空间.

?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
SQL> select group_number, name ,type,total_mb,free_mb from v$asm_diskgroup;
GROUP_NUMBER NAME              TYPE           TOTAL_MB    FREE_MB
------------ ----------------- ------------ ---------- ----------
            1 DISK_GROUP1       EXTERN             6144       4790
            2 DISK_GROUP2       EXTERN             6144       4884
            3 RMAN_GROUP        EXTERN             2046        421
            4 DISK_GROUP4       NORMAL              200         94
SQL> select group_number,disk_number, name ,failgroup,create_date,path from v$asm_disk where group_number=4;
GROUP_NUMBER DISK_NUMBER NAME              FAILGROUP CREATE_DATE         PATH
------------ ----------- ----------------- --------- ------------------- ----------------------------------------
            4           2 DISK11            FG1       2008-05-27 14:52:26 D:ASM DISKDISK_FILE_DISK11
            4           3 DISK12            FG1       2008-05-27 14:52:26 D:ASM DISKDISK_FILE_DISK12
            4           0 DISK13            FG2       2008-05-27 14:52:26 D:ASM DISKDISK_FILE_DISK13
            4           1 DISK14            FG2       2008-05-27 14:52:26 D:ASM DISKDISK_FILE_DISK14

尝试把之前的四个磁盘加进来:

因为上面的四个磁盘被格式化过,可能需要强制使用打划,就是加force参数
因为增加了新的磁盘,磁盘组需要重新平衡,加大asm_power_limit参数到3

先尝试不加force

?
01
02
03
04
05
06
07
08
09
10
11
SQL> ALTER DISKGROUP DISK_GROUP4 ADD FAILGROUP FG4 DISK 'D:ASM DISKDISK_FILE_DISK8' NAME DISK8 SIZE 16 M , 'D:ASM DISKDISK_FILE_DISK9' NAME DISK9 SIZE 16 M FAILGROUP FG3 DISK 'D:ASM DISKDISK_FILE_DISK10' NAME DISK10 SIZE 16 M , 'D:ASM DISKDISK_FILE_DISK7' NAME DISK7 SIZE 16 M REBALANCE POWER 1;
  
磁盘组已变更。
  
SQL> Select group_number,operation,state,power,actual,sofar,est_work,est_rate,est_minutes from v$asm_operation;
GROUP_NUMBER OPERATION  STATE         POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE EST_MINUTES
------------ ---------- -------- ---------- ---------- ---------- ---------- ---------- -----------
            4 REBAL      RUN               1          1          2         68         60           1
SQL>
SQL> /
未选定行

重新平衡执行完毕.

?
1
2
3
4
5
6
7
SQL> select group_number, name ,type,total_mb,free_mb from v$asm_diskgroup;
GROUP_NUMBER NAME        TYPE           TOTAL_MB    FREE_MB
------------ ----------- ------------ ---------- ----------
            1 DISK_GROUP1 EXTERN             6144       4790
            2 DISK_GROUP2 EXTERN             6144       4884
            3 RMAN_GROUP  EXTERN             2046        421
            4 DISK_GROUP4 NORMAL              264        101

这个时候,这个磁盘组有3个故障组,FG1 ,FG2 ,FG3
我们是否可以删除其中一个盘:
SQL> alter diskgroup disk_group4 drop disk disk7;
磁盘组已变更。
我们从EM发现这个ASM DISK是HUNG状态,并没有删除

?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
SQL> alter diskgroup disk_group4 undrop disks;
磁盘组已变更。
SQL> select group_number,disk_number, name ,failgroup,create_date,state from v$asm_disk where group_number=4
GROUP_NUMBER DISK_NUMBER NAME        FAILGR CREATE_DATE         STATE
------------ ----------- ----------- ------ ------------------- ----------------
            4           6 DISK10      FG3    2008-05-27 15:22:16 NORMAL
            4           7 DISK7       FG3    2008-05-27 15:22:16 NORMAL
            4           4 DISK8       FG4    2008-05-27 15:22:16 NORMAL
            4           5 DISK9       FG4    2008-05-27 15:22:16 NORMAL
            4           2 DISK11      FG1    2008-05-27 14:52:26 NORMAL
            4           3 DISK12      FG1    2008-05-27 14:52:26 NORMAL
            4           0 DISK13      FG2    2008-05-27 14:52:26 NORMAL
            4           1 DISK14      FG2    2008-05-27 14:52:26 NORMAL
已选择8行


磁盘7,10又是一样的大小

?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
SQL> alter diskgroup disk_group4 add failgroup fg3 disk 'D:ASM DISKDISK_file_disk15' name disk15
   drop disk disk7;
磁盘组已变更。
SQL> select group_number,disk_number, name ,failgroup,create_date,state from v$asm_disk where group_number=4;
GROUP_NUMBER DISK_NUMBER NAME        FAILGR CREATE_DATE         STATE
------------ ----------- ----------- ------ ------------------- ----------------
            4           6 DISK10      FG3    2008-05-27 15:22:16 NORMAL
            4           7 DISK7       FG3    2008-05-27 15:22:16 DROPPING
            4           4 DISK8       FG4    2008-05-27 15:22:16 NORMAL
            4           5 DISK9       FG4    2008-05-27 15:22:16 NORMAL
            4           2 DISK11      FG1    2008-05-27 14:52:26 NORMAL
            4           3 DISK12      FG1    2008-05-27 14:52:26 NORMAL
            4           0 DISK13      FG2    2008-05-27 14:52:26 NORMAL
            4           1 DISK14      FG2    2008-05-27 14:52:26 NORMAL
            4           8 DISK15      FG3    2008-05-27 15:45:38 NORMAL
已选择9行。
SQL> Select group_number,operation,state,power,actual,sofar,est_work,est_rate,est_minutes from v$asm_operation;
GROUP_NUMBER OPERATION  STATE         POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE EST_MINUTES
------------ ---------- -------- ---------- ---------- ---------- ---------- ---------- -----------
            4 REBAL      RUN               1          1          1         47         60           0
SQL>
SQL> select group_number,disk_number, name ,failgroup,create_date,state from v$asm_disk where group_number=4;
GROUP_NUMBER DISK_NUMBER NAME        FAILGR CREATE_DATE         STATE
------------ ----------- ----------- ------ ------------------- ----------------
            4           6 DISK10      FG3    2008-05-27 15:22:16 NORMAL
            4           4 DISK8       FG4    2008-05-27 15:22:16 NORMAL
            4           5 DISK9       FG4    2008-05-27 15:22:16 NORMAL
            4           2 DISK11      FG1    2008-05-27 14:52:26 NORMAL
            4           3 DISK12      FG1    2008-05-27 14:52:26 NORMAL
            4           0 DISK13      FG2    2008-05-27 14:52:26 NORMAL
            4           1 DISK14      FG2    2008-05-27 14:52:26 NORMAL
            4           8 DISK15      FG3    2008-05-27 15:45:38 NORMAL
已选择8行。

这个时候,我们发现DISK7已经被删除,DISK15被加上,因为我们指定两个磁盘做为FAILGROUP,而且是NORMAL方式,至少要2个磁盘,所以我们删除单1磁盘会失败.

你可能感兴趣的:(sql,Date,File,application,disk,磁盘)