#ASM 翻译系列第十八弹:ASM Internal ASM file number 5

来源:互联网 发布:迈达斯桥梁软件培训班 编辑:程序博客网 时间:2024/06/07 21:53

原文: ASM file number 5
作者: Bane Radulovic
译者:魏兴华,沃趣科技高级技术专家,主要参与公司一体机产品、监控产品、容灾产品、DBaaS平台的研发和设计。曾就职于东软集团,阿里巴巴集团,Oracle ACE组成员,DBGEEK 用户组发起人,ITPUB认证博客专家,ACOUG、SHOUG核心成员。曾在中国数据库大会、Oracle技术嘉年华、ORCL-CON、YY分享平台等公开场合多次做过数据库技术专题分享。对Oracle 并行机制、数据库异常恢复方法、ASM等有深入的研究,人称”Oracle Internal达人”,对企业数据库架构设计、故障恢复、高并发下数据库性能调优有丰富的经验,擅长从等待事件角度分析解决数据库性能问题,是OWI方法论的提倡者和践行者。
审校:魏兴华
责编:仲培艺

本章讲述ASM的5号文件,5号文件是ASM的模板目录,包含了磁盘组中所有的文件模板的信息。

有两种类型的模板:一种是系统自带的,一种是用户创建的,默认的模板(系统自带的)已经包含ASM的所有文件类型,创建文件时会根据文件类型自动匹配,用户创建的模板只会在用户特别指定时使用。

每一个模板包含了如下的一些信息:

  • 每个模板的名称(对于默认模板它的名称其实就是文件类型)
  • 文件冗余度(默认是磁盘组的冗余度)
  • 文件条带(默认是根据文件类型来决定文件的条带)
  • 系统标识(是否为系统自带的模板)

Using templates

可以通过视图V$ASM_TEMPLATE来查看完整的模板信息,这里查看下我系统上的模板:

SQL> SELECT name "Template Name", redundancy "Redundancy", stripe "Striping", system "System"FROM v$asm_templateWHERE group_number=1;Template Name            Redundancy       Striping         System------------------------ ---------------- ---------------- --------PARAMETERFILE            MIRROR           COARSE           YASMPARAMETERFILE         MIRROR           COARSE           YDUMPSET                  MIRROR           COARSE           YCONTROLFILE              HIGH             FINE             YFLASHFILE                MIRROR           COARSE           YARCHIVELOG               MIRROR           COARSE           YONLINELOG                MIRROR           COARSE           YDATAFILE                 MIRROR           COARSE           YTEMPFILE                 MIRROR           COARSE           YBACKUPSET                MIRROR           COARSE           YAUTOBACKUP               MIRROR           COARSE           YXTRANSPORT               MIRROR           COARSE           YCHANGETRACKING           MIRROR           COARSE           YFLASHBACK                MIRROR           COARSE           YDATAGUARDCONFIG          MIRROR           COARSE           YOCRFILE                  MIRROR           COARSE           Y16 rows selected.

有一个模板非常的显眼,那就是控制文件(3重镜像,细粒度条带),这是默认的数据库控制文件的模板,这是为什么每一个控制文件都会被做三重镜像的原因。有趣的是,我们可以使用它创建任何数据库文件。
这里举一个例子(注意我连接的是数据库的实例):

SQL> create tablespace TRIPLE_F datafile '+DATA(CONTROLFILE)' size 1m;Tablespace created.SQL> SELECT name FROM v$datafile WHERE name like '%triple_f%';NAME--------------------------------------------------------------------------------+DATA/br/datafile/triple_f.271.771793293

上面创建了一个表空间,ASM给我新创建的数据文件分配了编号217,我们接着看这个文件的冗余度,这一次我连接的是ASM的实例:

SQL> SELECT group_number, name, type "Redundancy"FROM v$asm_diskgroupWHERE name='DATA';GROUP_NUMBER NAME                             Redundancy------------ -------------------------------- ----------------           1 DATA                             NORMAL

