专栏首页沃趣科技ASM 翻译系列第四弹:高级知识 kfed 元数据编辑器

ASM 翻译系列第四弹:高级知识 kfed 元数据编辑器

原作者:Bane Radulovic

译者: 赵恩东

审核: 魏兴华

DBGeeK社群联合出品

kfed - ASM metadata editor

kfed是一个没有官方文档记录的ASM工具,它可以用来读取和修改ASM的元数据块。它本身是一个独立的工具,独立于ASM实例,因此不管实例是否启动,ASM磁盘组是否mount ,它都可以正常使用。kfed最为强大的地方在于它可以修复ASM损坏的元数据。

kfed的二进制文件在最近的ASM版本中直接可用,如果你没有在$ORACLE_HOME/bin看到,可以通过如下步骤来编译获得:

译者注,在11G之前的版本,kfed工具默认没有编译,需要手工编译后才能使用。11G之后版本软件安装完成后就已经对kfed完成了编译,直接可以使用。

kfed read

使用kfed来可以读取一个ASM元数据块(4K大小),它的语法是:

命令行参数的介绍:

aun-读取的AU号,如果不提供值,默认为AU 0

aus-AU的大小,默认为1048576字节(1MB),如果磁盘组不是默认的AU大小,那么需要在命令行中显式的指定AU的大小

blkn-读取的块号,默认为块0或者是AU的第一个block

dev-ASM磁盘或设备名称。注意dev关键字可省略,但是磁盘名是必须输入的。

Use kfed to read ASM disk header block

接下来是一个使用kfed工具的例子,展示了读取ASM磁盘/dev/sda1的磁盘头:

上面的kfed命令非常的简短,大多使用了默认值,等价于下面这个(所有的参数都显式的设置成了它的默认值):

我们能够看到上面kfed的输出被很好的格式化方便我们的阅读,元数据块的输出也根据实际的内容做了分组。

在本例中,kfbh区域显示了块头数据,最重要的有kfbh.type-块类型,这里为KFBTYP_DISKHEAD,表明为磁盘头。

我们通过kfed工具查看ASM磁盘头元数据块的实际内容,kfdhdb区域:kfdhdb.dsknum代表本磁盘在磁盘组中的编号为0,kfdhdb.grptyp代表磁盘组的冗余级别为normal,kfdhdb.hdrsts代表磁盘头的状态为member,kfdhdb.dskname代表磁盘的名称为DATA_0000等等。

如果想了解磁盘头的详细信息,可以参照本系列【ASM disk header 】篇。

Use kfed to read any ASM metadata block

下一个例子里我们来展示下读取ASM File Directory block-文件目录块,为了能够达到此目的,我们需要使用kfed命令:

上面我通过指定AU 10和块1来读取ASM的文件目录块(kfbh.type KFBTYP_FILEDIR也说明了这是文件目录块),如果读者对这块不太熟悉,可以参照本系列的【ASM File Directory】篇来了解如何定位到ASM文件目录块。

Is my ASM metadata block corrupt

如果一块磁盘本应属于某个ASM磁盘组,但是ASM磁盘头的kfbh.type部分却显示了KFBTYP_INVALID,那么这说明了ASM的磁盘头已经损坏,但是也别着急下结论,你查看的是否是正确的磁盘?是否是正确的磁盘分区?是否还可以通过其他的名字访问磁盘(多路径环境),如果你还不够确定或者你的磁盘头确实已经损坏,可以联系Oracle支持来解决问题。

以上的办法适用于所有的ASM元数据块,如果ASM期待读取到一个ASM元数据块,然后读取到了一堆的无意义的值,它将标注这个kfbh.type内容为KFBTYP_INVALID,同时ORA-15196也会出现在ASM或者DB的alert日志中。(取决于哪一个实例发现了这个问题)

kfed write

kfed write命令可以对一个ASM元数据块进行写入,语法是:

上面新的命令行的参数含义:

text - 新块内容的一个文本文件

checksum - yes,计算和写入正确的checksum值,注意文本文件中的checksum值不需要一定是正确的,写入时checksum参数如果设置的是yes,会自动进行计算。

Use kfed to write the correct checksum to ASM metadata block

ASM元数据块可能看上去是好的,但是事实上已经损坏,例如,元数据块的checksum值可能是错误的,这种情况下我们需要去纠正它,其实,如果仅仅是checksum值不正确,可以很容易通过kfed读取这个块然后再写回的方式进行纠正,kfed工具会计算新的checksum值,然后把正确的checksum值写回。

接下来我们用一个完整的例子来演示如何修复一个元数据块的不正确的checksum值,此元数据块位于磁盘/dev/sda1的AU 0,块2。

