Reconstruire le fichier OLR après un crash du service Oracle High Availability sans sauvegarde.

La sauvegarde du fichier OLR sur chaque nœud du cluster n’étant pas automatique, si par négligence ou par oubli vous n’aviez pas programmé une sauvegarde régulière du fichier OLR de chaque nœud, en cas de crash ou d’arrêt du deamon OHASD, vous n’avez d’autre choix que de recréer le fichier sur le nœud.
 
Voici ce que vous pourriez voir en consultant le fichier de log $GRID_HOME/log/client/ohasd/ohasd.log :
 
2015-12-17 10:40:45.759: [ default][1505900272] OHASD Daemon Starting. Command string :restart
2015-12-17 10:40:45.761: [ default][1505900272] Initializing OLR
2015-12-17 10:40:45.763: [ OCROSD][1505900272]utopen:6m':failed in stat OCR file/disk /u01/app/11.2.0/grid/cdata/fouss-rac1.olr, errno=2, os err string=No such file or directory
2015-12-17 10:40:45.763: [ OCROSD][1505900272]utopen:7:failed to open any OCR file/disk, errno=2, os err string=No such file
or directory
2015-12-17 10:40:45.763: [ OCRRAW][1505900272]proprinit: Could not open raw device
2015-12-17 10:40:45.763: [ OCRAPI][1505900272]a_init:16!: Backend init unsuccessful : [26]
2015-12-17 10:40:45.764: [ CRSOCR][1505900272] OCR context init failure. Error: PROCL-26: Error while accessing the physica
l storage Operating System error [No such file or directory] [2]
2015-12-17 10:40:45.764: [ default][1505900272] OLR initalization failured, rc=26
2015-12-17 10:40:45.764: [ default][1505900272]Created alert : (:OHAS00106:) : Failed to initialize Oracle Local Registry
2015-12-17 10:40:45.764: [ default][1505900272][PANIC] OHASD exiting; Could not init OLR
2015-12-17 10:40:45.765: [ default][1505900272] Done.

C’est bien le fichier OLR d’un des nœuds qui n’est pas accessible.
Pourtant, le pointeur qui le localise existe bien :

# cat /etc/oracle/olr.loc
olrconfig_loc=/u01/app/11.2.0/grid/cdata/fouss-rac1.olr
crs_home=/u01/app/11.2.0/grid

Vérification :

# ls -l /u01/app/11.2.0/grid/cdata/fouss-rac1.olr
ls: /u01/app/11.2.0/grid/cdata/fouss-rac1.olr: No such file or directory

Le fichier n’existe pas. Le réflexe, c’est de recourir à une sauvegarde et de faire un restore :

# ocrconfig -local -showbackup
#

Aucune sauvegarde, la solution ultime est de recréer le fichier sur le nœud.
Pour recréer le fichier, il faut :

  1. Supprimer toutes les références aux fichiers du clusterware en exécutant le script rootcrs.pl du répertoire $GRID_HOME/crs/install
  2. Reprendre le script root.sh qui a été exécuté au moment de l’installation de l’Infrastructure.


# $GRID_HOME/crs/install/rootcrs.pl -deconfig -force
2015-12-17 16:07:09: Parsing the host name
2015-12-17 16:07:09: Checking for super user privileges
2015-12-17 16:07:09: User has super user privileges
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
....
CRS-4000: Command Stop failed, or completed with errors.
2560+0 records in
2560+0 records out
10485760 bytes (10 MB) copied, 0.0575009 seconds, 182 MB/s
Successfully deconfigured Oracle clusterware stack on this node

On peut vérifier :

# cat /etc/oracle/ocr.loc
cat: /etc/oracle/ocr.loc: No such file or directory
# cat /etc/oracle/olr.loc
cat: /etc/oracle/olr.loc: No such file or directory

On peut maintenant exécuter le script root.sh

# $GRID_HOME/root.sh
Running Oracle 11g root.sh script...


The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/11.2.0/grid
........................
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
2015-12-17 16:17:54: Parsing the host name
2015-12-17 16:17:54: Checking for super user privileges
2015-12-17 16:17:54: User has super user privileges
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
LOCAL ADD MODE
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Adding daemon to inittab
CRS-4123: Oracle High Availability Services has been started.
ohasd is starting
...........
The inventory is located at /u01/app/oraInventory
'UpdateNodeList' was successful.

On peut revérifier les localisations :

# cat /etc/oracle/olr.loc
olrconfig_loc=/u01/app/11.2.0/grid/cdata/fouss-rac1.olr
crs_home=/u01/app/11.2.0/grid
# cat /etc/oracle/ocr.loc
ocrconfig_loc=+DATA
local_only=FALSE

Le fichier est créé, mais il faut tout de suite penser à mettre en place une politique de sauvegarde.