All about Oracle FED and KFOD tools

来源:互联网 发布:java中时间格式化 编辑:程序博客网 时间:2024/05/01 04:24
Oracle ASM是个封装的磁盘管理工具,ASM由于各种故障,非常容易导致disk header block损坏,对它的备份和回复显的尤为重要。所以我们需要对ASM 有充分的认识,否则ASM 出现问题就会非常棘手,KFED 和KFOD 两个命令可以帮助我们了解ASM。

KFED(Kernel Files Editor) 说明
KFED是ORACLE 10gR2 自带的一个工具,但是和BBED 命令一样,需要编译过以后才能使用。

编译
KFED是ASM自带的一个未公开的工具,但是和BBED 命令一样,需要编译过以后才能使用。它可以读取和修改ASM磁盘的元数据,重要的是,它在ASM无法启动的时候也可以工作,对修复一些关键错误非常有用:
[oracle@node1 lib]$ pwd
/u01/app/oracle/product/11.2.0/db_1/rdbms/lib
[oracle@node1 lib]$ make -f ins_rdbms.mk ikfed

Linking KFED utility (kfed)
rm -f /u01/app/oracle/product/11.2.0/db_1/rdbms/lib/kfed
gcc -o /u01/app/oracle/product/11.2.0/db_1/rdbms/lib/kfed -m32 -L/u01/app/oracle/product/11.2.0/db_1/rdbms/lib/ -L/u01/app/oracle/product/11.2.0/db_1/lib/ -L/u01/app/oracle/product/11.2.0/db_1/lib/stubs/ -L/u01/app/oracle/product/11.2.0/db_1/lib/ -lirc -lipgo   /u01/app/oracle/product/11.2.0/db_1/lib/s0main.o /u01/app/oracle/product/11.2.0/db_1/rdbms/lib/sskfeded.o /u01/app/oracle/product/11.2.0/db_1/rdbms/lib/skfedpt.o -ldbtools11 -lasmclnt11 -lcommon11 -lcell11 -lskgxp11 -lhasgen11 -lskgxn2 -lnnz11 -lzt11 -lxml11 -locr11 -locrb11 -locrutl11 -lhasgen11 -lskgxn2 -lnnz11 -lzt11 -lxml11 -lasmclnt11 -lcommon11 -lcell11 -lskgxp11 -lgeneric11  -lcommon11 -lgeneric11  -lclntsh  `cat /u01/app/oracle/product/11.2.0/db_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/app/oracle/product/11.2.0/db_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lclient11 -lnnetd11  -lvsn11 -lcommon11 -lgeneric11 -lmm -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /u01/app/oracle/product/11.2.0/db_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/app/oracle/product/11.2.0/db_1/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lclient11 -lnnetd11  -lvsn11 -lcommon11 -lgeneric11   -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11 -lnnetd11  -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11   `cat /u01/app/oracle/product/11.2.0/db_1/lib/sysliblist` -Wl,-rpath,/u01/app/oracle/product/11.2.0/db_1/lib -lm    `cat /u01/app/oracle/product/11.2.0/db_1/lib/sysliblist` -ldl -lm   -L/u01/app/oracle/product/11.2.0/db_1/lib
test ! -f /u01/app/oracle/product/11.2.0/db_1/bin/kfed ||\
           mv -f /u01/app/oracle/product/11.2.0/db_1/bin/kfed /u01/app/oracle/product/11.2.0/db_1/bin/kfedO
mv /u01/app/oracle/product/11.2.0/db_1/rdbms/lib/kfed /u01/app/oracle/product/11.2.0/db_1/bin/kfed
chmod 751 /u01/app/oracle/product/11.2.0/db_1/bin/kfed
ikfed: $(KFED)
        -$(NOT_EXIST) $(ORACLE_HOME)/bin/kfed ||\
           mv -f $(ORACLE_HOME)/bin/kfed $(ORACLE_HOME)/bin/kfedO
        -mv $(ORACLE_HOME)/rdbms/lib/kfed $(ORACLE_HOME)/bin/kfed
        -chmod 751 $(ORACLE_HOME)/bin/kfed

[oracle@node1 ~]$ kfed
as/mlib         ASM Library [asmlib='lib']
aun/um          AU number to examine or update [AUNUM=number]
aus/z           Allocation Unit size in bytes [AUSZ=number]
blkn/um         Block number to examine or update [BLKNUM=number]
blks/z          Metadata block size in bytes [BLKSZ=number]
ch/ksum         Update checksum before each write [CHKSUM=YES/NO]
cn/t            Count of AUs to process [CNT=number]
d/ev            ASM device to examine or update [DEV=string]
o/p             KFED operation type [OP=READ/WRITE/MERGE/REPAIR/NEW/FORM/FIND/STRUCT]
p/rovnm         Name for provisioning purposes [PROVNM=string]
s/eek           AU number to seek to [SEEK=number]
te/xt           File name for translated block text [TEXT=string]
ty/pe           ASM metadata block type number [TYPE=number]

[root@node1 ~]# chmod 666 /dev/sdd

[oracle@node1 lib]$ kfed read /dev/sdd
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD    --> Valid ASM disk should have kfbh.type=KFBTYP_DISKHEAD (ASM disk header).
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       0 ; 0x004: T=0 NUMB=0x0
kfbh.block.obj:              2147483648 ; 0x008: TYPE=0x8 NUMB=0x0
kfbh.check:                  1156705788 ; 0x00c: 0x44f1edfc
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr:         ORCLDISK ; 0x000: length=8    --> 磁盘卷名
kfdhdb.driver.reserved[0]:            0 ; 0x008: 0x00000000
kfdhdb.driver.reserved[1]:            0 ; 0x00c: 0x00000000
kfdhdb.driver.reserved[2]:            0 ; 0x010: 0x00000000
kfdhdb.driver.reserved[3]:            0 ; 0x014: 0x00000000
kfdhdb.driver.reserved[4]:            0 ; 0x018: 0x00000000
kfdhdb.driver.reserved[5]:            0 ; 0x01c: 0x00000000
kfdhdb.compat:                186646528 ; 0x020: 0x0b200000
kfdhdb.dsknum:                        0 ; 0x024: 0x0000
kfdhdb.grptyp:                        1 ; 0x026: KFDGTP_EXTERNAL    --> This indicates Redundancy for Group.Check TYPE in query output.
kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER    --> This indicates Disk Header status. Here it indicates it is member of Group.
kfdhdb.dskname:             DATADG_0000 ; 0x028: length=11    --> This indicates Disk Name
kfdhdb.grpname:                  DATADG ; 0x048: length=6    --> This indicates the Group Name for the disk.
kfdhdb.fgname:              DATADG_0000 ; 0x068: length=11    -->  This indicates the Failure Group Name.
kfdhdb.capname:                         ; 0x088: length=0
kfdhdb.crestmp.hi:             32982636 ; 0x0a8: HOUR=0xc DAYS=0x13 MNTH=0x1 YEAR=0x7dd
kfdhdb.crestmp.lo:           2693389312 ; 0x0ac: USEC=0x0 MSEC=0x277 SECS=0x8 MINS=0x28
kfdhdb.mntstmp.hi:             32985205 ; 0x0b0: HOUR=0x15 DAYS=0x3 MNTH=0x4 YEAR=0x7dd
kfdhdb.mntstmp.lo:           2423095296 ; 0x0b4: USEC=0x0 MSEC=0x360 SECS=0x6 MINS=0x24
kfdhdb.secsize:                     512 ; 0x0b8: 0x0200
kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000
kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000
kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80
kfdhdb.dsksize:                    1024 ; 0x0c4: 0x00000400
kfdhdb.pmcnt:                         2 ; 0x0c8: 0x00000002
kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001
kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002
kfdhdb.redomirrors[0]:                0 ; 0x0d8: 0x0000
kfdhdb.redomirrors[1]:                0 ; 0x0da: 0x0000
kfdhdb.redomirrors[2]:                0 ; 0x0dc: 0x0000
kfdhdb.redomirrors[3]:                0 ; 0x0de: 0x0000
kfdhdb.dbcompat:              168820736 ; 0x0e0: 0x0a100000
kfdhdb.grpstmp.hi:             32982636 ; 0x0e4: HOUR=0xc DAYS=0x13 MNTH=0x1 YEAR=0x7dd
kfdhdb.grpstmp.lo:           2693252096 ; 0x0e8: USEC=0x0 MSEC=0x1f1 SECS=0x8 MINS=0x28
kfdhdb.vfstart:                       0 ; 0x0ec: 0x00000000
kfdhdb.vfend:                         0 ; 0x0f0: 0x00000000
kfdhdb.spfile:                        0 ; 0x0f4: 0x00000000
kfdhdb.spfflg:                        0 ; 0x0f8: 0x00000000
kfdhdb.ub4spare[0]:                   0 ; 0x0fc: 0x00000000
kfdhdb.ub4spare[1]:                   0 ; 0x100: 0x00000000
kfdhdb.ub4spare[2]:                   0 ; 0x104: 0x00000000
kfdhdb.ub4spare[3]:                   0 ; 0x108: 0x00000000
kfdhdb.ub4spare[4]:                   0 ; 0x10c: 0x00000000
kfdhdb.ub4spare[5]:                   0 ; 0x110: 0x00000000
kfdhdb.ub4spare[6]:                   0 ; 0x114: 0x00000000
kfdhdb.ub4spare[7]:                   0 ; 0x118: 0x00000000
kfdhdb.ub4spare[8]:                   0 ; 0x11c: 0x00000000
kfdhdb.ub4spare[9]:                   0 ; 0x120: 0x00000000
kfdhdb.ub4spare[10]:                  0 ; 0x124: 0x00000000
kfdhdb.ub4spare[11]:                  0 ; 0x128: 0x00000000
kfdhdb.ub4spare[12]:                  0 ; 0x12c: 0x00000000
kfdhdb.ub4spare[13]:                  0 ; 0x130: 0x00000000
kfdhdb.ub4spare[14]:                  0 ; 0x134: 0x00000000
kfdhdb.ub4spare[15]:                  0 ; 0x138: 0x00000000
kfdhdb.ub4spare[16]:                  0 ; 0x13c: 0x00000000
kfdhdb.ub4spare[17]:                  0 ; 0x140: 0x00000000
kfdhdb.ub4spare[18]:                  0 ; 0x144: 0x00000000
kfdhdb.ub4spare[19]:                  0 ; 0x148: 0x00000000
kfdhdb.ub4spare[20]:                  0 ; 0x14c: 0x00000000
kfdhdb.ub4spare[21]:                  0 ; 0x150: 0x00000000
kfdhdb.ub4spare[22]:                  0 ; 0x154: 0x00000000
kfdhdb.ub4spare[23]:                  0 ; 0x158: 0x00000000
kfdhdb.ub4spare[24]:                  0 ; 0x15c: 0x00000000
kfdhdb.ub4spare[25]:                  0 ; 0x160: 0x00000000
kfdhdb.ub4spare[26]:                  0 ; 0x164: 0x00000000
kfdhdb.ub4spare[27]:                  0 ; 0x168: 0x00000000
kfdhdb.ub4spare[28]:                  0 ; 0x16c: 0x00000000
kfdhdb.ub4spare[29]:                  0 ; 0x170: 0x00000000
kfdhdb.ub4spare[30]:                  0 ; 0x174: 0x00000000
kfdhdb.ub4spare[31]:                  0 ; 0x178: 0x00000000
kfdhdb.ub4spare[32]:                  0 ; 0x17c: 0x00000000
kfdhdb.ub4spare[33]:                  0 ; 0x180: 0x00000000
kfdhdb.ub4spare[34]:                  0 ; 0x184: 0x00000000
kfdhdb.ub4spare[35]:                  0 ; 0x188: 0x00000000
kfdhdb.ub4spare[36]:                  0 ; 0x18c: 0x00000000
kfdhdb.ub4spare[37]:                  0 ; 0x190: 0x00000000
kfdhdb.ub4spare[38]:                  0 ; 0x194: 0x00000000
kfdhdb.ub4spare[39]:                  0 ; 0x198: 0x00000000
kfdhdb.ub4spare[40]:                  0 ; 0x19c: 0x00000000
kfdhdb.ub4spare[41]:                  0 ; 0x1a0: 0x00000000
kfdhdb.ub4spare[42]:                  0 ; 0x1a4: 0x00000000
kfdhdb.ub4spare[43]:                  0 ; 0x1a8: 0x00000000
kfdhdb.ub4spare[44]:                  0 ; 0x1ac: 0x00000000
kfdhdb.ub4spare[45]:                  0 ; 0x1b0: 0x00000000
kfdhdb.ub4spare[46]:                  0 ; 0x1b4: 0x00000000
kfdhdb.ub4spare[47]:                  0 ; 0x1b8: 0x00000000
kfdhdb.ub4spare[48]:                  0 ; 0x1bc: 0x00000000
kfdhdb.ub4spare[49]:                  0 ; 0x1c0: 0x00000000
kfdhdb.ub4spare[50]:                  0 ; 0x1c4: 0x00000000
kfdhdb.ub4spare[51]:                  0 ; 0x1c8: 0x00000000
kfdhdb.ub4spare[52]:                  0 ; 0x1cc: 0x00000000
kfdhdb.ub4spare[53]:                  0 ; 0x1d0: 0x00000000
kfdhdb.acdb.aba.seq:                  0 ; 0x1d4: 0x00000000
kfdhdb.acdb.aba.blk:                  0 ; 0x1d8: 0x00000000
kfdhdb.acdb.ents:                     0 ; 0x1dc: 0x0000
kfdhdb.acdb.ub2spare:                 0 ; 0x1de: 0x0000


检查ASM disk header信息
$ kfed read /dev/oracleasm/disks/DISK4
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
...
kfbh.check: 1539641569 ; 0x00c: 0x5bc510e1
...
kfdhdb.driver.provstr: ORCLDISKDISK4 ; 0x000: length=13
...
kfdhdb.dsknum: 0 ; 0x024: 0x0000
kfdhdb.grptyp: 2 ; 0x026: KFDGTP_NORMAL
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname: PLAY0 ; 0x028: length=5
kfdhdb.grpname: PLAY ; 0x048: length=4
kfdhdb.fgname: P1 ; 0x068: length=2
...
kfdhdb.blksize: 4096 ; 0x0ba: 0x1000
kfdhdb.ausize: 4194304 ; 0x0bc: 0x00400000
...
kfdhdb.dsksize: 1221 ; 0x0c4: 0x000004c5
...

Valid ASM disk should have kfbh.type=KFBTYP_DISKHEAD (ASM disk header).

ASMLIB disk name should follow after 'ORCLDISK' in kfdhdb.driver.provstr field. Note that ASMLIB disk name does not have to be the same as ASM disk name.

Is this really the disk with ASM name PLAY0 (kfdhdb.dskname) and disk number 0 (kfdhdb.dsknum=0) in disk group PLAY (kfdhdb.grpname)? If you are not sure, check the ASM alert log entries around the time of the last successful mount of disk group PLAY.

Header status says MEMBER for this disk (kfdhdb.hdrsts=KFDHDR_MEMBER). That is what we want to see.

ASM metadata block size is 4 KB (kfdhdb.blksize=4096) and allocation unit size is 4 MB for this disk (kfdhdb.ausize=4194304) and the disk size is 1221 AUs, i.e 4884 MB. Is that what you think it should be? Is that what you see at the OS level for that device?

If you see kfbh.type=KFBTYP_INVALID in the disk header on a disk you believe belongs to an ASM disk group, that may indicate that the ASM disk header is damaged. But don't jump to conclusions. Are you looking at the right disk? Is this the right disk partition? Can you access that disk via some other name - in a multipath setup? If you are not sure, or if the disk is in fact damaged, log an SR with Oracle Support to check it out.

I should say that the ASM disk header may look fine, but in fact be corrupt. For example the block checksum (kfbh.check) could be wrong in which case that would need to be corrected. Please log an SR with Oracle Support to assist with that problem.

Note that kfed was used with no additional options. Of note is that no allocation unit number and no block number were specified, which means that default values would be used (0 for both). The command used was:
恢复disk header
对于版本低于10.2.0.5或者11.1.0.7的ASM,对于disk header没有自动备份,最好手工备份一下
kfed read /dev/raw/raw1 text=raw1.txt
disk header更改频率不高,可以在故障后这样恢复
kfed merge /dev/raw/raw1 text=raw1.txt
如果实在没有备份,从同组或类似磁盘备份一份,修改这个文本文件的关键地方,恢复回去

对于版本10.2.0.5或者11.1.0.7的ASM 以上者,可以直接这样就恢复了:
$ kfed repair /dev/raw/raw1
从Oracle 10.2.0.5开始( 实际上是Oracle 11g出现的功能, patchsest 11.1.0.7),ASM磁盘已经开始自动将头块进行备份,备份块的位置在第2个AU的倒数第2个块上(对于默认1M的AU来说,是第510个块), 如果头块损坏,可以用kfed repair命令来修复。  
[oracle@node1 lib]$ kfed read /dev/sdd blkn=510
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD

当然恢复的前提是只有head block损害,可以检查下其它block是否正常
ausize=`kfed read DISK4 | grep ausize | tr -s ' ' | cut -d' ' -f2`
blksize=`kfed read DISK4 | grep blksize | tr -s ' ' | cut -d' ' -f2`
let n=$ausize/$blksize

for (( i=2; i<$n; i++ ))
do
  kfed read /dev/oracleasm/disks/DISK4 blkn=$i | grep KFBTYP
done
 不能有任何这样的行
kfbh.type=KFBTYP_INVALID

参考文档:

Where is the backup of ASM disk header block?


结论:
从Oracle 10.2.0.5开始( 实际上是Oracle 11g出现的功能, patchsest 11.1.0.7),ASM磁盘已经开始自动将头块进行备份,备份块的位置在第2个AU的倒数第2个块上(对于默认1M的AU来说,是第510个块), 如果头块损坏,可以用kfed repair命令来修复。因此对于选用ASM存储作为生产环境的用户来说,尽快升级到10.2.0.5是明智的选择。  


符录:
=================================================
 ASM 磁盘里的一些名词解释
(1)kfbh.endian
    kf3.h  /*endianness of writer */
      Littleendian = 1
      Bigendian = 0
 
(2) kfbh.hard  
    kf3.h  /*H.A.R.D. magic # and block size */
 
(3) kfbh.type
   kf3.h   /*metadata blocktype              */
 
(4) kfbh.datfmt
   kf3.h  /*metadata block data format       */
 
(5) kfbh.block
   kf3.h  /* blocklocation of thisblock     */               
     blk -- Diskheader should have T=0 and NUMB=0x0
     obj -- Diskheader should have TYPE=0x8 NUMB=<disknumber>
   blk and obj values arederived from a series of macros in kf3.h. See
 
   "KFBL Macros"in kf3.h for more information.
 
(6) kfbh.check
   kf3.h  /* checkvalue to verify consistency */
 
(7) kfbh.fcn
   kf3.h  /*change number of last change     */-
 
(8) kfdhdb.driver
   kf3.h  /*OSMLIB driver reserved block */
      If nodriver is defined "ORCLDISK" is used.
 
(9) kfdhdb.compat
   kf3.h  /*Comaptible software version  */
     example:0x0a100000
     Youget:    
         a=101=1 so 10.1.0.0.0
 
(10) kfdhdb.dsknum
   kf3.h  /* OSMdisknumber              *
     This is thedisk number. The first disk being "0". There can be up to
     ub2 disks ina diskgroup. This allows for 65336 disks 0 through 65335.
 
(11) kfdhdb.grptyp
   kf3.h  /* Diskgrouptype              */
 
(12) kfdhdb.hdrsts
   kf3.h  /* Diskheaderstatus           */
     This is whatis used to determine if a disk is available or not to
     thediskgroup. 0x03 is the correct value for a valid status.
 
 (13)kfdhdb.dskname  /*OSMdisk name      */
 (14)kfdhdb.grpname  /*OSM disk group name */
 (15)kfdhdb.fgname   /*Failure group name */
 (16)kfdhdb.capname  /*Capacity grp, unused*/   
 (17)kfdhdb.crestmp  /*Creationtimestamp           */
 (18)kfdhdb.mntstmp  /*Mounttimestamp              */
       kf3.hTo derive the hi and low time`from an unformated dump use the
   "KFTS Macros" inkf3.h.
 
