日期:2014-05-16  浏览次数:20804 次

如何在ASM中定位文件的分布
我们将尝试找出文件的AU分布,然后根据AU分布定位磁盘所在的位置,设置有可能利用操作系统层面的工具拷贝ASM其中的数据出来。我将使用两个例子来说明如何查看au分布。
0. spfile
查看当前的spfile:
sys@GT11G> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA01/gt11g/spfilegt11g.ora

查找对应的DISKGROUP信息:
+ASM> select name,group_number,file_number from v$asm_alias where lower(name)='spfilegt11g.ora';

NAME                 GROUP_NUMBER FILE_NUMBER
-------------------- ------------ -----------
spfileGT11G.ora                 1         265

+ASM> select name,group_number from v$asm_diskgroup;

NAME     GROUP_NUMBER
-------- ------------
DATA01              1
FRA                 2
SYSDG               3

通过视图查看对应的AU分布:
+ASM> select group_kffxp,number_kffxp,pxn_kffxp,xnum_kffxp,disk_kffxp from x$kffxp where group_kffxp=1 and number_kffxp=265;

GROUP_KFFXP NUMBER_KFFXP  PXN_KFFXP XNUM_KFFXP DISK_KFFXP
----------- ------------ ---------- ---------- ----------
          1          265          0          0          1
上述查询显示spfile文件在磁盘组1的0号磁盘上只占用了1个AU,那么我们可以直接通过kfed工具来查看下磁盘上的分配属性。
首先我们要找出对应的磁盘信息,注意磁盘序号是从0开始的:
+ASM> select group_number,disk_number,path from v$asm_disk where group_number=1 and disk_number=0;

GROUP_NUMBER DISK_NUMBER PATH
------------ ----------- --------------------
           1           0 /dev/asm11g-f
文件的FILE_NUMBER=256,我们应该从au2这里面查找,也即asm元数据之后的第1个文件,而blkn0是保留位置,因此我们从blkn1开始查找:
[grid@gtser2 ~]$ kfed read /dev/asm11g-f 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: blk=1
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:  &n