0
点赞
收藏
分享

微信扫一扫

Oracle KFED 和 KFOD 工具说明


 

       OracleASM是个封装的磁盘管理工具,所以我们需要对ASM 有充分的认识,否则ASM 出现问题就会非常棘手,KFED 和KFOD 两个命令可以帮助我们了解ASM。

 

一. KFED(Kernel Files Editor) 说明

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

 

1.1 编译KFED

[oracle@rac2 lib]$cd $ORACLE_HOME/rdbms/lib

[oracle@rac2 lib]$ pwd

/u01/app/oracle/product/10.2.0/db_1/rdbms/lib

[oracle@rac2 lib]$ make -f ins_rdbms.mk ikfed

 

链接 KFED 实用程序 (kfed)

rm -f/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/kfed

gcc -o/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/kfed-L/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/-L/u01/app/oracle/product/10.2.0/db_1/lib/ -L/u01/app/oracle/product/10.2.0/db_1/lib /stubs/-L/usr/lib -lirc /u01/app/oracle/product/10.2.0/db_1/lib/s0main.o/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/sskfeded.o/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/skfedpt.o /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/defopt.o -ldbtools10-lclntsh 'cat/u01/app/oracle/product/10.2.0/db_1/lib/ldflags' -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 -lnro10 'cat /u01/app/oracle/product/10.2.0/db_1/lib/ldflags' -lnss lb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lmm -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10-lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 'cat/u01/app/oracle/product/10.2.0/db_1/lib/ldflags' -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 -lnro10 'cat/u01/app/oracle/product/10.2.0/db_1/lib/ldflags' -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lsnls10 -lnls10 -lcore10-lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lsnls10 -lcore10 -lnls10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10-lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 'cat/u01/app/oracle/product/10.2.0/db_1/lib/sysliblist'-Wl,-rpath,/u01/app/oracle/product/10.2.0/db_1/lib -lm 'cat /u01/app/oracle/product/10.2.0/db_1/lib/sysliblist'-ldl -lm -l/l/l/db_1 l/

mv -f/u01/app/oracle/product/10.2.0/db_1/bin/kfed/u01/app/oracle/product/10.2.0/db_1/bin/kfedO

mv: can not stat'/u01/app/oracle/product/10.2.0/db_1/bin/kfed': 没有这样的文件或目录

make: [ikfed] 错误 1 (忽略)

mv /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/kfed/u01/app/oracle/product/10.2.0/db_1/bin/kfed

chmod 751/u01/app/oracle/product/10.2.0/db_1/bin/kfed

[oracle@rac2 lib]$

 

--查看KFED 位置

[oracle@rac2 lib]$ 哪个 kfed

/u01/app/oracle/product/10.2.0/db_1/bin/kfed

 

1.2 KFED 命令使用

--查看KFED 帮助

[oracle@rac2 lib]$ kfed -h

as/mlib         ASM Library [asmlib='lib']

要检查或更新的 aun/um AU 编号[AUNUM=number]

aus/z 分配单元大小(以字节为单位)[AUSZ=数字]

blkn/um 块编号以检查或更新[BLKNUM=number]

blks/z 元数据块大小(以字节为单位)[BLKSZ=number]

ch/ksum 每次写入前更新校验和[CHKSUM=是/否]

cn/t 要处理的 AU 数[CNT=数量]

用于检查或更新的 d/ev ASM 设备[DEV=字符串]

o/p KFED 操作类型 [OP=READ/WRITE/MERGE/NEW/FORM/FIND/STRUCT]

p/rovnm 用于预配目的的名称[PROVNM=字符串]

s/eek           AU number to seek to [SEEK=number]

te/xt 已翻译块文本的文件名[TEXT=字符串]

ty/pe ASM 元数据块类型编号[TYPE=number]

 

--查看ASM磁盘组的情况

SYS@anqing2(rac2)>选择group_number,disk_number,mount_status,header_status,州,名称,路径从v$asm_disk;

 

group_number disk_number mount_sheader_statu状态名称路径

------------ ----------- ------------------- -------- ---------- --------------------

1 0打开的未知正常数据 /dev/mapper/datap1

2 0打开未知正常FRA_0000 /dev/mapper/frap1

 

SYS@anqing2(rac2)> selectdg.group_number “g.no”,dg.name,d.disk_number,d.mount_status,

2 d.header_status,dg.type,d.name,d.path from v$asm_disk d,v$asm_diskgroupdg

3 其中 dg.group_number=d.group_number;

 

g.no 名称DISK_NUMBER MOUNT_S HEADER_STATUTYPE名称路径

---------- --------------------- ------- ------------ ------ ---------- ---------------------------