(19) kfdhdb.secsize
   kf3.h  /* Disksector size (bytes)     */
     This is thephysical sector size of the disk in bytes. All I/O's to the
     disk aredescribed in physical sectors. This must be a power of 2. An
     ideal valuewould be 4096, but most disks are formatted with 512 byte
     sectors.(from asmlib.h)
 
(20) kfdhdb.blksize
   kf3.h  /*Metadata block (bytes)       */
 
(21) kfdhdb.ausize
   kf3.h  /*Allocation Unit (bytes)      */
   
(22) kfdhdb.mfact
   kf3.h  /*Stride between phys addr AUs */
   
(23) kfdhdb.dsksize
   kf3.h  /* Disksize inAUs             */
     Mulitply byAUs to get actual size of disk when added.
     
(24) kfdhdb.pmcnt
   kf3.h  /*Permanent phys addressed AUs */
     Number ofphysically addressed allocation units.
     
(25) kfdhdb.fstlocn
   kf3.h  /* FirstFreeSpace table blk num */
     Used to findfreespace.
     
(26) kfdhdb.altlocn
   kf3.h  /* FirstAlocation table blk num */
     Used to findalocated space.
     
(27) kfdhdb.f1b1locn
   kf3.h  /* FileDirectory blk 1 AU num  */
     Beginging forfile directory.
