暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

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

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

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

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 1
1 2 1
2 1 1
3 0 11
3 1 10
3 2 10
3 3 11
4 1 1
4 3 1
5 2 1
6 0 1 ---这就是alias directory
256 0 120
256 1 122
256 2 120
......


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

---首先我们定位到file directory

[oracle@10gasm ~]$ kfed read /dev/sdd aun=2 blkn=1 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 1 ; 0x004: T=0 NUMB=0x1
kfbh.block.obj: 1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check: 3992348944 ; 0x00c: 0xedf66910
kfbh.fcn.base: 2990 ; 0x010: 0x00000bae
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfffdb.node.incarn: 1 ; 0x000: A=1 NUMM=0x0
kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes: 0 ; 0x00c: 0x00000000
kfffdb.lobytes: 2097152 ; 0x010: 0x00200000
kfffdb.xtntcnt: 2 ; 0x014: 0x00000002
kfffdb.xtnteof: 2 ; 0x018: 0x00000002
kfffdb.blkSize: 4096 ; 0x01c: 0x00001000
kfffdb.flags: 65 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=1 A=0
kfffdb.fileType: 15 ; 0x021: 0x0f
kfffdb.dXrs: 17 ; 0x022: SCHE=0x1 NUMB=0x1
kfffdb.iXrs: 17 ; 0x023: SCHE=0x1 NUMB=0x1
kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000
kfffdb.xtntblk: 2 ; 0x03c: 0x0002
kfffdb.break: 60 ; 0x03e: 0x003c
kfffdb.priZn: 0 ; 0x040: 0x00
kfffdb.secZn: 0 ; 0x041: 0x00
kfffdb.ub2spare: 0 ; 0x042: 0x0000
kfffdb.alias[0]: 4294967295 ; 0x044: 0xffffffff
kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth: 0 ; 0x04c: 0x00
kfffdb.strpsz: 0 ; 0x04d: 0x00
kfffdb.usmsz: 0 ; 0x04e: 0x0000
kfffdb.crets.hi: 32977478 ; 0x050: HOUR=0x6 DAYS=0x12 MNTH=0xc YEAR=0x7dc
kfffdb.crets.lo: 2407343104 ; 0x054: USEC=0x0 MSEC=0x349 SECS=0x37 MINS=0x23
kfffdb.modts.hi: 32977478 ; 0x058: HOUR=0x6 DAYS=0x12 MNTH=0xc YEAR=0x7dc
kfffdb.modts.lo: 2407343104 ; 0x05c: USEC=0x0 MSEC=0x349 SECS=0x37 MINS=0x23
kfffdb.spare[0]: 0 ; 0x060: 0x00000000
........
kfffdb.spare[15]: 0 ; 0x09c: 0x00000000
kfffdb.usm: ; 0x0a0: length=0
kfffde[0].xptr.au: 2 ; 0x4a0: 0x00000002
kfffde[0].xptr.disk: 0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0
kfffde[0].xptr.chk: 40 ; 0x4a7: 0x28
kfffde[1].xptr.au: 2 ; 0x4a8: 0x00000002
kfffde[1].xptr.disk: 2 ; 0x4ac: 0x0002
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0
kfffde[1].xptr.chk: 42 ; 0x4af: 0x2a

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

