博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle ASM 翻译系列第八弹:ASM Internal ASM file extent map
阅读量:6758 次
发布时间:2019-06-26

本文共 3648 字,大约阅读时间需要 12 分钟。

当ASM创建一个文件时(例如数据库实例要求创建一个数据文件),它会以extent为单位分配空间。一旦文件被创建,ASM会传递extent映射表给数据库实例,后续数据库实例能在不和ASM实例交互的情况下访问这个文件。如果一个文件的extent需要被重新定位,比如磁盘组进行rebalance操作,ASM会告知数据库实例关于extent映射表的变更。

可以通过查询ASM实例的X$KFFXP视图来获取ASM文件extent映射表的内容。X$KFFXP视图中的每一行对应着所有处于mount状态磁盘组中每一个文件的每一个物理extent的信息。

译者注:1)网络上有不少关于X$KFFXP视图的解释,有些信息过于陈旧,需要指出,它记录的每一条记录都代表的是物理extent的信息,而非AU信息,X$KFFXP视图的SIZE_KFFXP字段,代表了此extent是由几个AU组成的,在启用11G可变extent特性后会出现SIZE_KFFXP大于1的情况,具体更多信息参考本系列的第一篇文章。2)X$KFFXP这里翻译成了X$KFFXP视图,只是为了便于理解,它的本质是一个内存的数据结构(fixed table),其数据不在buffer_cache中。

X$KFFXP视图的重要字段包括:

GROUP_KFFXP 磁盘组编号。注意磁盘组编号不是恒久不变的,每次磁盘组被mount时都可能会不一样。等同于V$ASM_DISKGROUP.GROUP_NUMBER字段。

NUMBER_KFFXP 文件序号。等同于 V$ASM_FILE.FILE_NUMBER字段。 注意,ASM的文件序号不同于数据库内的数据文件序号,不要把两个概念搞混了。小于256的ASM文件序号是保留给ASM元数据文件使用的。

INCARN_KFFXP 文件版本号。当一个ASM文件序号被一个新文件重用时,文件版本号会发生改变。等同于V$ASM_FILE.INCARNATION字段。注意,ASM文件是以文件序号.版本号的方式结尾。

XNUM_KFFXP 虚拟extent序号。external冗余磁盘组的虚拟extent序号与物理extent序号一致。 normal冗余磁盘组的虚拟extent序号通过将物理extent序号除于2得到.high冗余磁盘组的虚拟extent序号通过将物理extent序号除于3得到.

PXN_KFFXP 物理extent序号。一个文件的物理extent序号都以数字0开始,顺序递增。

LXN_KFFXP 虚拟extent中物理extent的序号。 0 为 primary extent, 1 为 secondary extent, 2 为 third copy of the extent。

DISK_KFFXP 物理磁盘序号。等同于V$ASM_DISK.DISK_NUMBER。

AU_KFFXP AU序号,磁盘维度的AU编号,每个磁盘从0开始。

在ASM实例中通过以下查询,能够看出磁盘组3内的ASM元数据文件的文件序号,名字和AU数量。

$ sqlplus / as sysasm

SQL> select NUMBER_KFFXP "ASM file number", DECODE (NUMBER_KFFXP,

1, 'File directory', 2, 'Disk directory', 3, 'Active change directory', 4, 'Continuing operations directory',

5, 'Template directory', 6, 'Alias directory', 7, 'ADVM file directory', 8, 'Disk free space directory',

9, 'Attributes directory', 10, 'ASM User directory', 11, 'ASM user group directory', 12, 'Staleness directory',

253, 'spfile for ASM instance', 254, 'Stale bit map space registry ', 255, 'Oracle Cluster Repository registry') "ASM metadata file name",

count(AU_KFFXP) "Allocation units"

from X$KFFXP

where GROUP_KFFXP=3 and NUMBER_KFFXP<256

group by NUMBER_KFFXP

order by 1;

ASM file number ASM metadata file name             Allocation units

--------------- ---------------------------------- ----------------

1 File directory                                    3

2 Disk directory                                    3

3 Active change directory                          69

4 Continuing operations directory                   6

5 Template directory                                3

6 Alias directory                                   3

8 Disk free space directory                         3

9 Attributes directory                              3

12 Staleness directory                               3

253 spfile for ASM instance                           2

254 Stale bit map space registry                      3

255 Oracle Cluster Repository registry              135

12 rows selected.

SQL>

通过以上查询结果可以发现,这个磁盘组并没有包含所有类型的元数据文件(例如第十号和第十一号文件)。一个有意思的事情是,除了ASM实例的spfile,每个文件至少占用3个AU,对于这一点更多详细信息我们会在其他章节介绍。

我们再来以一个数据库控制文件为例查看下它的extent映射表

第1步,查找DATA磁盘组内所有的数据库控制文件(以Grid所属的OS用户身份运行asmcmd命令)

$ asmcmd find --type controlfile +DATA "*"

+DATA/DBM/CONTROLFILE/Current.256.738247649

+DATA/BR/CONTROLFILE/Current.299.748434267

$

第2步,检查DATA磁盘组的磁盘组序号(连接到asm实例)

$ sqlplus / as sysasm

SQL> select GROUP_NUMBER from V$ASM_DISKGROUP where NAME='DATA';

GROUP_NUMBER

------------

1

SQL>

第3步,检查磁盘组1中ASM 256号文件(+DATA/DBM/CONTROLFILE/Current.256.738247649)的extent映射表

SQL> select XNUM_KFFXP "Virtual extent", PXN_KFFXP "Physical extent", LXN_KFFXP "Extent copy", DISK_KFFXP "Disk", AU_KFFXP "Allocation unit"

from X$KFFXP

where GROUP_KFFXP=1 and NUMBER_KFFXP=256 and XNUM_KFFXP<>2147483648

order by 1,2;

Virtual extent Physical extent Extent copy       Disk Allocation unit

-------------- --------------- ----------- ---------- ---------------

0               0           0         20               5

0               1           1         29            1903

0               2           2          6              82

1               3           0         22               6

1               4           1         31               8

1               5           2          9               3

2               6           0         30               8

2               7           1         23            1907

2               8           2          7              63

3               9           0         26               2

3              10           1         16            1904

3              11           2          6               4

...

39             117           0         25            1913

39             118           1         15            1906

39             119           2          3              27

120 rows selected.

SQL>

以上输出可以看出这个控制文件是三路镜像,每个虚拟extent对应三个物理extent,还可以看出这个文件每个AU的实际位置。

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

转载地址:http://rhzeo.baihongyu.com/

你可能感兴趣的文章
parseDouble() 的用法
查看>>
shell的基础语法
查看>>
CentOS 6.9使用Shell脚本实现FTP自动上传和下载文件
查看>>
#51CTO学院四周年#我与51CTO不得不说多的故事
查看>>
java函数参数默认值
查看>>
远程关机对企业的意义
查看>>
Kafka笔记整理(三):消费形式验证与性能测试
查看>>
WINPE集成SCSI/RAID驱动
查看>>
我们为什么需要大数据?
查看>>
单例模式-singleton
查看>>
自动布局下的iPhone 6 plus等比例放大,且UITextfield失败关于placeholder的原因
查看>>
利用div实现邮件收件人的输入框
查看>>
我的友情链接
查看>>
单页布局
查看>>
我的友情链接
查看>>
综合布线详细方案设计
查看>>
rhel6.3下安装GCC4.8.1
查看>>
大图片生成缩略图 导致imagecreatefromjpeg 内存崩溃问题
查看>>
我的友情链接
查看>>
手工恢复
查看>>