mercredi 20 juin 2012

La colonne header_status a la valeur PROVISIONED dans la vue v$asm_disk pour un disque appartenant a un diskgroup

Salut à tous,

Désolé pour ce long silence.

Pour rentrer dans le vif du sujet, il arrive qu'un disque asm appartenant à un diskgroup ait un statut PROVISIONED (colonne header_status de la vue v$asm_disk), alors que le statut devrait être MEMBER. J'ai vécu ce cas dans un environnement 11.2.0.3.

Pour vérifier le « header_status », se connecter à l'instance ASM.

sqlplus / as sysasm

set linesize 3000
column name format a9
column failgroup format a10
column label format a10
column state format a8
column group_number format 999999 heading 'GR_NBR'
column header_status format a11 heading 'HEADER'

select a.group_number, a.name, a.state, a.type, b.disk_number, b.failgroup, b.label, b.header_status
from v$asm_diskgroup a, v$asm_disk b
where a.group_number <> 0
and a.group_number = b.group_number
order by b.failgroup;

GR_NBR NAME STATE TYPE DISK_NUMBER FAILGROUP LABEL HEADER
------- --------- -------- ------ ----------- ---------- ---------- -----------
2 DATA MOUNTED EXTERN 2 DISK_AD1 DISK_AD1 MEMBER
1 DATAFRA MOUNTED EXTERN 0 DISK_AD3 DISK_AD3 MEMBER
4 OCR_VOTE MOUNTED EXTERN 0 DISK_AD5 DISK_AD5 MEMBER
4 OCR_VOTE MOUNTED EXTERN 1 DISK_AD6 DISK_AD6 MEMBER
2 DATA MOUNTED EXTERN 0 DISK_DD1 DISK_DD1 MEMBER
2 DATA MOUNTED EXTERN 1 DISK_DD2 DISK_DD2 MEMBER
3 FRA MOUNTED EXTERN 0 DISK_FD1 DISK_FD1 PROVISIONED
7 rows selected.


Lorsqu’un disque a pour header_status « PROVISIONED », il est impossible de monter le diskgroup qui le contient (evidemment lorsque le diskgroup sera démonté et qu'on voudra le montrer à nouveau):

sqlplus / as sysasm

SQL> alter diskgroup fra mount;
alter diskgroup fra mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15040: diskgroup is incomplete
ORA-15042: ASM disk "0" is missing from group number "1"


Lorsqu’on fait un "kfed read" sur le disque en question, on voit bien qu’il est MEMBER:

Pour utiliser la commande "kfed" positionner les valeurs d'environnement de l'utilisateur qui a installé le grid infrastructure 11gR2, puis lancer la commande:

[oracle@srvhost bin]$ kfed read ORCL:DISK_FD1
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: 3532758487 ; 0x00c: 0xd2919dd7
kfbh.fcn.base: 145337452 ; 0x010: 0x08a9ac6c
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr: ORCLDISKDISK_FD1 ; 0x000: length=16
kfdhdb.driver.reserved[0]: 1263749444 ; 0x008: 0x4b534944
kfdhdb.driver.reserved[1]: 826558047 ; 0x00c: 0x3144465f
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: 2 ; 0x026: KFDGTP_NORMAL
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname: DISK_FD1 ; 0x028: length=8
kfdhdb.grpname: FRA ; 0x048: length=3
kfdhdb.fgname: DISK_FD1 ; 0x068: length=8


Le fait que le "kfed read" du disque montre MEMBER démontre que c’est seulement au niveau de la vue V$ASM_DISK qu’on obtient la valeur PROVISIONED.

Puisque la version d’ASM utilisée est 11.2.0.3, on peut utiliser la commande « kfed repair » pour corriger le problème.

Pour utiliser la commande "kfed" positionner les valeurs d'environnement de l'utilisateur qui a installé le grid infrastructure 11gR2, puis lancer la commande pour réparer:

[oracle@srvhost bin]$ kfed repair ORCL:DISK_FD1
[oracle@srvhost bin]$

Vérifier que le problème est résolu:

sqlplus / as sysasm

set linesize 3000
column name format a9
column failgroup format a10
column label format a10
column state format a8
column group_number format 999999 heading 'GR_NBR'
column header_status format a11 heading 'HEADER'

select a.group_number, a.name, a.state, a.type, b.disk_number, b.failgroup, b.label, b.header_status
from v$asm_diskgroup a, v$asm_disk b
where a.group_number <> 0
and a.group_number = b.group_number
order by b.failgroup;


GR_NBR NAME STATE TYPE DISK_NUMBER FAILGROUP LABEL HEADER
------- --------- -------- ------ ----------- ---------- ---------- -----------
2 DATA MOUNTED EXTERN 2 DISK_AD1 DISK_AD1 MEMBER
1 DATAFRA MOUNTED EXTERN 0 DISK_AD3 DISK_AD3 MEMBER
4 OCR_VOTE MOUNTED EXTERN 0 DISK_AD5 DISK_AD5 MEMBER
4 OCR_VOTE MOUNTED EXTERN 1 DISK_AD6 DISK_AD6 MEMBER
2 DATA MOUNTED EXTERN 0 DISK_DD1 DISK_DD1 MEMBER
2 DATA MOUNTED EXTERN 1 DISK_DD2 DISK_DD2 MEMBER
3 FRA MOUNTED EXTERN 0 DISK_FD1 DISK_FD1 MEMBER
7 rows selected.


Hope it helps...

5 commentaires:

  1. un trés bon article! je t'encourage encore de nous diffuser un peux de tes connaissances du monde oracle !
    Aicha

    RépondreSupprimer
  2. You has a great blog. I'm very interesting to stopping here and leaves you a comment. Good work.

    Lets keep writing and blogging

    Nb: Dont forget to leave your comment back for us.

    RépondreSupprimer
    Réponses
    1. Thanks Rio for your comment.
      But the blog is in french. I hope it is helpful for you guys....

      Supprimer
  3. Hi! I am curious if you attract a lot of traffic to this weblog?

    RépondreSupprimer
    Réponses
    1. On the top right corner, you can see how many hits since the creation of the blog

      Supprimer