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

更新时间:2016-08-24 11:41:06 点击次数:2340次

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

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

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

Using templates

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

SQL> SELECT name "Template Name", redundancy "Redundancy", stripe "Striping", system "System" FROM v$asm_template WHERE group_number=1;

Template Name            Redundancy       Striping         System ------------------------ ---------------- ---------------- -------- PARAMETERFILE            MIRROR           COARSE           Y
ASMPARAMETERFILE         MIRROR           COARSE           Y
DUMPSET                  MIRROR           COARSE           Y
CONTROLFILE              HIGH             FINE             Y
FLASHFILE                MIRROR           COARSE           Y
ARCHIVELOG               MIRROR           COARSE           Y
ONLINELOG                MIRROR           COARSE           Y
DATAFILE                 MIRROR           COARSE           Y
TEMPFILE                 MIRROR           COARSE           Y
BACKUPSET                MIRROR           COARSE           Y
AUTOBACKUP               MIRROR           COARSE           Y
XTRANSPORT               MIRROR           COARSE           Y
CHANGETRACKING           MIRROR           COARSE           Y
FLASHBACK                MIRROR           COARSE           Y
DATAGUARDCONFIG          MIRROR           COARSE           Y
OCRFILE                  MIRROR           COARSE           Y 16 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_diskgroup WHERE 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$kffxp
WHERE group_kffxp=1 and number_kffxp=271 ORDER 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 2 24 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$kffxp WHERE group_kffxp=1 and number_kffxp=272 ORDER BY 1,2;

    Extent         AU       Disk ---------- ---------- ---------- 0 1136 3 0 1137 0 0 1142 2 1 1133 1 1 1137 3 1 1143 2 6 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$kffxp WHERE group_kffxp=1 and number_kffxp=273 ORDER BY 1,2;

    Extent         AU       Disk
---------- ---------- ---------- 0 1138 0 1 1134 1

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

Conclusion

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

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!