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

原作者:Bane Radulovic

译者: 魏兴华

审核: 魏兴华

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。

关于译者

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

原文发布于微信公众号 - 沃趣科技(woqutech)

原文发表时间:2016-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

一个慢查询报警的简单处理 (r8笔记第12天)

今天在做节后的一个基本检查的时候,发现一个不太起眼的报警,报警内容为大体为: MySQL 每秒慢查询次数超过 <1>个on xxxx 查看zabbix的监控数...

38080
来自专栏乐沙弥的世界

Oracle 基于用户管理恢复的处理

Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整。除了使用RMAN工具以及第三方备份与恢复工具之外,基于

7020
来自专栏c#开发者

DataGrid和CheckBox的混合使用

我们知道DataGrid是非常强大的一个ASP.NET组件,我们可以用它表示非常丰富的信息.在论坛里经常可以看见一些网友问一些关于该控件的问题,我虽不是什么高手...

37190
来自专栏乐沙弥的世界

Oracle OWI 等待事件视图(v$session_wait/v$session_event/v$system_event)

    通常情况下,用户提交一条SQL语句,总会存在这样或那样的等待事件。也就是说由于所需资源被占用导致进程不得不处于等待状态。Oracle为我们提供了获取这些...

11230
来自专栏乐沙弥的世界

Oracle 实例恢复

Oracle实例失败多为实例非一致性关闭所致,通常称为崩溃(crash)。实例失败的结果等同于shutdown abort。

14450
来自专栏腾讯云TStack专栏

五分钟聊T-SQL:数据压缩

传说中数据压缩能压缩到原始数据的1/10,但是... ... 但是至少目前为止我还没遇到过这样的情形,通常情况下能压缩到原始数据的1/5-2/5的样子。

37320
来自专栏沃趣科技

删用户删表空间的操作还能flashback回来吗?

有一次在某微信群里,有人提问以下两条操作还能恢复吗?而且是在没有开归档。紧接着又有人提问数据库是否开了闪回?

19420
来自专栏Hadoop实操

如何使用StreamSets实现Oracle中变化数据实时写入Kudu

1.1K50
来自专栏CSDN技术头条

MySQL 5.7 X Plugin:流水线技术vs.并行查询技术

本文将以MySQL 5.7 X Plugin为例,对比分析流水线(pipelining)和并行查询技术。 另一篇博文《MySQL 5.7 X Plugin支持异...

43360
来自专栏沃趣科技

Log Miner 挖挖挖

Log Miner是Oracle自Oracle 8i以后推出的一个可以分析数据库redo log和archivelog内容的工具,可以通过日志分析所有对数据库的...

16650

扫码关注云+社区

领取腾讯云代金券