Oracle ASM 翻译系列第十弹:ASM Internal ASM DISK header

简介:

ASM disk header

ASM磁盘头可能是ASM元数据中最广为人知的部分。之前你可能认为当它被破坏或丢失时,只能寄希望于Oracle技术支持人员协助来恢复。在本节中将解释ASM磁盘头的重要性和它包含的信息。

Block zero

ASM磁盘是以AU为单位进行格式化的,部分AU会存放ASM元数据,其他AU存放数据库中的相关数据(如数据文件、备份文件、归档文件等等)。包含ASM元数据的AU会以元数据块的方式进行格式化(一个元数据块的大小为4K)。AU0位于ASM磁盘的起始位置,它始终用于存储ASM元数据。AU0的第一个块,即block 0,就是ASM的磁盘头。

ASM disk header contents

ASM 磁盘头的大部分内容仅与本磁盘相关,但也有部分信息与整个磁盘组相关,有些甚至于与整个cluster相关。

我们对一个LINUX平台上通过asmlib管理的磁盘的block 0,使用kfed工具进行输出观察。

$ kfed read /dev/oracleasm/disks/ASMD1

kfbh.endian: 1 ; 0x000: 0x01

kfbh.hard: 130 ; 0x001: 0x82

kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD

kfbh.datfmt: 1 ; 0x003: 0x01

kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0

kfbh.block.obj: 2147483648 ; 0x008: TYPE=0x8 NUMB=0x0

kfbh.check: 473773689 ; 0x00c: 0x1c3d3679

kfbh.fcn.base: 0 ; 0x010: 0x00000000

kfbh.fcn.wrap: 0 ; 0x014: 0x00000000

kfbh.spare1: 0 ; 0x018: 0x00000000

kfbh.spare2: 0 ; 0x01c: 0x00000000

kfdhdb.driver.provstr: ORCLDISKASMD1 ; 0x000: length=13

kfdhdb.driver.reserved[0]: 1145918273 ; 0x008: 0x444d5341

kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031

kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000

kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000

kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000

kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000

kfdhdb.compat: 186646528 ; 0x020: 0x0b200000

kfdhdb.dsknum: 0 ; 0x024: 0x0000

kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL

kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER

kfdhdb.dskname: ASMD1 ; 0x028: length=5

kfdhdb.grpname: DATA ; 0x048: length=4

kfdhdb.fgname: ASMD1 ; 0x068: length=5

...

上述kfed命令的输出结果显示这个asm块有两种类型的数据 以kfbh为前缀的块头信息和以kfdhdb为前缀的ASM磁盘头信息。实际上,每个ASM元数据块都会有块头信息和与块类型相匹配的一些相关数据。

Important ASM metadata block 0 header data

数据类型

值

kfbh.endian

系统字序。0 - 大字序,1 - 小字序。

kfbh.type

ASM块类型。KFBTYP_DISKHEAD 表示这是一个ASM磁盘头类型块。

kfbh.block.blk

ASM块号。注意ASM磁盘头块的块编号是0

重要的ASM磁盘头数据

数据类型

值

kfdhdb.driver.provstr

ASMLIB磁盘是ORCLDISK+磁盘名,非ASMLIB磁盘是ORCLDISK

kfdhdb.dsknum

ASM磁盘编号

kfdhdb.grptyp

磁盘级冗余级别 KFDGTP_EXTERNAL 代表 external级别, KFDGTP_NORMAL 代表 normal级别, KFDGTP_HIGH 代表 high级别.

kfdhdb.hdrsts

ASM磁盘头状态. V$ASM_DISK.HEADER_STATUS视图内包含所有可能的状态.

kfdhdb.dskname

ASM磁盘名

kfdhdb.grpname

ASM磁盘组名

kfdhdb.fgname

ASM失败组名

kfdhdb.crestmp.hi|lo

磁盘添加到磁盘组的时间.

kfdhdb.mntstmp.hi|lo

磁盘最近一次被挂接的时间.

kfdhdb.secsize

磁盘的扇区大小(bytes).

kfdhdb.blksize

ASM元数据块的大小(bytes).

kfdhdb.ausize

Alloocation unit的大小(bytes).默认的AU大小为1 MB.

kfdhdb.dsksize

磁盘大小(以au为单位).本例中的磁盘大小为10239 MB.

kfdhdb.fstlocn

指针指向ASM的空闲空间表.1代表本AU中的ASM 块1.

kfdhdb.altlocn

指针指向ASM的分配表.2 代表本AU中的ASM 块2.

kfdhdb.f1b1locn

指针指向ASM的文件目录.2代表本ASM磁盘的 AU 2.

kfdhdb.dbcompat

最小的数据库兼容版本. 0x0a100000 = 10.1.

