Bien sûr l'on peut retrouver les mêmes informations à partir des vues dynamiques, mais l'objectif de cet article c'est de montrer l'utilisation que l'on peut faire de l'utilitaire asm "kfod".
L'utilitaire se trouve dans le répertoire $GRID_HOME/bin en environnement cluster comme en environnement standalone.
Le script a été écrit sur un serveur Linux, donc avec la présence d'asmlib. Il tient compte du fait que sur certains serveurs les disques s'appellent /dev/oracleasm/disks/* (les alias sont créés par asmlib, mais asmlib n'est pas utilisé au moment de monter les diskgroups, cela est le résultat d'un problème que nous avons rencontré à cause de la version des contrôleurs du SAN. Voir l'article http://www.herve-etche.com/2012/12/ora-15085-asm-disk-has-inconsistent.html pour plus de détails) et sur d'autres serveurs c'est ORCL:* (ici asmlib est utilisé).
# 10-avril-2013 - Creation initiale - Par Herve Etche
# Ce script permet d'afficher les diskgroups asm et leurs tailles. Il
affiche aussi les disques de chaque diskgroup et leurs tailles
#!/usr/bin/ksh
GRID_HOME=$(cat /etc/oratab | awk -F: '/^\+ASM/{print $2}') #Recuperer
le GRID_HOME a partir du fichier /etc/oratab
ASM_PID=`ps -ef|grep asm_pmon|grep -v grep|awk '{print $2}'` #Le PID du
process pmon d'asm
if [ $ASM_PID ]; then # Le process pmon d'asm existe, l'instance est
donc demarree
v_profile=`asmcmd
dsget|cut -d ':' -f2|uniq`
DG=`$GRID_HOME/bin/kfod
asm_diskstring='/dev/oracleasm/disks/*' dscvgroup=TRUE disks=all|grep DISK|awk
'{print $5}'|grep -v \#|sort|uniq` #Liste des diskgroups
if test -n "$DG"; then
for x in $DG
do
echo
printf '\033[32m'
#couleur verte
printf '\033[4m'
#Souligner phrase
echo -e "Diskgroup:
$x"'\033[0m';
printf '\033[0m' #Annuler
couleur verte et le souligner
echo
echo
echo " Diskgroup Total (GB) Util (GB) Libre (GB) %Util "
echo
"======================================================================"
$GRID_HOME/bin/asmcmd lsdg $x | \
awk -v sq="'" 'BEGIN {
getline } {
printf" %s \t
%11"sq"d \t %9"sq"d \t %8"sq"d \t %3d%%
\n",$13,$7/1024,($7-$8)/1024,$8/1024,100-100*($8/$7)
}'
echo
if [[ $v_profile == /dev* ]]; then
echo " Disque(s) Taille (MB) Taille (GB) "
echo
"======================================================================"
/usr/bin/diff
<($GRID_HOME/bin/kfod asm_diskstring='/dev/oracleasm/disks/*' group=$x)
<($GRID_HOME/bin/kfod asm_diskstring='/dev/oracleasm/disks/*' group=#) | \
awk -v sq="'" 'BEGIN { getline } {
printf" %s \t
%10"sq"d \t %11"sq"d \n",$5,$3,$3/1024
}' | grep DISK
else
echo
echo " Disque(s) Taille (MB) Taille (GB) "
echo
"======================================================"
echo
/usr/bin/diff
<($GRID_HOME/bin/kfod asm_diskstring='ORCL*' group=$x) <(kfod
asm_diskstring='ORCL*' group=#) | \
awk -v sq="'" 'BEGIN { getline } {
printf" %s \t
%10"sq"d \t %11"sq"d \n",$5,$3,$3/1024
}' | grep DISK
fi
echo
done
fi
printf '\033[32m' #couleur
verte
printf '\033[4m' #Souligner
phrase
echo -e "Disque(s)
n'appartenant a aucun diskgroup:"'\033[0m';
printf '\033[0m' #Annuler
couleur verte
nb=`$GRID_HOME/bin/kfod
asm_diskstring='/dev/oracleasm/disks/*' group=# | grep DISK |wc -l` #nombre de
disques n'appartenent a aucun diskgroup
if [ "$nb"
-ge 1 ]; then
echo
echo " Disque(s) Taille (MB) Taille (GB) "
echo "======================================================================"
$GRID_HOME/bin/kfod
asm_diskstring='/dev/oracleasm/disks/*' group=# | \
awk -v sq="'" 'BEGIN {
getline } {
printf" %s \t
%10"sq"d \t %11"sq"d \n",$4,$2,$2/1024
}' | grep DISK
echo
else
echo
echo "Il n'existe
aucun disque libre dans cet environnement"
echo
fi
else # Il n'y a pas de process pmon pour asm, l'instance asm n'est donc
pas demarree.
printf '\033[31m' #couleur
rouge
echo
"********************************************************************"
echo "***** Desole,
l'instance ASM n'est pas demarree sur ce noeud ! *****"
echo
"********************************************************************"
printf '\033[0m' #Annuler
couleur rouge
fi
Exemple de résultat obtenu:
[oracle@svr_host
]$ ./asm_kfod.ksh
Diskgroup: DATA
Diskgroup Total (GB) Util (GB) Libre (GB) %Util
======================================================================
DATA/ 400 86 313 21%
Disque(s)
Taille (MB) Taille (GB)
======================================================================
/dev/oracleasm/disks/DISK_AL9 409,626 400
Diskgroup: DATA11G
Diskgroup Total (GB) Util (GB) Libre (GB) %Util
======================================================================
DATA11G/ 2,800 481 2,318 17%
Disque(s)
Taille (MB) Taille (GB)
======================================================================
/dev/oracleasm/disks/DISK_AL1 409,626 400
/dev/oracleasm/disks/DISK_AL2 409,626 400
/dev/oracleasm/disks/DISK_AL3 409,626 400
/dev/oracleasm/disks/DISK_AL4 409,626 400
/dev/oracleasm/disks/DISK_AL5 409,626 400
/dev/oracleasm/disks/DISK_AL6 409,626 400
/dev/oracleasm/disks/DISK_AL7 409,626 400
Diskgroup: FRA
Diskgroup Total (GB) Util (GB) Libre (GB) %Util
======================================================================
FRA/ 400 41 358 10%
Disque(s)
Taille (MB) Taille (GB)
======================================================================
/dev/oracleasm/disks/DISK_AL10 409,626 400
Diskgroup: FRA11G
Diskgroup Total (GB) Util (GB) Libre (GB) %Util
======================================================================
FRA11G/ 400 17 382 4%
Disque(s) Taille (MB) Taille (GB)
======================================================================
/dev/oracleasm/disks/DISK_AL8 409,626 400
Diskgroup: OCR_VOTE
Diskgroup Total (GB) Util (GB) Libre (GB) %Util
======================================================================
OCR_VOTE/ 20 0 19 1%
Disque(s)
Taille (MB) Taille (GB)
======================================================================
/dev/oracleasm/disks/DISK_AL11 10,240 10
/dev/oracleasm/disks/DISK_AL12 10,240 10
Disque(s) n'appartenant a
aucun diskgroup:
Il n'existe aucun disque libre dans cet
environnement
Hope it helps...
Nice! I think I can (proactively) use your script to easily find the disk concerned in case of a disk failure.
RépondreSupprimer