ASM 翻译系列第二十四弹:ASM Internal ASM files number 10 and 11
译者: 郭旭瑞
审核: 魏兴华
DBGeeK社群联合出品
ASM files number 10 and 11
本篇介绍ASM元信息的十号文件和十一号文件,ASM元信息10号文件是ASM用户目录,11号文件是组目录。它们是用来为ASM文件访问控制特性提供支持的元信息结构。
ASM文件访问控制机制用来限制特定的ASM客户端(通常就是数据库实例)对文件的访问,它是基于操作系统层database home的effective user标识号实现的。
这些信息可以通过V$ASM_USER、V$ASM_USERGROUP、$ASM_USERGROUP_MEMBER视图查询到。
ASM users and groups
如果要使用ASM文件访问控制特性,我们需要适当的设置操作系统用户和组。通过ALTER DISKGROUP ADD USERGROUP命令将用户和组添加至ASM磁盘组中。这一步就略过了,我们把关注点集中在ASM 用户和组目录上。
下面是操作系统中我们创建的用户。
$ id grid
uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1020(asmadmin),1021(asmdba),1031(dba)
$ id oracle
uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1021(asmdba),1031(dba)
$ id oracle1
uid=1102(oracle1) gid=1033(dba1) groups=1033(dba1)
$ id oracle2
uid=1103(oracle2) gid=1034(dba2) groups=1034(dba2)
接下来就是我在磁盘组中设置的用户和组。
SQL> SELECT u.group_number "Disk group#",
u.os_id "OS ID",
u.os_name "OS user",
u.user_number "ASM user#",
g.usergroup_number "ASM group#",
g.name "ASM user group"
FROM v$asm_user u, v$asm_usergroup g, v$asm_usergroup_member m
WHERE u.group_number=g.group_number and u.group_number=m.group_number
and u.user_number=m.member_number
and g.usergroup_number=m.usergroup_number
ORDER BY 1, 2;
Disk group# OS ID OS user ASM user# ASM group# ASM user group
----------- ----- ------- --------- ---------- --------------
1 1100 grid 1 3 GRIDTEAM
1101 oracle 2 1 DBATEAM1
1102 oracle1 3 2 DBATEAM2
1103 oracle2 4 2 DBATEAM2
2 1101 oracle 2 1 DBATEAM1
Look inside
在1号磁盘组中获取ASM 用户和组目录所在的AU。
SQL> SELECT x.number_kffxp "File#",
x.disk_kffxp "Disk#",
x.xnum_kffxp "Extent",
x.au_kffxp "AU",
d.name "Disk name"
FROM x$kffxp x, v$asm_disk_stat d
WHERE x.group_kffxp=d.group_number
and x.disk_kffxp=d.disk_number
and d.group_number=1
and x.number_kffxp in (10, 11)
ORDER BY 1, 2;
File# Disk# Extent AU Disk name
---------- ---------- ---------- ---------- ------------------------------
10 0 0 2139 ASMDISK5
1 0 2139 ASMDISK6
11 0 0 2140 ASMDISK5
1 0 2140 ASMDISK6
对于每个用户,用户目录元信息中都有一个block相对应,而block号是跟用户号(对应v$asm_user的user_number列)相对应的。如果我们有四个用户,用户号码分别对应1-4,那么他们也分别位于1-4号block中。接下来加以验证。
$ kfed read /dev/oracleasm/disks/ASMDISK5 aun=2139 blkn=1 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 24 ; 0x002: KFBTYP_USERDIR
...
kfzude.user: 1100 ; 0x038: length=4
...
所以,1号block对应1100号操作系统用户。这与上文v$asm_user查询结果是匹配的。接下来看其他block。
$ let b=1
$ while (( $b <= 4 ))
do
kfed read /dev/oracleasm/disks/ASMDISK5 aun=2139 blkn=$b | grep kfzude.user
let b=b+1
done
kfzude.user: 1100 ; 0x038: length=4
kfzude.user: 1101 ; 0x038: length=4
kfzude.user: 1102 ; 0x038: length=4
kfzude.user: 1103 ; 0x038: length=4
正如所想的,以上显示了ASM用户目录中的四个操作系统用户对应的ID。
组目录也是一个条目对应一个block,block号也是跟ASM组号码匹配的。继续验证。
$ let b=1
$ while (( $b <= 3 ))
do
kfed read /dev/oracleasm/disks/ASMDISK5 aun=2140 blkn=$b | grep kfzgde.name
let b=b+1
done
kfzgde.name: DBATEAM1 ; 0x03c: length=8
kfzgde.name: DBATEAM2 ; 0x03c: length=8
kfzgde.name: GRIDTEAM ; 0x03c: length=8
以上显示了该磁盘组中对应的组名称。
Conclusion
ASM用户目录和组目录是用来为ASM文件访问控制特性提供支持的元信息结构,该特性在11.2版本中引入。这些信息可以通过V$ASM_USER、V$ASM_USERGROUP、$ASM_USERGROUP_MEMBER视图查询到。
关于译者
郭旭瑞,沃趣科技产品交付部经理,负责QData Cloud高性能数据库云平台、QBackup数据库秒级备份恢复云平台等产品的整体交付管理与技术支持、维保服务工作。个人网站:www.dbalex.com
- Android解析WindowManager(一)WindowManager体系
- ios9 http请求失败的问题
- Android内存优化(六)LeakCanary使用详解
- Spring Cloud构建微服务架构:服务消费(Feign)【Dalston版】
- React Native组件(四)TextInput组件解析
- struts2实现ajax校验的2种方法
- 单例对象
- Android+struts2+json方式模拟手机登录功能
- iOS 获取通讯录里边的电话号码AddressBook
- InvocationTargetException异常解析
- Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】
- java基础多线程之共享数据
- Spring Boot自动化配置的利弊及解决之道
- Java四种引用解析以及在Android的应用
- 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 数组属性和方法
- WPF加载中实现
- Chrome Headless 尝试
- MySQL--索引及优化查询
- Nginx 配置相关--Gzip压缩、CORS
- Webpack+Vue2项目结构生成
- 关于跨域以及Spring Boot的解决方案
- FFmpeg进行音频的解码和播放
- Gitbook 安装及使用
- MySQL 视图、过程、函数
- 基于Spring Boot + Dubbo的全链路日志追踪(二)
- 基于Spring Boot + Dubbo的全链路日志追踪(一)
- 使用C语言编写Python扩展包
- PlantUML基本使用(一)--时序图
- gRPC基本使用(一)--java与go之间的相互调用
- confd基本使用--Nginx配置自动化