ASM里如何确定一个datafile的物理存储位置
Posted: December 12, 2011 | Author: Cui Hua | Filed under: Oracle | Tags: ASM datafile | Leave a comment »谨以这篇文章献给那些想从ASM disk上直接unload出数据的朋友们。
我们来看一个实例:
现在scott.emp在datafile 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 ; 0x
kfdhdb.dsksize: 3067 ; 0x
kfdhdb.pmcnt: 2 ; 0x
kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001
kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002
从结果里我们可以看到,file directory的第1个block在AU2上。
我们来看一下这个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: ; 0x
kfffde[0].xptr.au: 2 ; 0x
kfffde[0].xptr.disk: 0 ; 0x
kfffde[0].xptr.flags: 0 ; 0x
kfffde[0].xptr.chk: 40 ; 0x
kfffde[1].xptr.au: 2 ; 0x
kfffde[1].xptr.disk: 1 ; 0x
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=
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=
kfffde[2].xptr.chk: 42 ; 0x4b7: 0x
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=
kfffde[3].xptr.chk: 119 ; 0x4bf: 0x77
kfffde[4].xptr.au: 93 ; 0x
kfffde[4].xptr.disk: 1 ; 0x
kfffde[4].xptr.flags: 0 ; 0x
kfffde[4].xptr.chk: 118 ; 0x
kfffde[5].xptr.au: 4294967294 ; 0x
……省略显示部分内容
kfffde[39].xptr.disk: 65535 ; 0x5dc: 0xffff
从结果里我们可以知道/dev/raw/raw3只有两个file directory,第一个file directory在AU2上,第二个file directory在AU93上。
在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 ; 0x
kfffdb.usm: ; 0x
kfffde[0].xptr.au: 834 ; 0x
kfffde[0].xptr.disk: 1 ; 0x
kfffde[0].xptr.flags: 0 ; 0x
kfffde[0].xptr.chk: 106 ; 0x
kfffde[1].xptr.au: 834 ; 0x
kfffde[1].xptr.disk: 0 ; 0x
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=
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=
kfffde[2].xptr.chk: 106 ; 0x4b7: 0x
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=
kfffde[3].xptr.chk: 107 ; 0x4bf: 0x6b
kfffde[4].xptr.au: 836 ; 0x
kfffde[4].xptr.disk: 1 ; 0x
kfffde[4].xptr.flags: 0 ; 0x
kfffde[4].xptr.chk: 108 ; 0x
kfffde[5].xptr.au: 836 ; 0x
kfffde[5].xptr.disk: 0 ; 0x4cc: 0x0000
kfffde[5].xptr.flags: 0 ; 0x4ce: L=0 E=0 D=
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=
kfffde[6].xptr.chk: 108 ; 0x4d7: 0x
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=
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=
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=
kfffde[9].xptr.chk: 111 ; 0x4ef: 0x
kfffde[10].xptr.au: 839 ; 0x
kfffde[10].xptr.disk: 0 ; 0x
kfffde[10].xptr.flags: 0 ; 0x
kfffde[10].xptr.chk: 110 ; 0x
kfffde[11].xptr.au: 839 ; 0x
kfffde[11].xptr.disk: 1 ; 0x4fc: 0x0001
kfffde[11].xptr.flags: 0 ; 0x4fe: L=0 E=0 D=
kfffde[11].xptr.chk: 111 ; 0x4ff: 0x
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 ; 0x
至此,datafile 4在/dev/raw/raw3上的物理存储位置我们已经完全清楚了——datafile 4一共占了6个AU,分别是AU834,AU835,AU836,AU837,AU838和AU839。
Recent Comments