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

简介:

ASM file number 5

本章讲述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。


本文来自云栖社区合作伙伴“DBGEEK”

相关文章
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
385 2
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
269 64
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
124 11
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
65 7
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
42 6

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等