Oracle ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory

简介:

ASM Disk Directory

本篇文章讲述ASM元信息的2号文件,ASM的2号文件是ASM的磁盘目录,它跟踪磁盘组中的所有磁盘。由于在ASM中磁盘组是一个独立的存储单位,因此每一个磁盘组都会有自己的磁盘目录。

译者注:ASM中每一个磁盘组都是自解释的,磁盘组之间没有任何的信息上依赖

对ASM来说,磁盘目录只是一个普通的ASM文件,在ASM的文件目录中也会有它的条目,如果磁盘组做了冗余策略,它也会相应做镜像,也会像其他文件一样根据实际需要做空间的伸长。

每个磁盘目录的条目都维护了如下的一些信息:

· 磁盘号

· 磁盘的状态

· 磁盘的名称

· 所在的Failgroup名称

· 创建的时间戳

· 失败的时间戳

· 自失败时间戳截止目前的时间

· resize目标值

· 磁盘修复时间

· Zone的信息

V$ASM_DISK view

磁盘目录的大部分信息都可以通过视图V$ASM_DISK获得,每一个磁盘都在这个视图中有一行记录,这些磁盘包括哪些还不是任何磁盘组的磁盘。每次查询这个视图都会导致ASM执行磁盘的发现操作,因此查询这个视图的代价是非常大的。

下面的例子显示了在ASM实例中查询V$ASM_DISK视图的输出:

SQL> SELECT group_number, disk_number, state, name, mount_status

FROM v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER STATE    NAME         MOUNT_S

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

          0           0 NORMAL                CLOSED

          0           1 NORMAL                CLOSED

          0           2 NORMAL                CLOSED

          0           6 NORMAL                CLOSED

          1           0 NORMAL   ASMDISK1     CACHED

          1           1 NORMAL   ASMDISK2     CACHED

          1           2 NORMAL   ASMDISK3     CACHED

          1           3 NORMAL   ASMDISK4     CACHED

          2           0 NORMAL   ASMDISK5     CACHED

          2           1 NORMAL   ASMDISK6     CACHED

 

10 rows selected.

 

SQL>

我们获得了所有ASM识别到的磁盘,包括了哪些不是当前正mount磁盘组(GROUP_NUMBER=0)的磁盘。

V$ASM_DISK_STAT view

视图V$ASM_DISK_STAT展示了跟V$ASM_DISK相同的信息,不过查询V$ASM_DISK_STAT并不会执行发现所有磁盘的操作。它的信息来自于ASM实例的SGA区,查询V$ASM_DISK_STAT的代价不大,因为并不进行发现磁盘的操作,但是这个查询的结果可能并不能实时反应系统磁盘的现状。

译者注:V$ASM_DISK_STAT中的信息只能反映出当前挂载磁盘组的磁盘信息,而不仅仅是不能反映出系统新加入的盘的信息。

下面的查询显示了在ASM实例中查询V$ASM_DISK_STAT视图的输出:

SQL> SELECT group_number, disk_number, state, name, mount_status

FROM v$asm_disk_stat;

 

GROUP_NUMBER DISK_NUMBER STATE    NAME         MOUNT_S

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

          1           0 NORMAL   ASMDISK1     CACHED

          1           1 NORMAL   ASMDISK2     CACHED

          1           2 NORMAL   ASMDISK3     CACHED

          1           3 NORMAL   ASMDISK4     CACHED

          2           0 NORMAL   ASMDISK5     CACHED

          2           1 NORMAL   ASMDISK6     CACHED

 

6 rows selected.

 

SQL>

This time, we only see disks for the mounted disk groups.

这次,我们只看到了mount的磁盘组上的磁盘。

Locating the disk directory

我们可以在ASM实例中查询固态表X$KFFXP来查看哪些AU属于ASM的2号文件,同时通过join视图V$ASM_DISK_STAT来获取ASM的磁盘名称,让我们来对一个磁盘组进行查询:

SQL> SELECT x.xnum_kffxp "Extent",

x.au_kffxp "AU",

x.disk_kffxp "Disk #",

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 x.group_kffxp=1

and x.number_kffxp=2

ORDER BY 1, 2;

 

   Extent         AU     Disk # Disk name

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

        0          2          3 ASMDISK4

        0          3          0 ASMDISK1

        0          3          1 ASMDISK2

 

SQL>

上面的结果展示了2个内容:ASM的磁盘目录被做了3重镜像,当前磁盘目录的大小是3个物理extent(本例中也就是3个AU),再次强调,即使在一个normal冗余的磁盘组中,ASM的磁盘目录也被做了3重镜像。

让我们使用kfed工具查看下磁盘目录的具体内容,由于数据在3个AU中是一样的,我们只需要查看第一个AU的内容就可以了,这里是ASMDISK4的AU 2:

$ kfed read /dev/oracleasm/disks/ASMDISK4 aun=2 | more

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            6 ; 0x002: KFBTYP_DISKDIR

...

kfddde[0].entry.incarn:               1 ; 0x024: A=1 NUMM=0x0

kfddde[0].entry.hash:                 0 ; 0x028: 0x00000000

kfddde[0].entry.refer.number:4294967295 ; 0x02c: 0xffffffff

kfddde[0].entry.refer.incarn:         0 ; 0x030: A=0 NUMM=0x0

kfddde[0].dsknum:                     0 ; 0x034: 0x0000