注意,遇到任何ASM元数据块的损坏都请联系Oracle的技术支持。

kfed find

kfed的find命令会检查一个AU上的所有块,然后返回每一个块的类型:

find命令一定程度上跟之前的read命令很想象,但是find命令会对指定AU上的所有块进行读取操作。(read只会操作一个块)

Use kfed find command to verify blocks in AU0

接下来我们通过kfed find命令识别AU 0上所有块:

输出的结果如预期,块0为 type 1,块1为type 2,其他的所有块为type 3:

译者注:块0为磁盘头,块1为磁盘的 Free space table,块2-块255为磁盘的Allocation Table,对于Free space table的内容参考本系列的【Free space table】章节,对于Allocation Table的内容参考本系列的【Allocation Table】章节。

如果你看到任何其他别的输出,说明了存在一个毁坏ASM元数据块,这种情况下请联系Oracle的支持寻求帮助。

由于我的AU大小是1MB,因此在这个AU上有256个块,如果你的AU大小为4MB,上面同样的命令会返回1024个块。

我已经强调过,kfed的find命令只能查看ASM元数据块的类型,不能查看实际的元数据块的内容,一些ASM元数据块的损坏其实是块内容的损坏,例如块类型是正确的,但是块的内容已经损坏。这种毁坏只能在ASM读取的时候才能检测到,这种情况下,ORA-15196错误会抛出。

结论

kfed工具是一个低调的,但是非常强大的工具,上面我们只是显示了几个命令,它还有很多其他的命令可以用,例如格式化一个空的ASM文件,检查ASM元数据块的健康性,展示数据结构的大小,以及执行一些鲜为人知的操作。

关于译者

赵恩东,沃趣科技数据库技术工程师,主要参与公司产品实施、测试、维护以及优化。

本文分享自微信公众号 - 沃趣科技(woqutech),作者:赵恩东 译

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-06-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ASM 翻译系列第九弹:高级知识ASM Toolbox

    原作者:Bane Radulovic 译者: 庄培培 审核: 魏兴华 DBGeeK社群联合出品 本篇文章主要介绍几个大家应该熟练掌握的ASM工具。 ...

    沃趣科技
  • ASM 翻译系列第十弹:ASM Internal ASM DISK header

    原作者:Bane Radulovic 译者: 庄培培 审核: 魏兴华 DBGeeK社群联合出品 ASM disk header ASM磁盘头可能是A...

    沃趣科技
  • Oracle ASM神书《拨云见日 解密Oracle ASM内核》出版了

    很高兴《拨云见日,解密Oracle ASM内核》(点击链接可申领书籍哦~)一书终于和大家见面了,我是这本书的组织者和主要译者之一,同时也负责了所有文章的技术审校...

    沃趣科技
  • ASM 翻译系列第九弹:高级知识ASM Toolbox

    原作者:Bane Radulovic 译者: 庄培培 审核: 魏兴华 DBGeeK社群联合出品 本篇文章主要介绍几个大家应该熟练掌握的ASM工具。 ...

    沃趣科技
  • 创建ASM实例及ASM数据库

    文件按分配单元AUs(allocation units)平衡分布在磁盘组的所有磁盘中,ASM使用索引技术来跟踪每个AUs的位置

    Leshami
  • Oracle ASM神书《拨云见日 解密Oracle ASM内核》出版了

    很高兴《拨云见日,解密Oracle ASM内核》(点击链接可申领书籍哦~)一书终于和大家见面了,我是这本书的组织者和主要译者之一,同时也负责了所有文章的技术审校...

    沃趣科技
  • ASM翻译系列第三弹:ASM disk的基础知识

    ASM翻译系列导读: ASM翻译系列第三弹:ASM disk的基础知识:http://geek.csdn.net/news/detail/80926 ASM 翻...

    CSDN技术头条
  • ASM 翻译系列第五弹:高级知识 ASM 元数据概述

    原作者:Bane Radulovic 译者: 赵恩东 审核: 魏兴华 DBGeeK社群联合出品 ASM 元数据概述 ASM的元数据由ASM实例进行维...

    沃趣科技
  • ASM 翻译系列第二十七弹:ASM INTERNAL ASM METADATA BLOCK

    原作者:Bane Radulovic 译者: 邱大龙 审核: 魏兴华 DBGeeK社群联合出品 ASM METADATA BLOCK ASM的元数据...

    沃趣科技
  • LNMP架构之搭建wordpress博客网站

    系统环境版本 [root@db02 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@...

    863987322

扫码关注云+社区

领取腾讯云代金券