Comment sauvegarder et restaurer des OLR d'un RAC ?

Suite à des redémarrages forcés, nous avons rencontré un gros souci sur des RAC de production.
Des verrous de fichiers sur ACFS nous ont forcés à effectuer des redémarrages de nœuds. Grâce à l’utilisation des relocate de services nous n’avons pas eu d’impact sur la production mais notre nœud n’était pas décidé à redémarrer proprement.
Après 25 minutes d’attente suite au lancement de la commande reboot, nous avons été forcé de demander à nos administrateurs Linux à faire un electrical reboot via la console ILO.
L’opération n’est pas compliquée, un simple bouton dans l’interface Web, en revanche, le redémarrage de la couche clusterware nous a posé de gros souci.
En effet, Oracle semblait localiser le fichier OLR (Oracle Local Registery) mais rien ne se passait. Les couches clusterware s’arrêtait…
J’ai donc trouvé un moyen rapide de diagnostiquer un problème de configuration.
Il suffit d’interroger la configuration réseau de notre cluster Oracle pour se rendre compte de l’état de santé de note nœud :
# export ORACLE_SID=+ASM1
# export ORAENV_ASK=NO
# . oraenv
# oifcfg getif
CRS-4535: Cannot communicate with Cluster Ready Services
Comme on peut le voir, la couche initiale de démarrage du RAC n’est pas accessible.
Après quelques heures d’investigation infructueuse, nous avons dû en venir à une explication très simple.
Lorsque nous avons demandé l’arrêt électrique de notre serveur, Oracle était occupé ou bloqué, entre autre, sur l’enregistrement de la configuration de l’OLR.
De là, la solution est simple, il nous faut restaurer l’OLR à partir d’une sauvegarde.
Voici la commande :
# ocrconfig -local -restore <path_vers_la sauvegarde>
# crsctl start crs
# crsctl stat res -t
Et voilà ! Si la commande présente vous rend la main, le tour est joué, votre cluster est reparti.
Problématique : Que faire si les sauvegardes de l’OLR ne sont pas programmées ?
Heureusement pour nous, Oracle effectue une sauvegarde de l’OLR lors de l’installation du nœud. Il y a toujours une sauvegarde disponible.
En revanche, il peut être bienvenu d’effectuer des sauvegardes fréquentes. Voici un exemple de script (à lancer en root) :
export ORACLE_SID=+ASM1
export ORAENV_ASK=NO
. oraenv >/dev/null 2>&1
ocrconfig -local -manualbackup
if (( $? != 0 ))
then
echo « Pb lors de l’exécution de la commande ocrconfig -local -manualbackup »
fi
Il suffit ensuite de créer une tâche dans votre ordonnanceur ou directement en crontab pour l’utilisateur root.