ASM的FAILGROUP

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE 以前一直以为NORMAL REDUNDANCY的话,FAILGROUP就是2HIGH REDUNDANCY的话,FAILGROUP就是3

其实这是错误的,FAILGROUP是用于将磁盘分组,以保证丢失任何一组FAILGROUP磁盘,数据还是完整的

多用于多阵列,通过ASM来完成冗余的环境。(EXTERNAL只能有一个FAILGROUP

 

假设有4个阵列,每个阵列3块盘,使用NORMAL REDUNDANCY创建DISKGROUP4FAILGROUP

CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY

 FAILGROUP controller1 DISK

 'ORCL:ASM01', 'ORCL:ASM02', 'ORCL:ASM03'

 FAILGROUP controller2 DISK

 'ORCL:ASM04', 'ORCL:ASM05', 'ORCL:ASM06'

 FAILGROUP controller3 DISK

 'ORCL:ASM07', 'ORCL:ASM08', 'ORCL:ASM09'

 FAILGROUP controller4 DISK

 'ORCL:ASM10', 'ORCL:ASM11', 'ORCL:ASM12';

 

然后在上面创建一个1G的数据文件

CREATE TABLESPACE asmtest DATAFILE '+DGROUP1' SIZE 1024M

 

然后看看数据的冗余程度

SQL> SELECT COUNT(DISTINCT PXN_KFFXP),COUNT(DISTINCT XNUM_KFFXP)

  2    FROM X$KFFXP

  3   WHERE GROUP_KFFXP = 3

  4      AND NUMBER_KFFXP =256

  5      AND xnum_kffxp <> 2147483648;

 

COUNT(DISTINCTPXN_KFFXP) COUNT(DISTINCTXNUM_KFFXP)

------------------------ -------------------------

                    2050                      1025

--数据文件为1024M,加上一个BLOCK0,一共1025M2个冗余

 

SQL> SELECT COUNT(DISTINCT PXN_KFFXP),COUNT(DISTINCT XNUM_KFFXP)

  2    FROM X$KFFXP

  3   WHERE GROUP_KFFXP = 3

  4      AND NUMBER_KFFXP =256

  5      AND xnum_kffxp = 2147483648;

 

COUNT(DISTINCTPXN_KFFXP) COUNT(DISTINCTXNUM_KFFXP)

------------------------ -------------------------

                       3                         1

--记录块分配的元数据冗余3份,其他元数据也是冗余3

 

假设出现某个failgroup损坏

SQL> SELECT COUNT (DISTINCT xnum_kffxp)

  2    FROM X$KFFXP a,v$asm_disk b

  3   WHERE GROUP_KFFXP = 3

  4     AND b.group_number=3

  5     AND NUMBER_KFFXP =256

  6     AND a.disk_kffxp = disk_number

  7     AND b.failgroup <> 'CONTROLLER&i'

  8  ;

Enter value for i: 1

old   7:    AND b.failgroup <> 'CONTROLLER&i'

new   7:    AND b.failgroup <> 'CONTROLLER1'

 

COUNT(DISTINCTXNUM_KFFXP)

-------------------------

                     1026

 

SQL> /

Enter value for i: 2

old   7:    AND b.failgroup <> 'CONTROLLER&i'

new   7:    AND b.failgroup <> 'CONTROLLER2'

 

COUNT(DISTINCTXNUM_KFFXP)

-------------------------

                     1026

 

SQL> /

Enter value for i: 3

old   7:    AND b.failgroup <> 'CONTROLLER&i'

new   7:    AND b.failgroup <> 'CONTROLLER3'

 

COUNT(DISTINCTXNUM_KFFXP)

-------------------------

                     1026

 

SQL> /

Enter value for i: 4

old   7:    AND b.failgroup <> 'CONTROLLER&i'

new   7:    AND b.failgroup <> 'CONTROLLER4'

 

COUNT(DISTINCTXNUM_KFFXP)

-------------------------

                     1026

 

其相关的1026AU都是可访问的

 

在看看元数据,元数据每个冗余3份,任何一个FAILGROUP损坏,都能保证数据是完整的

SQL> SELECT NUMBER_KFFXP, XNUM_KFFXP, COUNT(*)

  2    FROM X$KFFXP

  3   WHERE GROUP_KFFXP = 3

  4     AND NUMBER_KFFXP < 100

  5   GROUP BY NUMBER_KFFXP, XNUM_KFFXP

  6   ORDER BY 1, 2;

 

NUMBER_KFFXP XNUM_KFFXP   COUNT(*)

------------ ---------- ----------

           1          0          3

           1          1          3

           2          0          3

           3          0          3

           3          1          3

           3          2          3

           3          3          3

           3          4          3

           3          5          3

           3          6          3

           3          7          3

           3          8          3

           3          9          3

           3         10          3

           3         11          3

           3         12          3

           3         13          3

           3         14          3

           3         15          3

           3         16          3

           3         17          3

           3         18          3

           3         19          3

           3         20          3

           3         21          3

           3         22          3

           3         23          3

           3         24          3

           3         25          3

           3         26          3

           3         27          3

           3         28          3

           3         29          3

           3         30          3

           3         31          3

           3         32          3

           3         33          3

           3         34          3

           3         35          3

           3         36          3

           3         37          3

           3         38          3

           3         39          3

           3         40          3

           3         41          3

           3 2147483648          3

           4          0          3

           4          1          3

           5          0          3

           6          0          3

 

50 rows selected.

 

SQL> SELECT COUNT(*)

  2    FROM (SELECT DISTINCT NUMBER_KFFXP, XNUM_KFFXP

  3    FROM X$KFFXP A, V$ASM_DISK B

  4   WHERE GROUP_KFFXP = 3

  5     AND B.GROUP_NUMBER = 3

  6     AND NUMBER_KFFXP < 100

  7     AND A.DISK_KFFXP = DISK_NUMBER

  8     AND B.FAILGROUP <> 'CONTROLLER&i') ;

Enter value for i: 1

old   8:    AND B.FAILGROUP <> 'CONTROLLER&i')