这是一个normal冗余的磁盘组,但是由于我们使用了控制文件模板来创建数据文件,因此我们通过查询内部视图x$kffxp来获得我们想要的信息:

SQL> SELECT xnum_kffxp "Extent", au_kffxp "AU", disk_kffxp "Disk"FROM x$kffxpWHERE group_kffxp=1 and number_kffxp=271ORDER BY 1,2;    Extent         AU       Disk---------- ---------- ----------         0       1126          1         0       1130          3         0       1136          2         1       1131          3         1       1132          0         1       1137          2...         7       1132          1         7       1135          3         7       1141          224 rows selected.

如预期,这个文件被做了三重镜像,因为我们看到每一个虚拟区都由三个物理区组成,但是为什么我的数据文件仅仅只有1MB,但是却有8个虚拟区呢,这是因为控制文件的模板是一个精细条带的模板。

译者注:隐含参数_asm_stripesize代表了精细条带的大小,默认为128K,隐含参数_asm_stripewidth代表了条带的宽度,默认为8。但是有一点很奇怪,精细条带下,数据文件头好像没有独占一个extent,因为上面查询显示了这个1MB的文件一共占用了8个extent,而不是9个extent,按照条带宽度是8的设定,文件内容本身就应该占用了8个extent。

User templates

如果我想要文件具有三重镜像但是粗粒度的条带,该怎么做?我们可以手工创建一个我们自己的模板,COARSE关键字指定了这是一个粗粒度的条带:

SQL> alter diskgroup DATA add template TRIPLE_COARSE attributes (HIGH COARSE);Diskgroup altered.Let's now use this template. Back to the database instance...SQL> create tablespace TRIPLE_C datafile '+DATA(TRIPLE_COARSE)' size 1m;Tablespace created.SQL> SELECT name FROM v$datafile WHERE name like '%triple_c%';NAME--------------------------------------------------------------------------------+DATA/br/datafile/triple_c.272.771794469

ASM的文件号是272,返回到ASM实例检查:

SQL> SELECT xnum_kffxp "Extent", au_kffxp "AU", disk_kffxp "Disk"FROM x$kffxpWHERE group_kffxp=1 and number_kffxp=272ORDER BY 1,2;    Extent         AU       Disk---------- ---------- ----------         0       1136          3         0       1137          0         0       1142          2         1       1133          1         1       1137          3         1       1143          26 rows selected.

这次的结果显示了只为1MB的文件分配了1个虚拟区,额外的一个是ASM的文件头。注意这个文件是三重的镜像和粗粒度的条带。

我也可以创建一个根本不做镜像的模板,我们试试看:

SQL> alter diskgroup DATA add template NO_MIRRORING attributes (UNPROTECTED);Diskgroup altered.

接下来我们使用我们上面创建的模板来添加一个数据文件:

SQL> create tablespace NOT_IMPORTANT datafile '+DATA(NO_MIRRORING)' size 1m;Tablespace created.SQL> SELECT name FROM v$datafile WHERE name like '%not_important%';NAME--------------------------------------------------------------------------------+DATA/br/datafile/not_important.273.771795255

上面新产生的数据文件的编号是273,我们来检查一下:

SQL> SELECT xnum_kffxp "Extent", au_kffxp "AU", disk_kffxp "Disk"FROM x$kffxpWHERE group_kffxp=1 and number_kffxp=273ORDER BY 1,2;    Extent         AU       Disk---------- ---------- ----------         0       1138          0         1       1134          1

我们看到这个文件没有被镜像(虽然在一个normal冗余的磁盘组中)。

Conclusion

模板目录包含了磁盘组中文件模板的信息,每一个磁盘组都会有默认的一系列的系统自带的模板,用户也可以额外根据需要创建自己的模板。一个比较好的使用模板的方法是在一个normal冗余的磁盘中创建一个三重镜像模板,注意如果想要使这个做法生效,我们至少需要这个磁盘组中有3个failgroup。

0 0