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

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

oracle asm 剖析系列(5)–alias directory

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

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

在前面的4篇文章中,我详细剖析了不少内容,这一篇,将为大家分解asm alias元数据结构。 这章内容其实很重要,
因为如果说你需要从asm中抽取数据文件,你起码要知道数据库里面的文件名信息吧?知道了以后,你使用amdu来
进行数据文件的抽取,将事半功倍~~~。

那么asm alias元数据到底在什么地方呢?如下:

既然我们知道alias directory 信息是file 6,那么就可以使用kfed工具来进行读取了。

—首先我们定位到file directory

从上面可以看到,就位于au 2中,而我们的file 6,自然也就在block 6中,如下:

下面继续读取au 26,得到alias_dir,如下:

到这里我们已经定位到asm alias directory的位置了,现在开始详细的剖析alias dir的结构。从上面kfed的结构,我们可以
看到,asm alias directory 的结构主要包括如下3部分:

大家可以看到,其实alias directory的结构也很简单,我这里就用上面的例子,来找到数据库中所有的文件的具体位置:

#### Datafiles:

从entry.refer.number 信息得知,datafile的 对应下一层block号为2,那么datafile alias信息应该就在block 2中,如下:

从上面信息,我们可以知道system 对应是file 256,sysaux 对应file 257,,,,,,,,

#### Controlfile

同理,control的alias信息应该在block 3中:

从上面信息,你可以知道目前数据库的controlfile名称为:Current.260.802678553

##### Redo logfile

同理,找到online logfile的alias 信息:

从上面信息,你可以知道目前该数据库有3组redo,每组1个logfile,如下:
group_1.261.802678553
group_2.262.802678555
group_3.263.802678557

##### Spfile

同理,找到spfile的alias信息如下:

到这里,你知道数据库spfile的全称是spfile.265.802678613。

当你知道数据库文件的alias名称之后,如果你利用amdu从asm diskgroup中抽取某个文件,那么就灰常容易了,
而且如果你后面需要用来恢复,甚至你连文件名都不用改,如下例子抽取上述的spfile:

到最后,加上这一篇文章,已经一共有5篇asm 元数据的文章了,我想大家应该都了解的差不多了。回头会继续分解ACD,COD等结构.

One Response to “oracle asm 剖析系列(5)–alias directory”

  1. 天堂 Says:

    请教下,11g的值怎么获取?

    SQL> SELECT number_kffxp file#, disk_kffxp disk#, COUNT(disk_kffxp) extents

    2 FROM x$kffxp

    3 WHERE group_kffxp = 1

    4 AND disk_kffxp 65534

    5 GROUP BY number_kffxp, disk_kffxp;

    FILE# DISK# EXTENTS

    ———- ———- ———-

    1 0 2

    2 0 1

    3 0 21

    3 1 21

    4 0 4

    4 1 4

    5 0 1

    6 1 1

    8 0 1

    9 1 1

    [grid@oracle11 ~]$ kfed read /dev/asm-data1 aun=2 blkn=6 | grep au | head -5

    kfffde[0].xptr.au: 27 ; 0x4a0: 0x0000001b

    [grid@oracle11 ~]$ kfed read /dev/asm-data1 aun=27 blkn=1 | more

    kfbh.endian: 0 ; 0x000: 0x00

    kfbh.hard: 0 ; 0x001: 0x00

    kfbh.type: 0 ; 0x002: KFBTYP_INVALID

    对au 27 执行kfed,结果返回是错误的 KFBTYP_INVALID。

Leave a Reply

You must be logged in to post a comment.