【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图の変更のように:

hdrsts

 

 

 

 

 

 

 

 

 

 

hdrsts2

後で修正できたあとメタデータ情報テキストを使って、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

 

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号