new   8:    AND B.FAILGROUP <> 'CONTROLLER1')

 

  COUNT(*)

----------

        50

 

SQL> /

Enter value for i: 2

old   8:    AND B.FAILGROUP <> 'CONTROLLER&i')

new   8:    AND B.FAILGROUP <> 'CONTROLLER2')

 

  COUNT(*)

----------

        50

 

SQL> /

Enter value for i: 3

old   8:    AND B.FAILGROUP <> 'CONTROLLER&i')

new   8:    AND B.FAILGROUP <> 'CONTROLLER3')

 

  COUNT(*)

----------

        50

 

SQL> /

Enter value for i: 4

old   8:    AND B.FAILGROUP <> 'CONTROLLER&i')

new   8:    AND B.FAILGROUP <> 'CONTROLLER4')

 

  COUNT(*)

----------

        50

 

注意,默认创建的DISKGROUP,每个磁盘就是一个单独的FAILGROUP

如上面的例子,4个阵列,在没有指定failgroup的情况下,只要一组阵列出现了宕机,数据就可能无法访问,如果指定了failgroup,一组阵列损坏后,数据仍然能保证完整

 

在来看看冗余报告:

SQL> SELECT NAME,

  2         TYPE,

  3         TOTAL_MB,

  4         FREE_MB,

  5         REQUIRED_MIRROR_FREE_MB,

  6         USABLE_FILE_MB

  7    FROM V$ASM_DISKGROUP

  8   WHERE GROUP_NUMBER = 3;

 

NAME       TYPE           TOTAL_MB    FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB

---------- ------------ ---------- ---------- ----------------------- --------------

DGROUP1    NORMAL            12228      12054                    3057           4498

 

如果failgroup失败,那么需要3057M的空间来恢复,大概3块盘

 

如果是不指定failgroup创建DISKGROUP了?

CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY DISK

 'ORCL:ASM01', 'ORCL:ASM02', 'ORCL:ASM03', 'ORCL:ASM04', 'ORCL:ASM05', 'ORCL:ASM06',

 'ORCL:ASM07', 'ORCL:ASM08', 'ORCL:ASM09', 'ORCL:ASM10', 'ORCL:ASM11', 'ORCL:ASM12';

SQL> /

 

NAME       TYPE           TOTAL_MB    FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB

---------- ------------ ---------- ---------- ----------------------- --------------

DGROUP1    NORMAL            12228      12057                    1111           5473

 

如果不指定,只允许一个盘损坏,需要1111M来恢复,大概1块盘

 

USABLE_FILE_MB 不代表能使用的磁盘限制,但当该列小于0时,不能正常DROP DISK,无法完成rebalance

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-671590/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8242091/viewspace-671590/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值