ASM里如何确定一个datafile的物理存储位置

谨以这篇文章献给那些想从ASM disk上直接unload出数据的朋友们

 

我们来看一个实例:

现在scott.empdatafile 4中,我现在要确定datafile 4的物理存储位置。

oracle@rac1 ~]$ crs_stat -t

Name           Type           Target    State     Host       

————————————————————

ora….TEST.cs application    OFFLINE   OFFLINE              

ora….ua1.srv application    OFFLINE   OFFLINE              

ora….a1.inst application    OFFLINE   OFFLINE              

ora….a2.inst application    OFFLINE   OFFLINE              

ora.cuihua.db  application    OFFLINE   OFFLINE              

ora….SM1.asm application    OFFLINE   OFFLINE              

ora….C1.lsnr application    OFFLINE   OFFLINE              

ora.rac1.gsd   application    OFFLINE   OFFLINE              

ora.rac1.ons   application    OFFLINE   OFFLINE              

ora.rac1.vip   application    OFFLINE   OFFLINE              

ora….SM2.asm application    OFFLINE   OFFLINE              

ora….C2.lsnr application    OFFLINE   OFFLINE              

ora.rac2.gsd   application    OFFLINE   OFFLINE              

ora.rac2.ons   application    OFFLINE   OFFLINE              

ora.rac2.vip   application    OFFLINE   OFFLINE

 

先找到file directory的物理位置:

[oracle@rac1 ~]$ kfed read /dev/raw/raw3 aunum=0 blknum=0

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD

……省略显示部分内容

kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000

kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000

kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80

kfdhdb.dsksize:                    3067 ; 0x0c4: 0x00000bfb

kfdhdb.pmcnt:                         2 ; 0x0c8: 0x00000002

kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001

kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002

kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002

从结果里我们可以看到,file directory的第1blockAU2上。

 

我们来看一下这个block

[oracle@rac1 ~]$ kfed read /dev/raw/raw3 aunum=2 blknum=1

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR

……省略显示部分内容

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:                  1 ; 0x4ac: 0x0001

kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0

kfffde[1].xptr.chk:                  41 ; 0x4af: 0x29

kfffde[2].xptr.au:           4294967294 ; 0x4b0: 0xfffffffe

kfffde[2].xptr.disk:              65534 ; 0x4b4: 0xfffe

kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 C=0 S=0

kfffde[2].xptr.chk:                  42 ; 0x4b7: 0x2a

kfffde[3].xptr.au:                   93 ; 0x4b8: 0x0000005d

kfffde[3].xptr.disk:                  0 ; 0x4bc: 0x0000

kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 C=0 S=0

kfffde[3].xptr.chk:                 119 ; 0x4bf: 0x77

kfffde[4].xptr.au:                   93 ; 0x4c0: 0x0000005d

kfffde[4].xptr.disk:                  1 ; 0x4c4: 0x0001

kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 C=0 S=0

kfffde[4].xptr.chk:                 118 ; 0x4c7: 0x76

kfffde[5].xptr.au:           4294967294 ; 0x4c8: 0xfffffffe

……省略显示部分内容

kfffde[39].xptr.disk:             65535 ; 0x5dc: 0xffff

从结果里我们可以知道/dev/raw/raw3只有两个file directory,第一个file directoryAU2上,第二个file directoryAU93上。

 

ASM里,第一个file directory是留给ASM metadata file的,所以这里我们要找的datafile 4一定在第二个file directory里,即AU93上。

 

对于第二个file directory而言,datafile 1就在block 0里,datafile 2就在block 1里,依次类推,所以我们要找的datafile 4一定在block 3里,我们来看一下这个block

[oracle@rac1 ~]$ kfed read /dev/raw/raw3 aunum=93 blknum=3

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR

kfbh.datfmt:                          1 ; 0x003: 0x01

kfbh.block.blk:                     259 ; 0x004: T=0 NUMB=0x103

kfbh.block.obj:                       1 ; 0x008: TYPE=0x0 NUMB=0x1

……省略显示部分内容

kfffdb.spare[15]:                     0 ; 0x09c: 0x00000000

kfffdb.usm:                             ; 0x0a0: length=0

kfffde[0].xptr.au:                  834 ; 0x4a0: 0x00000342

kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001

kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0

kfffde[0].xptr.chk:                 106 ; 0x4a7: 0x6a

kfffde[1].xptr.au:                  834 ; 0x4a8: 0x00000342

kfffde[1].xptr.disk:                  0 ; 0x4ac: 0x0000

kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0

kfffde[1].xptr.chk:                 107 ; 0x4af: 0x6b

kfffde[2].xptr.au:                  835 ; 0x4b0: 0x00000343

kfffde[2].xptr.disk:                  0 ; 0x4b4: 0x0000

kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 C=0 S=0

kfffde[2].xptr.chk:                 106 ; 0x4b7: 0x6a

kfffde[3].xptr.au:                  835 ; 0x4b8: 0x00000343

kfffde[3].xptr.disk:                  1 ; 0x4bc: 0x0001

kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 C=0 S=0

kfffde[3].xptr.chk:                 107 ; 0x4bf: 0x6b

kfffde[4].xptr.au:                  836 ; 0x4c0: 0x00000344

kfffde[4].xptr.disk:                  1 ; 0x4c4: 0x0001

kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 C=0 S=0

kfffde[4].xptr.chk:                 108 ; 0x4c7: 0x6c

kfffde[5].xptr.au:                  836 ; 0x4c8: 0x00000344

kfffde[5].xptr.disk:                  0 ; 0x4cc: 0x0000

kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 C=0 S=0

kfffde[5].xptr.chk:                 109 ; 0x4cf: 0x6d

kfffde[6].xptr.au:                  837 ; 0x4d0: 0x00000345

kfffde[6].xptr.disk:                  0 ; 0x4d4: 0x0000

kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 C=0 S=0

kfffde[6].xptr.chk:                 108 ; 0x4d7: 0x6c

kfffde[7].xptr.au:                  837 ; 0x4d8: 0x00000345

kfffde[7].xptr.disk:                  1 ; 0x4dc: 0x0001

kfffde[7].xptr.flags:                 0 ; 0x4de: L=0 E=0 D=0 C=0 S=0

kfffde[7].xptr.chk:                 109 ; 0x4df: 0x6d

kfffde[8].xptr.au:                  838 ; 0x4e0: 0x00000346

kfffde[8].xptr.disk:                  1 ; 0x4e4: 0x0001

kfffde[8].xptr.flags:                 0 ; 0x4e6: L=0 E=0 D=0 C=0 S=0

kfffde[8].xptr.chk:                 110 ; 0x4e7: 0x6e

kfffde[9].xptr.au:                  838 ; 0x4e8: 0x00000346

kfffde[9].xptr.disk:                  0 ; 0x4ec: 0x0000

kfffde[9].xptr.flags:                 0 ; 0x4ee: L=0 E=0 D=0 C=0 S=0

kfffde[9].xptr.chk:                 111 ; 0x4ef: 0x6f

kfffde[10].xptr.au:                 839 ; 0x4f0: 0x00000347

kfffde[10].xptr.disk:                 0 ; 0x4f4: 0x0000

kfffde[10].xptr.flags:                0 ; 0x4f6: L=0 E=0 D=0 C=0 S=0

kfffde[10].xptr.chk:                110 ; 0x4f7: 0x6e

kfffde[11].xptr.au:                 839 ; 0x4f8: 0x00000347

kfffde[11].xptr.disk:                 1 ; 0x4fc: 0x0001

kfffde[11].xptr.flags:                0 ; 0x4fe: L=0 E=0 D=0 C=0 S=0

kfffde[11].xptr.chk:                111 ; 0x4ff: 0x6f

kfffde[12].xptr.au:          4294967295 ; 0x500: 0xffffffff

kfffde[12].xptr.disk:             65535 ; 0x504: 0xffff

……省略显示部分内容

kfffde[23].xptr.au:          4294967295 ; 0x558: 0xffffffff

kfffde[23].xptr.disk:             65535 ; 0x55c: 0xffff

 

至此,datafile 4/dev/raw/raw3上的物理存储位置我们已经完全清楚了——datafile 4一共占了6AU,分别是AU834AU835AU836AU837AU838AU839



Leave a Reply

Your email address will not be published. Required fields are marked *