oracle asm 剖析系列(5)–alias directory
本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客
在前面的4篇文章中,我详细剖析了不少内容,这一篇,将为大家分解asm alias元数据结构。 这章内容其实很重要,
因为如果说你需要从asm中抽取数据文件,你起码要知道数据库里面的文件名信息吧?知道了以后,你使用amdu来
进行数据文件的抽取,将事半功倍~~~。
那么asm alias元数据到底在什么地方呢?如下:
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  | 
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
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56  | 
[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中,如下:
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56  | 
[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,如下:
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86  | 
[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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28  | 
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中,如下:
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76  | 
[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中:
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32  | 
[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 信息:
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52  | 
[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信息如下:
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32  | 
[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:
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28  | 
[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等结构.


One Response to “oracle asm 剖析系列(5)–alias directory”
请教下,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.