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方法论的提倡者和践行者。
- 人脸智慧时尚店落地广深,微信支付赋能智慧零售
- 基层医疗破局关键:从医疗SaaS三大未来趋势说起
- 无数据库权限下载文献攻略大全
- 学 Python 就是为了当程序员?不止一种可能性
- 2018程序员必备碎片化学习工具
- 深入理解php底层:php生命周期
- 网站性能测试指标详解
- 在.NET Core类库中使用EF Core迁移数据库到SQL Server
- 人类的未来:儿童都能驾驶的汽车
- 论循证新闻的方法与意义——一种媒体融合背景下新闻生产方式创新
- 域名资讯:域名jiuhuang.com已搭建成“韭黄答题助手”网站
- Servlet开篇
- 浅谈中国域名的名与利
- 加密货币的火爆,tokens.com域名已50万美元成交
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法