All about Oracle FED and KFOD tools

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值