[oracle@10gasm ~]$ kfed read /dev/sdd aun=2 blkn=6 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 6 ; 0x004: T=0 NUMB=0x6
kfbh.block.obj: 1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check: 171534609 ; 0x00c: 0x0a396911
kfbh.fcn.base: 2995 ; 0x010: 0x00000bb3
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfffdb.node.incarn: 1 ; 0x000: A=1 NUMM=0x0
kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes: 0 ; 0x00c: 0x00000000
kfffdb.lobytes: 1048576 ; 0x010: 0x00100000
kfffdb.xtntcnt: 1 ; 0x014: 0x00000001
kfffdb.xtnteof: 1 ; 0x018: 0x00000001
kfffdb.blkSize: 4096 ; 0x01c: 0x00001000
kfffdb.flags: 65 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=1 A=0
kfffdb.fileType: 15 ; 0x021: 0x0f
kfffdb.dXrs: 17 ; 0x022: SCHE=0x1 NUMB=0x1
kfffdb.iXrs: 17 ; 0x023: SCHE=0x1 NUMB=0x1
kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000
kfffdb.xtntblk: 1 ; 0x03c: 0x0001
kfffdb.break: 60 ; 0x03e: 0x003c
kfffdb.priZn: 0 ; 0x040: 0x00
kfffdb.secZn: 0 ; 0x041: 0x00
kfffdb.ub2spare: 0 ; 0x042: 0x0000
kfffdb.alias[0]: 4294967295 ; 0x044: 0xffffffff
kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth: 0 ; 0x04c: 0x00
kfffdb.strpsz: 0 ; 0x04d: 0x00
kfffdb.usmsz: 0 ; 0x04e: 0x0000
kfffdb.crets.hi: 32977478 ; 0x050: HOUR=0x6 DAYS=0x12 MNTH=0xc YEAR=0x7dc
kfffdb.crets.lo: 2407345152 ; 0x054: USEC=0x0 MSEC=0x34b SECS=0x37 MINS=0x23
kfffdb.modts.hi: 32977478 ; 0x058: HOUR=0x6 DAYS=0x12 MNTH=0xc YEAR=0x7dc
kfffdb.modts.lo: 2407345152 ; 0x05c: USEC=0x0 MSEC=0x34b SECS=0x37 MINS=0x23
kfffdb.spare[0]: 0 ; 0x060: 0x00000000
...........
kfffdb.spare[15]: 0 ; 0x09c: 0x00000000
kfffdb.usm: ; 0x0a0: length=0
kfffde[0].xptr.au: 26 ; 0x4a0: 0x0000001a
kfffde[0].xptr.disk: 0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0
kfffde[0].xptr.chk: 48 ; 0x4a7: 0x30
kfffde[1].xptr.au: 4294967295 ; 0x4a8: 0xffffffff
kfffde[1].xptr.disk: 65535 ; 0x4ac: 0xffff
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0
kfffde[1].xptr.chk: 42 ; 0x4af: 0x2a

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