=================================================

一个损坏了的disk的KFED 结果:
kfbh.endian: 83 ; 0×000: 0×53
kfbh.hard: 0 ; 0×001: 0×00
kfbh.type: 0 ; 0×002: KFBTYP_INVALID
kfbh.datfmt: 0 ; 0×003: 0×00
kfbh.block.blk: 4294967293 ; 0×004: T=1 NUMB=0x7ffffffd
kfbh.block.obj: 65286 ; 0×008: TYPE=0×0 NUMB=0xff06
kfbh.check: 144 ; 0x00c: 0×00000090
kfbh.fcn.base: 136903976 ; 0×010: 0x0828fd28
kfbh.fcn.wrap: 4294953840 ; 0×014: 0xffffcb70
kfbh.spare1: 136905029 ; 0×018: 0×08290145
kfbh.spare2: 30000 ; 0x01c: 0×00007530


KFOD ( OSM Discovery utility )说明
这里的OSM是:Order and Service Management,KFOD 命令可以在系统级别对来查找ASM。也可以用来监控ASM.
 
KFOD的帮助
[oracle@rac2 ~]$ kfod -h
_asm_a/llow_only_raw_disks              KFOD allow only raw devices[_asm_allow_only_raw_disks=TRUE/(FALSE)]
_asm_l/ibraries         ASMLibraries[_asm_libraries='lib1','lib2',...]
_asms/id                ASM Instance[_asmsid=sid]
a/sm_diskstring         ASM Diskstring[asm_diskstring='discoverystring', 'discoverystring' ...]
d/isks          Disks to discover [disks=raw,asm,all]
g/roup          Group discover [group=controlfile]
n/ohdr          KFOD header suppression[nohdr=TRUE/(FALSE)]
o/p             KFOD options type[OP=DISKS/GROUPS/ALL]
p/file          ASM parameter file[pfile='parameterfile']
s/tatus         Include disk header status[status=TRUE/(FALSE)]
v/erbose                KFOD verbose errors[verbose=TRUE/(FALSE)]
 
