love wife love life —Roger的Oracle/MySQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL数据恢复、性能优化、迁移升级、紧急救援等服务

oracle asm 剖析系列(4) –file directory

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL数据恢复博客

本文链接地址: oracle asm 剖析系列(4) –file directory

在前面几篇文章中我分别详细剖析了disk header、free space table、pst以及disk directory等元数据结构,这一篇文章
将重点剖析另外一个重要的asm元数据结构,那就是file directory,这是跟我们database datafile关联最为紧密的一个
asm元数据结构,首先我们还是来使用kfed工具进行读取file directory的信息。

通过读取disk header,可以发现file directory信息位于第2个AU中。
下面继续使用该工具读取相关信息,如下:

从上面数据可以看出,file directory元数据结构分为3个部分:

1) kfbh ,头部信息,这部分信息跟前面其他几篇文章讲述的内容类似,这里不重复累述。
2) kfffdb、主要包括文件分配信息。下面针对部分关键信息进行说明:

3) kfffde,这里主要是数据文件所分配au的具体信息,如下:

到这里,基本上file directory的结构信息,我们描述的比较清楚了,大家可以发现,这其实非常简单。那么,到最后自然
也就出现了一个问题,比如我这里的某个datafile,存于asm中,我怎么知道它所占据的au位置呢?具体在asm diskgroup中的
什么地方呢?在这里,我用一个datafile来进行展示:

关于该试图的一些说明,网上也有很多文章,我这里不过多描述,我这里主要是想让大家明白,假如我们的asm 磁盘组都无法mount,
那么你怎么去定位呢?因为这是你无法使用该x$试图进行查询。其实很简单,前面我已经详细描述了file directory的结构,我们
我们轻易的定位到数据库中任何一个datafile的具体位置。

我这里仍然以上面的datafile 5为例,首先通过该datafile的名称,我们知道该datafile对应的asm 的文件号是266. 如果你无法从
数据库实例v$datafile或dba_data_files等试图得知,那么你可以查询v$asm_alias试图,如下:

当然,如果当你的asm磁盘组都无法mount时,你可以直接从asm alias元数据中获得相关的asm文件号,这也是下一篇文章将要描述的内容。
回到主题上来,当我们知道该datafile 5对应的asm文件号是266后,那么下一步怎么办呢?

我们在前面已经知道file directory信息存在在第2个au中,而我们也知道第2个au是从256开始,那么我们的266文件的信息就应该
在266-256 这个block中,换句话讲,file 266的au分配信息应该就在au 2,block 10中,我们来看看是不是这样:

到这里,你甚至通过dd命令将这21个au copy出来,组合在一起。在前面我也写过类似的文章。

最后大家看到这里,或许会有个疑问,那就是我这里的datafile 5明明是20m,为什么看到的au分配却是21个呢?
怎么多了1m ?

这其实是因为datafile header的原因,由于数据文件头也需要占据1个block,我这里是8k,而asm最小的分配单位是au,
也就是必须再多分配1个au出来,所以你看到的就是21个au,即21m.

补充:那么在11g中,不同au的情况下,如何找到某个数据文件的具体au分配位置呢?

首先定位到disk file directory:

第一个au link里面的信息是存放元数据,那么该datafile的au分配信息应该就在第2个link au里面,而我这里
au大小是8m,而asm block是4096,那么也就是说每个au可以存放2048个block,所以我直接读取第256个block:

可以看到,我们的datafile 是30m,这里asm分配了4个au,每个au 8m,即是32m.

3 Responses to “oracle asm 剖析系列(4) –file directory”

  1. oracle asm rac 10.2.0.4 linux erp recover | love wife & love life —Roger 提供oracle技术支持服务 Says:

    […] 2.  关于file directory,可以参考:http://www.killdb.com/2013/01/13/oracle-asm-%e5%89%96%e6%9e%90%e7%b3%bb%e5%88%974-file-directory.htm… […]

  2. 一次TB级ERP(ASM RAC)库的恢复 - 数据库 - 开发者 Says:

    […] 2.  关于file directory,可以参考:http://www.killdb.com/2013/01/13/oracle-asm-%e5%89%96%e6%9e%90%e7%b3%bb%e5%88%974-file-directory.htm… […]

  3. 孙海龙 Says:

    关于如何定位file directory使用默认au大小也就是1M的时候确实实在2号au的block 1上,但是
    对于自定义AU大小file header中的f1..也还是2,但是这个块类型却不是KFBTYP_FILEDIR了,就不在这个位置了,比如4M的是在AU 8 BLOCK 1上,不知道是否还有其他结构指针,我测试是在AIX 6.1 ORACLE 10205上测试的。

Leave a Reply

You must be logged in to post a comment.