[oracle@10gasm ~]$ kfed read /dev/sdd aun=26 blkn=1 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 11 ; 0x002: KFBTYP_ALIASDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 1 ; 0x004: T=0 NUMB=0x1
kfbh.block.obj: 6 ; 0x008: TYPE=0x0 NUMB=0x6
kfbh.check: 1090379337 ; 0x00c: 0x40fdde49
kfbh.fcn.base: 1995 ; 0x010: 0x000007cb
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn: 1 ; 0x000: A=1 NUMM=0x0
kffdnd.bnode.frlist.number: 4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number: 4294967295 ; 0x00c: 0xffffffff
kffdnd.overfl.incarn: 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number: 0 ; 0x014: 0x00000000
kffdnd.parent.incarn: 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number: 1 ; 0x01c: 0x00000001
kffdnd.fstblk.incarn: 1 ; 0x020: A=1 NUMM=0x0
kfade[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0
kfade[0].entry.hash: 710518681 ; 0x028: 0x2a59a799
kfade[0].entry.refer.number: 2 ; 0x02c: 0x00000002
kfade[0].entry.refer.incarn: 1 ; 0x030: A=1 NUMM=0x0
kfade[0].name: DATAFILE ; 0x034: length=8
kfade[0].fnum: 4294967295 ; 0x064: 0xffffffff
kfade[0].finc: 4294967295 ; 0x068: 0xffffffff
kfade[0].flags: 4 ; 0x06c: U=0 S=0 S=1 U=0 F=0
kfade[0].ub1spare: 0 ; 0x06d: 0x00
kfade[0].ub2spare: 0 ; 0x06e: 0x0000
kfade[1].entry.incarn: 3 ; 0x070: A=1 NUMM=0x1
kfade[1].entry.hash: 4053320104 ; 0x074: 0xf198c1a8
kfade[1].entry.refer.number: 3 ; 0x078: 0x00000003
kfade[1].entry.refer.incarn: 3 ; 0x07c: A=1 NUMM=0x1
kfade[1].name: CONTROLFILE ; 0x080: length=11
kfade[1].fnum: 4294967295 ; 0x0b0: 0xffffffff
kfade[1].finc: 4294967295 ; 0x0b4: 0xffffffff
kfade[1].flags: 4 ; 0x0b8: U=0 S=0 S=1 U=0 F=0
kfade[1].ub1spare: 0 ; 0x0b9: 0x00
kfade[1].ub2spare: 0 ; 0x0ba: 0x0000
kfade[2].entry.incarn: 1 ; 0x0bc: A=1 NUMM=0x0
kfade[2].entry.hash: 2803485489 ; 0x0c0: 0xa719cb31
kfade[2].entry.refer.number: 4 ; 0x0c4: 0x00000004
kfade[2].entry.refer.incarn: 1 ; 0x0c8: A=1 NUMM=0x0
kfade[2].name: ONLINELOG ; 0x0cc: length=9
kfade[2].fnum: 4294967295 ; 0x0fc: 0xffffffff
kfade[2].finc: 4294967295 ; 0x100: 0xffffffff
kfade[2].flags: 4 ; 0x104: U=0 S=0 S=1 U=0 F=0
kfade[2].ub1spare: 0 ; 0x105: 0x00
kfade[2].ub2spare: 0 ; 0x106: 0x0000
kfade[3].entry.incarn: 1 ; 0x108: A=1 NUMM=0x0
kfade[3].entry.hash: 2905271101 ; 0x10c: 0xad2aeb3d
kfade[3].entry.refer.number: 5 ; 0x110: 0x00000005
kfade[3].entry.refer.incarn: 1 ; 0x114: A=1 NUMM=0x0
kfade[3].name: TEMPFILE ; 0x118: length=8
kfade[3].fnum: 4294967295 ; 0x148: 0xffffffff
kfade[3].finc: 4294967295 ; 0x14c: 0xffffffff
kfade[3].flags: 4 ; 0x150: U=0 S=0 S=1 U=0 F=0
kfade[3].ub1spare: 0 ; 0x151: 0x00
kfade[3].ub2spare: 0 ; 0x152: 0x0000
kfade[4].entry.incarn: 1 ; 0x154: A=1 NUMM=0x0
kfade[4].entry.hash: 3261836913 ; 0x158: 0xc26bae71
kfade[4].entry.refer.number: 6 ; 0x15c: 0x00000006
kfade[4].entry.refer.incarn: 1 ; 0x160: A=1 NUMM=0x0
kfade[4].name: PARAMETERFILE ; 0x164: length=13
kfade[4].fnum: 4294967295 ; 0x194: 0xffffffff
kfade[4].finc: 4294967295 ; 0x198: 0xffffffff
kfade[4].flags: 4 ; 0x19c: U=0 S=0 S=1 U=0 F=0
kfade[4].ub1spare: 0 ; 0x19d: 0x00
kfade[4].ub2spare: 0 ; 0x19e: 0x0000
kfade[5].entry.incarn: 1 ; 0x1a0: A=1 NUMM=0x0
kfade[5].entry.hash: 2892671843 ; 0x1a4: 0xac6aab63
kfade[5].entry.refer.number: 4294967295 ; 0x1a8: 0xffffffff
kfade[5].entry.refer.incarn: 0 ; 0x1ac: A=0 NUMM=0x0
kfade[5].name: spfiletest.ora ; 0x1b0: length=14
kfade[5].fnum: 265 ; 0x1e0: 0x00000109
kfade[5].finc: 802678613 ; 0x1e4: 0x2fd7e755
kfade[5].flags: 17 ; 0x1e8: U=1 S=0 S=0 U=0 F=1
kfade[5].ub1spare: 0 ; 0x1e9: 0x00
kfade[5].ub2spare: 0 ; 0x1ea: 0x0000
kfade[6].entry.incarn: 0 ; 0x1ec: A=0 NUMM=0x0
kfade[6].entry.hash: 0 ; 0x1f0: 0x00000000
kfade[6].entry.refer.number: 0 ; 0x1f4: 0x00000000
kfade[6].entry.refer.incarn: 0 ; 0x1f8: A=0 NUMM=0x0
.......

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

1) kfbh ,头部结构,这部分内容在前面几章都描述过,不再累述。
2) kffdnd,从上面输出的信息,我们不难猜测,这部分信息其实就是用来定位和描述block在目录树中的具体位置的。
跟前面描述disk directory的kffdnd结构是一样的,所以这里也不多说。

