如何在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