kfdhdb.grpstmp.hi

lo

kfdhdb.vfstart

vfend

kfdhdb.spfile

ASM spfile参数文件的AU号.本特性限于11.2或更高版本.

kfdhdb.spfflg

ASM spfile参数文件标识.如果这个值是1,ASM spfile参数文件则位于本磁盘的kfdhdb.spfile参数的AU .本特性限于11.2或更高版本.

ASM disk header backup

ASM从11.1.0.7版本开始,磁盘头块的信息会自动备份到AU1的倒数第二个ASM元数据块中。知道AU的块大小和ASM元数据块的大小后,就能找到倒数第二个块的块编号。通过kfed工具可以从块头中读取到这些信息,并计算出AU1的倒数第二个块的块编号。

$ ausize=`kfed read /dev/oracleasm/disks/ASMD1 | grep ausize | tr -s ' ' | cut -d' ' -f2`

$ blksize=`kfed read /dev/oracleasm/disks/ASMD1 | grep blksize | tr -s ' ' | cut -d' ' -f2`

$ let n=$ausize/$blksize-2

$ echo $n

254

译者注:其实在10.2.0.5版本,ASM也会自动备份磁盘头的数据到AU 1的倒数第二个ASM元数据块中。

$ kfed read /dev/oracleasm/disks/ASMD1 aun=1 blkn=254

kfbh.endian: 1 ; 0x000: 0x01

kfbh.hard: 130 ; 0x001: 0x82

kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD

kfbh.datfmt: 1 ; 0x003: 0x01

kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0

kfbh.block.obj: 2147483648 ; 0x008: TYPE=0x8 NUMB=0x0

kfbh.check: 473773689 ; 0x00c: 0x1c3d3679

kfbh.fcn.base: 0 ; 0x010: 0x00000000

kfbh.fcn.wrap: 0 ; 0x014: 0x00000000

kfbh.spare1: 0 ; 0x018: 0x00000000

kfbh.spare2: 0 ; 0x01c: 0x00000000

kfdhdb.driver.provstr: ORCLDISKASMD1 ; 0x000: length=13

...

kfdhdb.dsknum: 0 ; 0x024: 0x0000

kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL

kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER

kfdhdb.dskname: ASMD1 ; 0x028: length=5

kfdhdb.grpname: DATA ; 0x048: length=4

kfdhdb.fgname: ASMD1 ; 0x068: length=5

...

能够看到与AU0的元数据块0相同的内容。当磁盘头被破坏或者丢失时,这个备份将是非常有用的。只需要运行kfed repair [磁盘名]命令即可修复,如果AU大小不是默认的1MB,还需要指定AU大小的具体值。 如果怀疑ASM的磁盘头出现故障,最好寻求Oracle技术支持人员的帮助,而不是独自进行操作。

ASM disk header in Exadata

Exadata中的ASM磁盘并不是以设备名的方式给操作系统使用。它们使用专用的名称格式 o/[存储节点IP]/[磁盘名].kfed工具支持这种名称格式,所以kfed可以在exadata环境中使用。查看Exadata磁盘的ASM磁盘头:

$ kfed read o/192.168.10.9/DBFS_DG_CD_03_exadatacel01

kfbh.endian: 1 ; 0x000: 0x01

kfbh.hard: 130 ; 0x001: 0x82

kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD

...

kfdhdb.dskname:DBFS_DG_CD_03_EXADATACEL01 ; 0x028: length=26

kfdhdb.grpname: DBFS_DG ; 0x048: length=7

kfdhdb.fgname: EXADATACEL01 ; 0x068: length=12

...

kfdhdb.ausize: 4194304 ; 0x0bc: 0x00400000

...

ASM磁盘头中部分Exadata专用属性如下:

ASM磁盘名由磁盘组名 (DBFS_DG),存储节点磁盘标识(CD),存储节点磁盘编(3)号和存储节点名(exadatacel01)构成.

失败组的名字与存储节点的名字相同.Exadata环境中默认的AU大小是4MB。

Conclusion

ASM磁盘头包含ASM磁盘组正常运作和保持可用的重要元数据。 为防止ASM磁盘头的突然损坏和丢失,Oracle推荐通过磁盘分区的方式,就是将它“移动”到远离磁盘物理起始位置的方式实现对ASM磁盘头的保护。

Exadata的ASM磁盘头信息通过不暴露给数据库节点的方式进行保护。

ASM从11.1.0.7版本开始,ASM磁盘头通过维护一份在AU1备份的方式实现进一步的保护机制。


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

目录
相关文章
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
1132 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
399 0
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
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
269 2
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
1000 93
|
12月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
530 0
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
757 8
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
671 11

推荐镜像

更多