Email: service@parnassusdata.com 7 x 24 online support!
【ASMデータリカバリ】どうやってASM Disk header_status=FORMERのディスクをDiskgroupに加えて、 ORA-15017 ORA-15063 ORA-15032になった
プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com
以下の状況が現れるかもしれない。誤操作でDISKGROUPをDROPしたあるいは。或Bug 13331814: ASM DISKS TURNED INTO FORMER WHILE DISKGROUP IS MOUNTEDでASM DISKのheader_status=FORMERがまともなMEMBER状態ではない。
例えば
[oracle@mlab2 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.3.0 Production on Tue Nov 19 21:55:09 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Automatic Storage Management option
SQL> create diskgroup maclean external redundancy disk ‘/dev/asm-disk9′;
Diskgroup created.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
———— —————————— ———–
1 DATA MOUNTED
2 MACLEAN MOUNTED
SQL> col path for a40
SQL> select name,path,header_status from v$asm_disk where group_number=2;
NAME PATH
—————————— —————————————-
HEADER_STATU
————
MACLEAN_0000 /dev/asm-disk9
MEMBER
SQL> drop diskgroup maclean;
Diskgroup dropped.
SQL> alter diskgroup maclean mount;
alter diskgroup maclean mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup “MACLEAN” cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup
“MACLEAN”
SQL> select name,path,header_status from v$asm_disk where path=’/dev/asm-disk9’;
NAME PATH
—————————— —————————————-
HEADER_STATU
————
/dev/asm-disk9
FORMER
[oracle@mlab2 ~]$ kfed read /dev/asm-disk9 |head -25
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: blk=0
kfbh.block.obj: 2147483648 ; 0x008: disk=0
kfbh.check: 554377417 ; 0x00c: 0x210b20c9
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=11
kfdhdb.driver.reserved[0]: 65796 ; 0x008: 0x00010104
kfdhdb.driver.reserved[1]: 1 ; 0x00c: 0x00000001
kfdhdb.driver.reserved[2]: 4206569 ; 0x010: 0x00402fe9
kfdhdb.driver.reserved[3]: 3367865 ; 0x014: 0x003363b9
kfdhdb.driver.reserved[4]: 196018176 ; 0x018: 0x0baf0000
kfdhdb.driver.reserved[5]: 390595073 ; 0x01c: 0x17480201
kfdhdb.compat: 168820736 ; 0x020: 0x0a100000
kfdhdb.dsknum: 0 ; 0x024: 0x0000
kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL
kfdhdb.hdrsts: 4 ; 0x027: KFDHDR_FORMER
kfdhdb.dskname: MACLEAN_0000 ; 0x028: length=12
kfdhdb.grpname: MACLEAN ; 0x048: length=7
kfdhdb.fgname: MACLEAN_0000 ; 0x068: length=12
ここのkfdhdb.hdrsts: 4 ; 0x027: KFDHDR_FORMER はそのディスクの状態はFORMERと意味している。
まずは該当する ASM DISKのheaderをバックアップする
[oracle@mlab2 ~]$ mkdir /tmp/asm
[oracle@mlab2 ~]$ dd if=/dev/asm-disk9 of=/tmp/asm/asm-disk9-header bs=1024k count=20
[oracle@mlab2 ~]$ kfed read /dev/asm-disk9 > /tmp/asm/asm-disk9-meta
[oracle@mlab2 ~]$ ls -l /tmp/asm/asm-disk9-meta
-rw-r–r– 1 oracle oinstall 6597 Nov 20 01:26 /tmp/asm/asm-disk9-meta
修改asm-disk9-meta这个文本中的内容
kfdhdb.hdrsts: 4 ; 0x027: KFDHDR_FORMER
に改正
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
以下の 2图の変更のように:
後で修正できたあとメタデータ情報テキストを使って、ASM DISKをpatchすることができるようになった、具体的なコマンドは以下の通り:
[oracle@mlab2 ~]$ kfed merge /dev/asm-disk9 text=/tmp/asm/asm-disk9-meta
再び確認する
[oracle@mlab2 ~]$ kfed read /dev/asm-disk9 |grep hdrsts
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
最後でそのディスクに該当するDISKGROUPをMOUNTする:
SQL> alter diskgroup maclean mount;
Diskgroup altered.
SQL> select name,state from v$asm_diskgroup;
NAME STATE
—————————— ———–
DATA MOUNTED
MACLEAN MOUNTED