oracle diskgroup 恢复 案例:Oracle非常规恢复 ASM磁盘组diskgroup被删除使用kfed进行完美恢复

关于KFED工具

当ASM磁盘组不能被mount时,kfed是一个可以用于分析ASM磁盘头信息非常有用的工具

注意:

  • KFED的可执行文件是从11.1版本开始的; 因此之前的就版本,你需要build后才能使用。
  • 由于其并不包含在Oracle数据库软件安装中,它是包含在Oracle Grid Infrastructure安装中的,因此在使用前请确保GI已经进行了安装。

KFED帮助信息可以使用以下命令查看:

$>kfed help=y

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]
de/v            ASM device to examine or update [DEV=string]
dm/pall        Don't suppress repeated lines when dumping corrupt blocks [DMPALL=YES/NO]
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] 

一般可以使用以下语法读取ASM磁盘头: 

$> kfed read <your_device>

例如:

$> kfed read /dev/raw/raw1
     
   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: TYPE=0x8 NUMB=0x0
   kfbh.check:                        2932902794 ; 0x00c: 0xaed08b8a
   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:                 168820736 ; 0x020: 0x0a100000
   kfdhdb.dsknum:                     0 ; 0x024: 0x0000
   kfdhdb.grptyp:                        1 ; 0x026: KFDGTP_EXTERNAL
   kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER
   kfdhdb.dskname:               ASM01_0000 ; 0x028: length=10
   kfdhdb.grpname:               ASM01 ; 0x048: length=5
   kfdhdb.fgname:                 ASM01_0000 ; 0x068: length=10
   kfdhdb.capname:               ; 0x088: length=0
   kfdhdb.crestmp.hi:             32837774 ; 0x0a8: HOUR=0xe DAYS=0x4 MNTH=0x4 YEAR=0x7d4
   kfdhdb.crestmp.lo:             1555722240 ; 0x0ac: USEC=0x0 MSEC=0x29c SECS=0xb MINS=0x17
   kfdhdb.mntstmp.hi:            32837774 ; 0x0b0: HOUR=0xe DAYS=0x4 MNTH=0x4 YEAR=0x7d4
   kfdhdb.mntstmp.lo:            1563864064 ; 0x0b4: USEC=0x0 MSEC=0x1ab SECS=0x13 MINS=0x17
  ...
   kfdhdb.ub4spare[60]:         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) 只有指定设备为ASM磁盘组下设备的情况下,kfed才能饭回可读输出。如果所对应读取的设备还未被加入任何磁盘组或者是一个无效设备的话,那么你会得到以下报错:

KFED-00322: Invalid content encountered during block traversal: [kfbtTraverseBlock][Invalid OSM block type][][0]

2) 如果当时创建的磁盘组的AU大小为非默认大小,那么在读取时,你应该首先指定AU size:

$> kfed read <your_device> AUSZ=<au_size>

猜你喜欢

转载自blog.csdn.net/liu_maclean/article/details/81186279