Chez un client et lors la mise à niveau du grid 11.2.0.3 vers 12.1.0.2 on a eu ce message d'erreur et on a "perdu" un de nos Diskgroups:
SQL> alter diskgroup ARCHMABD MOUNT FORCE ;
alter diskgroup ARCHMABD MOUNT FORCE
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15036: disk '/dev/rdsk/c0d35s0' is truncated
############################
### INF AVANT UPGRADE : ###
############################
ASMCMD> lsdsk -k
Total_MB Free_MB OS_MB Name Failgroup Failgroup_Type Library Label UDID Product Redund Path
1023952 120983 1023952 ARCHMABD_0000 ARCHMABD_0000 REGULAR System UNKNOWN /dev/rdsk/c0d28s0
1048576 123953 1048576 ARCHMABD_0001 ARCHMABD_0001 REGULAR System UNKNOWN /dev/rdsk/c0d35s0
1023952 121011 1023952 ARCHMABD_0002 ARCHMABD_0002 REGULAR System UNKNOWN /dev/rdsk/c0d61s0
1023952 121117 1023952 ARCHMABD_0003 ARCHMABD_0003 REGULAR System UNKNOWN /dev/rdsk/c0d62s0
Note :
La taille des disques est déjà différente pour "/dev/rdsk/c0d35s0"
Comme le disque n'est pas monté il ne va pas apparaître :
ASMCMD> lsdsk -k -G ARCHMABD
Total_MB Free_MB OS_MB Name Failgroup Failgroup_Type Library Label UDID Product Redund Path
Avec "sqlplus / as sysasm" :
SET LINESIZE 2000
SELECT GROUP_NUMBER, NAME, SECTOR_SIZE, BLOCK_SIZE, STATE FROM V$ASM_DISKGROUP WHERE NAME LIKE 'ARCHMABD' ;
GROUP_NUMBER NAME SECTOR_SIZE BLOCK_SIZE STATE
------------ ------------------------------ ----------- ---------- -----------
0 ARCHMABD 0 0 DISMOUNTED
Correction :
$ kfed read /dev/rdsk/c0d35s0 | egrep "name|size"
kfdhdb.dskname: ARCHMABD_0001 ; 0x028: length=15
kfdhdb.grpname: ARCHMABD ; 0x048: length=10
kfdhdb.fgname: ARCHMABD_0001 ; 0x068: length=15
kfdhdb.capname: ; 0x088: length=0
kfdhdb.secsize: 512 ; 0x0b8: 0x0200
kfdhdb.blksize: 4096 ; 0x0ba: 0x1000
kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000
kfdhdb.dsksize: 1048576 ; 0x0c4: 0x00100000 ...(A)
Créer un fichier avec la métadonnée du disque :
$ kfed read /dev/rdsk/c0d35s0 > /tmp/header_d35s0.kfed
$ less /tmp/header_d35s0.kfed | grep "dsksize"
kfdhdb.dsksize: 1048576 ; 0x0c4: 0x00100000
Comparer avec la taille de l'OS ( Décimal et hexadécimal ) , servez-vous de la calculatrice en mode programmeur si vous voulez.
$ /usr/sbin/devinfo -p /dev/rdsk/c0d35s0
/dev/rdsk/c0d35s0 76 3b0 2048 2147299328 0 4
2147299328 * 512 / 1024 / 1024 = 1048486...(B)
Dans ce cas 512 c'est le blocksize de l'OS
S'il y une différence entre (A) et (B) ...
Modifier le fichier header_d35s0.kfed et insérer la bonne taille du disque selon l'OS, sauvegardez les modifications :
...
kfdhdb.dsksize: 1048486 ; 0x0c4: 0x000FFFA6
...
Charger la métadonnée dans le disque :
$ kfed merge /dev/rdsk/c0d35s0 text=/tmp/header_d35s0.kfed_ok
Essayez de monter le diskgroup :
SQL> ALTER DISKGROUP ARCHMABD MOUNT ;
Diskgroup altered.
On peut maintenant regarder le contenu :
ASMCMD> cd ARCHMABD/
ASMCMD> ls
2015_08_10/
2015_08_11/
2015_08_12/
2015_08_13/