3) kfade,从上面输出的信息,可以简单的将该结构描述为如下:

kfade[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0
kfade[0].entry.hash: 710518681 ; 0x028: 0x2a59a799
kfade[0].entry.refer.number: 2 ; 0x02c: 0x00000002 ---指向下一层的block号
kfade[0].entry.refer.incarn: 1 ; 0x030: A=1 NUMM=0x0 ---entry部分内容,表示分支号,hash值和指向下一层block的指针等信息,这部分不需要过多关注

kfade[0].name: DATAFILE ; 0x034: length=8 ---表示对应的alias元数据名称
kfade[0].fnum: 4294967295 ; 0x064: 0xffffffff ---对应文件号,这里为最大值,表示无意义
kfade[0].finc: 4294967295 ; 0x068: 0xffffffff ---文件分支号
kfade[0].flags: 4 ; 0x06c: U=0 S=0 S=1 U=0 F=0 ---标志信息

该属性有如下的值:
O - File is original, not snapshot
S - File is striped
S - Strict allocation policy
D - File is damaged
C - File creation is committed
I - File has empty indirect block
R - File has known at-risk value
A - The at-risk value itsefl

kfade[0].ub1spare: 0 ; 0x06d: 0x00 --这部分信息无意义
kfade[0].ub2spare: 0 ; 0x06e: 0x0000 --这部分信息无意义

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


#### Datafiles:

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

[oracle@10gasm ~]$ kfed read /dev/sdd aun=26 blkn=2 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 11 ; 0x002: KFBTYP_ALIASDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 2 ; 0x004: T=0 NUMB=0x2
kfbh.block.obj: 6 ; 0x008: TYPE=0x0 NUMB=0x6
kfbh.check: 1191105834 ; 0x00c: 0x46fed52a
kfbh.fcn.base: 2596 ; 0x010: 0x00000a24
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn: 1 ; 0x000: A=1 NUMM=0x0
kffdnd.bnode.frlist.number: 4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number: 4294967295 ; 0x00c: 0xffffffff
kffdnd.overfl.incarn: 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number: 1 ; 0x014: 0x00000001
kffdnd.parent.incarn: 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number: 2 ; 0x01c: 0x00000002
kffdnd.fstblk.incarn: 1 ; 0x020: A=1 NUMM=0x0
kfade[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0
kfade[0].entry.hash: 1251413818 ; 0x028: 0x4a970f3a
kfade[0].entry.refer.number: 4294967295 ; 0x02c: 0xffffffff
kfade[0].entry.refer.incarn: 0 ; 0x030: A=0 NUMM=0x0
kfade[0].name: SYSTEM ; 0x034: length=6
kfade[0].fnum: 256 ; 0x064: 0x00000100
kfade[0].finc: 802678453 ; 0x068: 0x2fd7e6b5
kfade[0].flags: 18 ; 0x06c: U=0 S=1 S=0 U=0 F=1
kfade[0].ub1spare: 0 ; 0x06d: 0x00
kfade[0].ub2spare: 0 ; 0x06e: 0x0000
kfade[1].entry.incarn: 1 ; 0x070: A=1 NUMM=0x0
kfade[1].entry.hash: 1356948434 ; 0x074: 0x50e163d2
kfade[1].entry.refer.number: 4294967295 ; 0x078: 0xffffffff
kfade[1].entry.refer.incarn: 0 ; 0x07c: A=0 NUMM=0x0
kfade[1].name: SYSAUX ; 0x080: length=6
kfade[1].fnum: 257 ; 0x0b0: 0x00000101
kfade[1].finc: 802678455 ; 0x0b4: 0x2fd7e6b7
kfade[1].flags: 18 ; 0x0b8: U=0 S=1 S=0 U=0 F=1
kfade[1].ub1spare: 0 ; 0x0b9: 0x00
kfade[1].ub2spare: 0 ; 0x0ba: 0x0000
kfade[2].entry.incarn: 1 ; 0x0bc: A=1 NUMM=0x0
kfade[2].entry.hash: 495364582 ; 0x0c0: 0x1d86a9e6
kfade[2].entry.refer.number: 4294967295 ; 0x0c4: 0xffffffff
kfade[2].entry.refer.incarn: 0 ; 0x0c8: A=0 NUMM=0x0
kfade[2].name: UNDOTBS1 ; 0x0cc: length=8
kfade[2].fnum: 258 ; 0x0fc: 0x00000102
kfade[2].finc: 802678457 ; 0x100: 0x2fd7e6b9
kfade[2].flags: 18 ; 0x104: U=0 S=1 S=0 U=0 F=1
kfade[2].ub1spare: 0 ; 0x105: 0x00
kfade[2].ub2spare: 0 ; 0x106: 0x0000
kfade[3].entry.incarn: 1 ; 0x108: A=1 NUMM=0x0
kfade[3].entry.hash: 178167512 ; 0x10c: 0x0a9e9ed8
kfade[3].entry.refer.number: 4294967295 ; 0x110: 0xffffffff
kfade[3].entry.refer.incarn: 0 ; 0x114: A=0 NUMM=0x0
kfade[3].name: USERS ; 0x118: length=5
kfade[3].fnum: 259 ; 0x148: 0x00000103
kfade[3].finc: 802678457 ; 0x14c: 0x2fd7e6b9
kfade[3].flags: 18 ; 0x150: U=0 S=1 S=0 U=0 F=1
kfade[3].ub1spare: 0 ; 0x151: 0x00
kfade[3].ub2spare: 0 ; 0x152: 0x0000
kfade[4].entry.incarn: 1 ; 0x154: A=1 NUMM=0x0
kfade[4].entry.hash: 3869160501 ; 0x158: 0xe69eb435
kfade[4].entry.refer.number: 4294967295 ; 0x15c: 0xffffffff
kfade[4].entry.refer.incarn: 0 ; 0x160: A=0 NUMM=0x0
kfade[4].name: ROGER ; 0x164: length=5
kfade[4].fnum: 266 ; 0x194: 0x0000010a
kfade[4].finc: 804210969 ; 0x198: 0x2fef4919
kfade[4].flags: 18 ; 0x19c: U=0 S=1 S=0 U=0 F=1
kfade[4].ub1spare: 0 ; 0x19d: 0x00
kfade[4].ub2spare: 0 ; 0x19e: 0x0000
kfade[5].entry.incarn: 0 ; 0x1a0: A=0 NUMM=0x0
kfade[5].entry.hash: 0 ; 0x1a4: 0x00000000
kfade[5].entry.refer.number: 0 ; 0x1a8: 0x00000000
kfade[5].entry.refer.incarn: 0 ; 0x1ac: A=0 NUMM=0x0
........

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

#### Controlfile

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

[oracle@10gasm ~]$ kfed read /dev/sdd aun=26 blkn=3 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 11 ; 0x002: KFBTYP_ALIASDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 3 ; 0x004: T=0 NUMB=0x3
kfbh.block.obj: 6 ; 0x008: TYPE=0x0 NUMB=0x6
kfbh.check: 363349019 ; 0x00c: 0x15a8441b
kfbh.fcn.base: 1683 ; 0x010: 0x00000693
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn: 3 ; 0x000: A=1 NUMM=0x1
kffdnd.bnode.frlist.number: 4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number: 4294967295 ; 0x00c: 0xffffffff
kffdnd.overfl.incarn: 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number: 1 ; 0x014: 0x00000001
kffdnd.parent.incarn: 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number: 3 ; 0x01c: 0x00000003
kffdnd.fstblk.incarn: 3 ; 0x020: A=1 NUMM=0x1
kfade[0].entry.incarn: 3 ; 0x024: A=1 NUMM=0x1
kfade[0].entry.hash: 3062743642 ; 0x028: 0xb68dc25a
kfade[0].entry.refer.number: 4294967295 ; 0x02c: 0xffffffff
kfade[0].entry.refer.incarn: 0 ; 0x030: A=0 NUMM=0x0
kfade[0].name: Current ; 0x034: length=7
kfade[0].fnum: 260 ; 0x064: 0x00000104
kfade[0].finc: 802678553 ; 0x068: 0x2fd7e719
kfade[0].flags: 18 ; 0x06c: U=0 S=1 S=0 U=0 F=1
kfade[0].ub1spare: 0 ; 0x06d: 0x00
kfade[0].ub2spare: 0 ; 0x06e: 0x0000
........


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

##### Redo logfile

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

[oracle@10gasm ~]$ kfed read /dev/sdd aun=26 blkn=4 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 11 ; 0x002: KFBTYP_ALIASDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 4 ; 0x004: T=0 NUMB=0x4
kfbh.block.obj: 6 ; 0x008: TYPE=0x0 NUMB=0x6
kfbh.check: 1826975500 ; 0x00c: 0x6ce56f0c
kfbh.fcn.base: 1887 ; 0x010: 0x0000075f
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn: 1 ; 0x000: A=1 NUMM=0x0
kffdnd.bnode.frlist.number: 4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number: 4294967295 ; 0x00c: 0xffffffff
kffdnd.overfl.incarn: 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number: 1 ; 0x014: 0x00000001
kffdnd.parent.incarn: 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number: 4 ; 0x01c: 0x00000004
kffdnd.fstblk.incarn: 1 ; 0x020: A=1 NUMM=0x0
kfade[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0
kfade[0].entry.hash: 2031796096 ; 0x028: 0x791abf80
kfade[0].entry.refer.number: 4294967295 ; 0x02c: 0xffffffff
kfade[0].entry.refer.incarn: 0 ; 0x030: A=0 NUMM=0x0
kfade[0].name: group_1 ; 0x034: length=7
kfade[0].fnum: 261 ; 0x064: 0x00000105
kfade[0].finc: 802678553 ; 0x068: 0x2fd7e719
kfade[0].flags: 18 ; 0x06c: U=0 S=1 S=0 U=0 F=1
kfade[0].ub1spare: 0 ; 0x06d: 0x00
kfade[0].ub2spare: 0 ; 0x06e: 0x0000
kfade[1].entry.incarn: 1 ; 0x070: A=1 NUMM=0x0
kfade[1].entry.hash: 392836082 ; 0x074: 0x176a33f2
kfade[1].entry.refer.number: 4294967295 ; 0x078: 0xffffffff
kfade[1].entry.refer.incarn: 0 ; 0x07c: A=0 NUMM=0x0
kfade[1].name: group_2 ; 0x080: length=7
kfade[1].fnum: 262 ; 0x0b0: 0x00000106
kfade[1].finc: 802678555 ; 0x0b4: 0x2fd7e71b
kfade[1].flags: 18 ; 0x0b8: U=0 S=1 S=0 U=0 F=1
kfade[1].ub1spare: 0 ; 0x0b9: 0x00
kfade[1].ub2spare: 0 ; 0x0ba: 0x0000
kfade[2].entry.incarn: 1 ; 0x0bc: A=1 NUMM=0x0
kfade[2].entry.hash: 2800308934 ; 0x0c0: 0xa6e952c6
kfade[2].entry.refer.number: 4294967295 ; 0x0c4: 0xffffffff
kfade[2].entry.refer.incarn: 0 ; 0x0c8: A=0 NUMM=0x0
kfade[2].name: group_3 ; 0x0cc: length=7
kfade[2].fnum: 263 ; 0x0fc: 0x00000107
kfade[2].finc: 802678557 ; 0x100: 0x2fd7e71d
kfade[2].flags: 18 ; 0x104: U=0 S=1 S=0 U=0 F=1
kfade[2].ub1spare: 0 ; 0x105: 0x00
kfade[2].ub2spare: 0 ; 0x106: 0x0000
.........

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

##### Spfile

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

[oracle@10gasm ~]$ kfed read /dev/sdd aun=26 blkn=6 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 11 ; 0x002: KFBTYP_ALIASDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 6 ; 0x004: T=0 NUMB=0x6
kfbh.block.obj: 6 ; 0x008: TYPE=0x0 NUMB=0x6
kfbh.check: 3446176149 ; 0x00c: 0xcd687995
kfbh.fcn.base: 1994 ; 0x010: 0x000007ca
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn: 1 ; 0x000: A=1 NUMM=0x0
kffdnd.bnode.frlist.number: 4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number: 4294967295 ; 0x00c: 0xffffffff
kffdnd.overfl.incarn: 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number: 1 ; 0x014: 0x00000001
kffdnd.parent.incarn: 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number: 6 ; 0x01c: 0x00000006
kffdnd.fstblk.incarn: 1 ; 0x020: A=1 NUMM=0x0
kfade[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0
kfade[0].entry.hash: 1965945079 ; 0x028: 0x752df0f7
kfade[0].entry.refer.number: 4294967295 ; 0x02c: 0xffffffff
kfade[0].entry.refer.incarn: 0 ; 0x030: A=0 NUMM=0x0
kfade[0].name: spfile ; 0x034: length=6
kfade[0].fnum: 265 ; 0x064: 0x00000109
kfade[0].finc: 802678613 ; 0x068: 0x2fd7e755
kfade[0].flags: 18 ; 0x06c: U=0 S=1 S=0 U=0 F=1
kfade[0].ub1spare: 0 ; 0x06d: 0x00
kfade[0].ub2spare: 0 ; 0x06e: 0x0000
........

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

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

[oracle@10gasm ~]$ amdu -dis '/dev/sd*' -extract data1.265 -output spfile.265.802678613
amdu_2013_01_14_05_35_42/
[oracle@10gasm ~]$ strings spfile.265.802678613
test.__db_cache_size=188743680
test.__java_pool_size=4194304
test.__large_pool_size=4194304
test.__shared_pool_size=83886080
test.__streams_pool_size=0
*.audit_file_dest='/home/oracle/admin/test/adump'
*.background_dump_dest='/home/oracle/admin/test/bdump'
*.compatible='10.2.0.1.0'
*.control_files='+DATA1/test/controlfile/current.260.802678553'
*.core_dump_dest='/home/oracle/admin/test/cdump'
*.db_block_size=8192
*.db_create_file_dest='+DATA1'
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='test'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/oracle/admin/test/udump'


到最后,加上这一篇文章,已经一共有5篇asm 元数据的文章了,我想大家应该都了解的差不多了。回头会继续分解ACD,COD等结构.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论