1 数据 0 打开未知外部数据 /dev/mapper/datap1

2 FRA 0 打开 UNKNOWN EXTERN FRA_0000 /dev/mapper/frap1

 

 

--从系统层面上查看

[oracle@rac2 ~]$ /etc/init.d/oracleasm listdisks

数据

[oracle@rac2 ~]$ ls -lrt /dev/oracleasm/disks/*

brw-rw---- 1 oracle dba 8, 49 Aug 7 07:32 /dev/oracleasm/disks/FRA

brw-rw---- 1 oracle dba 8, 65 Aug 7 07:32 /dev/oracleasm/disks/DATA

 

 

--使用KFED查看ASM磁盘组

[oracle@rac2 ~]$ kfed read /dev/mapper/datap1 text=datap1.txt

[oracle@rac2 ~]$ ls

datap1.txt 桌面oradiag_oracle

[oracle@rac2 ~]$ 猫数据p1.txt

...

kfed 命令可以加text或者不加,如果使用text 参数,那么kfed 读取的内容会保存到text 指定的文档,如果不使用就直接输入到屏幕。

 

[oracle@rac2 ~]$ kfed read /dev/mapper/datap1

kfbh.endian: 1 ;0x000: 0x01

kfbh.hard: 130 ;0x001: 0x82

kfbh.type: 1 ;0x002:KFBTYP_DISKHEAD

kfbh.datfmt: 1 ;0x003: 0x01

kfbh.block.blk: 0 ;0x004:T=0 NUMB=0x0

kfbh.block.obj: 2147483648 ;0x008:类型=0x8数位=0x0

kfbh.check: 1508168608 ;0x00c:0x59e4d3a0

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: ORCLDISKDATA ;0x000:长度=12

-->磁盘卷名

kfdhdb.driver.reserved[0]: 1096040772 ;0x008: 0x41544144

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: 168820736 ;0x020: 0x0a100000

kfdhdb.dsknum: 0 ;0x024: 0x0000

kfdhdb.grptyp: 1 ;0x026:KFDGTP_EXTERNAL

--> 这表示组的冗余。检查查询输出中的 TYPE。

kfdhdb.hdrsts: 3 ;0x027:KFDHDR_MEMBER

--> 这表示磁盘标头状态。在这里,它表明它是组的成员。

kfdhdb.dskname: DATA ;0x028:长度=4

--> 这表示磁盘名称

kfdhdb.grpname: DATA ;0x048:长度=4

--> 这表示磁盘的组名称。

kfdhdb.fgname: DATA ;0x068:长度=4

--> 这表示故障组名称。

kfdhdb.capname: ;0x088:长度=0

kfdhdb.crestmp.hi: 32952076 ;0x0a8:小时=0xc天=0x18百万0x3年=0x7db

kfdhdb.crestmp.lo: 3374491648 ;0x0ac:USEC=0x0毫秒=0xaa秒=0x12分钟=0x32

kfdhdb.mntstmp.hi: 32955120 ;0x0b0:小时=0x10天=0x17百万0x6年=0x7db

kfdhdb.mntstmp.lo: 3440417792 ;0x0b4:USEC=0x0毫秒=0x27秒=0x11分钟=0x33

kfdhdb.secsize: 512 ;0x0b8: 0x0200

kfdhdb.blksize: 4096 ;0x0ba: 0x1000

kfdhdb.ausize: 1048576 ;0x0bc: 0x00100000

kfdhdb.mfact: 113792 ;0x0c0: 0x0001bc80

kfdhdb.dsksize: 11993 ;0x0c4: 0x00002ed9

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: 32952076 ;0x0e4:小时=0xc天=0x18百万吨=0x3年=0x7db

kfdhdb.grpstmp.lo: 3374396416 ;0x0e8:USEC=0x0毫秒=0x4d秒=0x12分钟=0x32

kfdhdb.ub4spare[0]: 0 ;0x0ec: 0x00000000

kfdhdb.ub4spare[1]: 0 ;0x0f0: 0x00000000

kfdhdb.ub4spare[2]: 0 ;0x0f4: 0x00000000

kfdhdb.ub4spare[3]: 0 ;0x0f8: 0x00000000

kfdhdb.ub4spare[4]: 0 ;0x0fc: 0x00000000

kfdhdb.ub4spare[5]: 0 ;0x100: 0x00000000

kfdhdb.ub4spare[6]: 0 ;0x104: 0x00000000

kfdhdb.ub4spare[7]: 0 ;0x108: 0x00000000

kfdhdb.ub4spare[8]: 0 ;0x10c: 0x00000000

kfdhdb.ub4spare[9]: 0 ;0x110: 0x00000000

kfdhdb.ub4spare[10]: 0 ;0x114: 0x00000000

kfdhdb.ub4spare[11]: 0 ;0x118: 0x00000000

kfdhdb.ub4spare[12]: 0 ;0x11c: 0x00000000

kfdhdb.ub4spare[13]: 0 ;0x120: 0x00000000

kfdhdb.ub4spare[14]: 0 ;0x124: 0x00000000

kfdhdb.ub4spare[15]: 0 ;0x128: 0x00000000

kfdhdb.ub4spare[16]: 0 ;0x12c: 0x00000000

kfdhdb.ub4spare[17]: 0 ;0x130: 0x00000000

kfdhdb.ub4spare[18]: 0 ;0x134: 0x00000000

kfdhdb.ub4spare[19]: 0 ;0x138: 0x00000000

kfdhdb.ub4spare[20]: 0 ;0x13c: 0x00000000

kfdhdb.ub4spare[21]: 0 ;0x140: 0x00000000

kfdhdb.ub4spare[22]: 0 ;0x144: 0x00000000

kfdhdb.ub4spare[23]: 0 ;0x148: 0x00000000

kfdhdb.ub4spare[24]: 0 ;0x14c: 0x00000000

kfdhdb.ub4spare[25]: 0 ;0x150: 0x00000000

kfdhdb.ub4spare[26]: 0 ;0x154: 0x00000000

kfdhdb.ub4spare[27]:                  0 ; 0x158: 0x00000000

kfdhdb.ub4spare[28]:                  0 ; 0x15c: 0x00000000

kfdhdb.ub4spare[29]:                  0 ; 0x160: 0x00000000

kfdhdb.ub4spare[30]:                  0 ; 0x164: 0x00000000

kfdhdb.ub4spare[31]:                  0 ; 0x168: 0x00000000

kfdhdb.ub4spare[32]:                  0 ; 0x16c: 0x00000000

kfdhdb.ub4spare[33]:                  0 ; 0x170: 0x00000000

kfdhdb.ub4spare[34]:                  0 ; 0x174: 0x00000000

kfdhdb.ub4spare[35]:                  0 ; 0x178: 0x00000000

kfdhdb.ub4spare[36]:                  0 ; 0x17c: 0x00000000

kfdhdb.ub4spare[37]:                  0 ; 0x180: 0x00000000

kfdhdb.ub4spare[38]:                  0 ; 0x184: 0x00000000

kfdhdb.ub4spare[39]:                  0 ; 0x188: 0x00000000

kfdhdb.ub4spare[40]:                  0 ; 0x18c: 0x00000000

kfdhdb.ub4spare[41]:                  0 ; 0x190: 0x00000000

kfdhdb.ub4spare[42]:                  0 ; 0x194: 0x00000000

kfdhdb.ub4spare[43]:                  0 ; 0x198: 0x00000000

kfdhdb.ub4spare[44]:                  0 ; 0x19c: 0x00000000

kfdhdb.ub4spare[45]:                  0 ; 0x1a0: 0x00000000

kfdhdb.ub4spare[46]:                  0 ; 0x1a4: 0x00000000

kfdhdb.ub4spare[47]:                  0 ; 0x1a8: 0x00000000

kfdhdb.ub4spare[48]:                  0 ; 0x1ac: 0x00000000

kfdhdb.ub4spare[49]:                  0 ; 0x1b0: 0x00000000

kfdhdb.ub4spare[50]:                  0 ; 0x1b4: 0x00000000

kfdhdb.ub4spare[51]:                  0 ; 0x1b8: 0x00000000

kfdhdb.ub4spare[52]:                  0 ; 0x1bc: 0x00000000

kfdhdb.ub4spare[53]:                  0 ; 0x1c0: 0x00000000

kfdhdb.ub4spare[54]:                  0 ; 0x1c4: 0x00000000

kfdhdb.ub4spare[55]:                  0 ; 0x1c8: 0x00000000

kfdhdb.ub4spare[56]:                  0 ; 0x1cc: 0x00000000

kfdhdb.ub4spare[57]:                  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

 

 

1.3 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

data

 

(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.

 

1.4 一个损坏了的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.

 

2.1 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)]

 

 

2.2 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

--------------------------------------------------------------------------------

磁盘大小路径

================================================================================

1: 101 Mb /dev/raw/raw3

2: 101 Mb /dev/raw/raw4

3: 101 Mb /dev/raw/raw8

 

 

       这篇就简单的介绍一下这2个命令, 在下篇ASM disk header 的备份与恢复中在详细的看一下这2个命令的使用。

 

 

 

 

 


举报

相关推荐

0 条评论