kfddde[0].state:                      2 ; 0x036: KFDSTA_NORMAL

kfddde[0].ddchgfl:                  132 ; 0x037: 0x84

kfddde[0].dskname:             ASMDISK1 ; 0x038: length=8

kfddde[0].fgname:              ASMDISK1 ; 0x058: length=8

kfddde[0].crestmp.hi:          32960657 ; 0x078: HOUR=0x11 DAYS=0x4 MNTH=0xc YEAR=0x7db

kfddde[0].crestmp.lo:        2843202560 ; 0x07c: USEC=0x0 MSEC=0x1f5 SECS=0x17 MINS=0x2a

kfddde[0].failstmp.hi:                0 ; 0x080: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0

kfddde[0].failstmp.lo:                0 ; 0x084: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0

kfddde[0].timer:                      0 ; 0x088: 0x00000000

kfddde[0].size:                    4094 ; 0x08c: 0x00000ffe

kfddde[0].srRloc.super.hiStart:       0 ; 0x090: 0x00000000

kfddde[0].srRloc.super.loStart:       0 ; 0x094: 0x00000000

kfddde[0].srRloc.super.length:        0 ; 0x098: 0x00000000

kfddde[0].srRloc.incarn:              0 ; 0x09c: 0x00000000

kfddde[0].dskrprtm:                   0 ; 0x0a0: 0x00000000

kfddde[0].zones[0].start:             0 ; 0x0a4: 0x00000000

kfddde[0].zones[0].size:           4094 ; 0x0a8: 0x00000ffe

kfddde[0].zones[0].used:             47 ; 0x0ac: 0x0000002f

...

kfddde[1].entry.incarn:               1 ; 0x1e4: A=1 NUMM=0x0

kfddde[1].entry.hash:                 1 ; 0x1e8: 0x00000001

kfddde[1].entry.refer.number:4294967295 ; 0x1ec: 0xffffffff

kfddde[1].entry.refer.incarn:         0 ; 0x1f0: A=0 NUMM=0x0

kfddde[1].dsknum:                     1 ; 0x1f4: 0x0001

kfddde[1].state:                      2 ; 0x1f6: KFDSTA_NORMAL

kfddde[1].ddchgfl:                  132 ; 0x1f7: 0x84

kfddde[1].dskname:             ASMDISK2 ; 0x1f8: length=8

...

kfddde[2].entry.incarn:               1 ; 0x3a4: A=1 NUMM=0x0

kfddde[2].entry.hash:                 2 ; 0x3a8: 0x00000002

kfddde[2].entry.refer.number:4294967295 ; 0x3ac: 0xffffffff

kfddde[2].entry.refer.incarn:         0 ; 0x3b0: A=0 NUMM=0x0

kfddde[2].dsknum:                     2 ; 0x3b4: 0x0002

kfddde[2].state:                      2 ; 0x3b6: KFDSTA_NORMAL

kfddde[2].ddchgfl:                  132 ; 0x3b7: 0x84

kfddde[2].dskname:             ASMDISK3 ; 0x3b8: length=8

...

$

输出信息中的kfbh.type为KFBTYP_DISKDIR代表了这是一个磁盘目录。ASM中的磁盘的信息存储在上面输出内容的kfddde的区域,kfddde[0] 是关于磁盘0,kfddde[1]是关于磁盘1,以此类推。以这种方式我们可以知道磁盘组中所有磁盘的信息,就像你看到的,大部分的信息都可以通过视图V$ASM_DISK去获取,而不需要通过kfed这种工具去查看。

Conclusion

ASM磁盘目录维护了关于ASM磁盘组中的所有的磁盘的信息,这些信息基本上可以通过视图V$ASM_DISK去获取,也可以通过kfed工具去访问到这些信息。

 

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

目录
相关文章
|
8月前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
366 2
创建asm disk 磁盘组出错! ORA-15018 And ORA-15107 (Doc ID 2678808.1)
ORA-15018: diskgroup cannot be created ORA-15107: missing or invalid ASM disk name
152 0
|
3月前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
8月前
|
SQL
How To Resize An ASM Disk? (Doc ID 470209.1)
1) Please backup the database(s) contained inside the associated diskgroup. 2) Then shutdown the databases contained inside the associated diskgroup. 3) Dismount the associated diskgroup to verify no client database connections are accessing this specific diskgroup: SQL> alter diskgroup <diskgro
58 2
|
8月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
SQL Oracle 关系型数据库
Oracle ASM磁盘和磁盘组的常用SQL语句
Oracle ASM磁盘和磁盘组的常用SQL语句
293 0
|
文字识别 Oracle NoSQL
oracle 11g 单机asm配置
oracle 11g 单机asm配置
678 0
|
Oracle 关系型数据库
❤️Oracle ASM加磁盘及剔盘操作❤️
❤️Oracle ASM加磁盘及剔盘操作❤️
347 0
|
存储 机器学习/深度学习 Oracle
Oracle 11gR2 ASM存储日常管理手册
Oracle 11gR2 ASM存储日常管理手册 目 录1 文档简介 31.1 编写目的 31.2 适用范围 31.3 名词解释 31.4 格式约定 42 配置多链路和LUN 42.
1153 0
|
Oracle 关系型数据库
oracle Grid 是如何找到voteidks和asm spfile.
oracle Grid 是如何找到voteidks和asm spfile.
1548 0

推荐镜像

更多