KFOD 示例
[oracle@rac2 ~]$kfod 
--------------------------------------------------------------------------------
ORACLE_SID ORACLE_HOME                                                         
================================================================================
    +ASM2 /u01/app/oracle/product/10.2.0/db_1                                 
    +ASM1 /u01/app/oracle/product/10.2.0/db_1    
 
[oracle@rac2 ~]$ kfod disk=all
--------------------------------------------------------------------------------
 Disk         Size Path     
================================================================================
  1:        101 Mb /dev/raw/raw1
  2:        101 Mb /dev/raw/raw2
  3:        101 Mb /dev/raw/raw3
  4:        101 Mb /dev/raw/raw4
  5:        101 Mb /dev/raw/raw5
  6:        101 Mb /dev/raw/raw6
  7:        101 Mb /dev/raw/raw7
  8:        101 Mb /dev/raw/raw8
--------------------------------------------------------------------------------
ORACLE_SID ORACLE_HOME                                                         
================================================================================
    +ASM2 /u01/app/oracle/product/10.2.0/db_1                                 
    +ASM1 /u01/app/oracle/product/10.2.0/db_1   

[oracle@rac2 ~]$ kfod op=disks
--------------------------------------------------------------------------------
 Disk         Size Path     
================================================================================
  1:        101 Mb /dev/raw/raw3
  2:        101 Mb /dev/raw/raw4
  3:        101 Mb /dev/raw/raw8