Translate

vendredi 13 mai 2016

ORA-15036: disk XXX is truncated



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/



1 commentaire: