暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ASM管理的内部工具-Kfed工具、KFOD工具、 AMDU工具

原创 eygle 2019-09-19
1775

由于ASM的管理相对复杂,Oracle提供了一系列的工具用户帮助用户理解ASM,并且在出现问题之后,可以通过这些工具进行故障诊断和分析。


Kfed工具


对于Oracle 10gR2版本,可以通过使用如下步骤获得kfed工具:


 cd $ORACLE_HOME/rdbms/lib
 make -f ins_rdbms.mk ikfed


以下是可能的编译输出(来自Oracle 10gR2+Linux环境):


[root@danaly ~]# su - oracle
[oracle@danaly ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@danaly lib]$ make -f ins_rdbms.mk ikfed
Linking KFED utility (kfed)
rm -f /opt/oracle/product/10.2.0/rdbms/lib/kfed
gcc -o /opt/oracle/product/10.2.0/rdbms/lib/kfed ...
mv -f /opt/oracle/product/10.2.0/bin/kfed /opt/oracle/product/10.2.0/bin/kfedO
mv: cannot stat `/opt/oracle/product/10.2.0/bin/kfed': No such file or directory
make: [ikfed] Error 1 (ignored)
mv /opt/oracle/product/10.2.0/rdbms/lib/kfed /opt/oracle/product/10.2.0/bin/kfed
chmod 751 /opt/oracle/product/10.2.0/bin/kfed
[oracle@danaly lib]$ which kfed
~/product/10.2.0/bin/kfed


Kfed的常用参数有:


[oracle@bossdb-rac2 lib]$ kfed -help
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/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]


通过以上帮助说明,可以看到kfed支持对于ASM信息的READ/WRITE/MERGE/ NEW/FORM/FIND/STRUCT等操作,实际上是非常完备了。


通过read指令可以读取ASM磁盘头的元数据信息:


[oracle@danaly ~]$ kfed read /dev/oracleasm/disks/VOL6
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:              2147483652 ; 0x008: TYPE=0x8 NUMB=0x4
kfbh.check:                   863027707 ; 0x00c: 0x3370c1fb
…………
kfdhdb.grptyp:                        1 ; 0x026: KFDGTP_EXTERNAL
kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname:                    VOL6 ; 0x028: length=4
kfdhdb.grpname:                   ORADG ; 0x048: length=5
kfdhdb.fgname:                     VOL6 ; 0x068: length=4
kfdhdb.capname:                         ; 0x088: length=0
kfdhdb.crestmp.hi:             32868906 ; 0x0a8: HOUR=0xa DAYS=0x11 MNTH=0x2 YEAR=0x7d6
kfdhdb.crestmp.lo:           1770533888 ; 0x0ac: USEC=0x0 MSEC=0x20d SECS=0x18 MINS=0x1a
kfdhdb.mntstmp.hi:             32884629 ; 0x0b0: HOUR=0x15 DAYS=0x1c MNTH=0x1 YEAR=0x7d7
kfdhdb.mntstmp.lo:           1934266368 ; 0x0b4: USEC=0x0 MSEC=0x2a4 SECS=0x34 MINS=0x1c
………
kfdhdb.redomirrors[3]:                0 ; 0x0de: 0x0000
kfdhdb.dbcompat:              168820736 ; 0x0e0: 0x0a100000
kfdhdb.grpstmp.hi:             32875626 ; 0x0e4: HOUR=0xa DAYS=0x3 MNTH=0x9 YEAR=0x7d6
kfdhdb.grpstmp.lo:           3477741568 ; 0x0e8: USEC=0x0 MSEC=0x288 SECS=0x34 MINS=0x33
………………


Kfed的write功能还可以向磁盘组写入元数据,用于特殊的故障恢复。


KFOD工具


在系统级别,Oracle还提供一个KFOD工具,用于列举搜索磁盘,在ASM实例启动之后,这些信息可以通过视图提供。


[oracle@db210-rac1 oracle]$ kfod -h
_asm_a/llow_only_raw_disks              KFOD allow only raw devices [_asm_allow_only_raw_disks=TRUE/(FALSE)]
_asm_l/ibraries         ASM Libraries[_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)]


可以用以下命令查询磁盘状态信息:


[oracle@db210-rac1 oracle]$ kfod disks=all status=true
--------------------------------------------------------------------------------
 Disk          Size Header    Path
================================================================================
   1:      15360 Mb MEMBER    /dev/rdsk/asmdata
   2:        200 Mb CANDIDATE /dev/rdsk/asmspfile
   3:        200 Mb FOREIGN   /dev/rdsk/emcpower0b
   4:        200 Mb FOREIGN   /dev/rdsk/emcpower0d
   5:        200 Mb FOREIGN   /dev/rdsk/emcpower0e
   6:       5120 Mb MEMBER    /dev/rdsk/emcpower1d
   7:        200 Mb FOREIGN   /dev/rdsk/emcpower2d
   8:        200 Mb FOREIGN   /dev/rdsk/emcpower2e
   9:        200 Mb CANDIDATE /dev/rdsk/emcpower2f
  10:       4096 Mb CANDIDATE /dev/rdsk/emcpower2h
  11:        200 Mb FOREIGN   /dev/rdsk/ocr1
  12:        200 Mb FOREIGN   /dev/rdsk/ocr2
  13:        200 Mb FOREIGN   /dev/rdsk/voting
  14:        200 Mb FOREIGN   /dev/rdsk/voting1
--------------------------------------------------------------------------------
ORACLE_SID ORACLE_HOME
================================================================================
     +ASM1 /opt/oracle/product/10.2.0/db10g
     +ASM2 /opt/oracle/product/10.2.0/db10g


 AMDU工具


在Oracle 10g中,ASM磁盘组的信息需要在Mount之后才能通过内部视图查询,如果磁盘组因为故障无法正常加载,那么信息将不可用,这为诊断带来了诸多不便。


从Oracle 11g开始,Oracle提供了一个工具AMDU用于协助诊断,通过这个工具可以在磁盘组加载之前将ASM的元数据抽取出来,用于数据库诊断,这个工具可以向后兼容,引入到10g中。


通过amdu –h可以查看详细的帮助说明,缺省的调用amdu,会自动生成一个以时间命名的目录,该目录下生成的报告文件会记录磁盘组的相关信息:


[oracle@enmou1 ~]$ amdu
amdu_2011_03_29_10_28_41/
[oracle@enmou1 ~]$ cd amdu_2011_03_29_10_28_41/
[oracle@enmou1 amdu_2011_03_29_10_28_41]$ ls
report.txt


该报告的主要内容如下:


[oracle@enmou1 amdu_2011_03_29_10_28_41]$ more report.txt
-*-amdu-*-
 
******************************* AMDU Settings ********************************
ORACLE_HOME = /u01/app/db/11.2.0
System name:    Linux
Node name:      enmou1
Release:        2.6.18-128.el5
Version:        #1 SMP Wed Dec 17 11:41:38 EST 2008
Machine:        x86_64
amdu run:       29-MAR-11 10:28:41
Endianess:      1
--------------------------------- Operations ---------------------------------
********************************* DISCOVERY **********************************
 
----------------------------- DISK REPORT N0001 ------------------------------
                Disk Path: ORCL:VOL1
           Unique Disk ID:
               Disk Label: VOL1
     Physical Sector Size: 512 bytes
                Disk Size: 1954 megabytes
               Group Name: CRSDG
                Disk Name: VOL1
       Failure Group Name: VOL1
              Disk Number: 0
            Header Status: 3
       Disk Creation Time: 2011/03/17 11:39:10.772000
          Last Mount Time: 2011/03/29 09:21:38.608000
    Compatibility Version: 0x0b200000(11020000)
         Disk Sector Size: 512 bytes
         Disk size in AUs: 1954 AUs
         Group Redundancy: 1
      Metadata Block Size: 4096 bytes            -〉元数据块大小,4K
                  AU Size: 1048576 bytes         -〉AU大小:1M
                   Stride: 113792 AUs           
      Group Creation Time: 2011/03/17 11:39:10.671000
  File 1 Block 1 location: AU 2                 -〉文件使用,从AU 2开始
              OCR Present: NO
 
******************************* END OF REPORT ********************************


定义特定的参数可以获得ASM磁盘组内部的区间分配等详细信息。以下命令指定转储CRSDG的磁盘组信息,除了报告文件外,还生成了map和img信息文件:


[oracle@enmou1 ~]$ amdu -diskstring '/dev/oracleasm/disks/VOL*' -dump 'CRSDG'
amdu_2011_03_29_10_36_03/
[oracle@enmou1 ~]$ cd amdu_2011_03_29_10_36_03/
[oracle@enmou1 amdu_2011_03_29_10_36_03]$ ls
CRSDG_0001.img  CRSDG.map  report.txt


这里MAP文件的信息如下,其内容描述了ASM元数据在磁盘组中的位置,最后部分就是指针信息:


[oracle@enmou1 amdu_2011_03_29_10_36_03]$ more CRSDG.map
N0001 D0000 R00 A00000000 F00000000 I0 E00000000 U00 C00256 S0001 B0000000000
N0001 D0000 R00 A00000001 F00000000 I0 E00000000 U00 C00256 S0001 B0001048576
N0001 D0000 R00 A00000002 F00000001 I0 E00000000 U00 C00256 S0001 B0002097152
N0001 D0000 R00 A00000003 F00000002 I0 E00000000 U00 C00256 S0001 B0003145728
N0001 D0000 R00 A00000004 F00000003 I0 E00000000 U00 C00256 S0001 B0004194304


而IMG文件则是元数据块的镜像转储,为2进制文件,这些文件在ASM出现故障时,可以用于收集信息,分析故障。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论