IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Oracle RAC : dépannage du cluster

Avancé

Procédure manuelle de décatalogage et de recatalogage d'une base dans un OCR/RAC Oracle ♪

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Historique et glossaire

Merci à l'aimable participation de bouyao pour ce petit historique.

Historiquement, Oracle fait confiance au vendeur d'OS de fournir la couche clusterware afin d'utiliser Oracle Parallel Server (OPS), et dernièrement RAC. Le DBA devrait demander à l'administrateur OS de configurer l'OS et de créer le cluster en utilisant le logiciel fourni par le vendeur OS.

Depuis la 7.3.3.0.1 sur les plates-formes Windows, ça commence à changer. Par souci de la nécessité, à cause du manque d'un logiciel viable de clustering sous Windows, Oracle commence à fournir une couche de clustering sur les plates-formes Windows pour utiliser de l'OPS. Par la suite, avec la croissance de la popularité de Linux , Oracle a été obligé de fournir le clusterware sous Linux. Avant la 9i, le clusterware a été distribué par les vendeurs OS. Depuis Oracle 9i, le clusterware a été intégré comme une part entière d' Oracle 9i Edition Entreprise.

Avec Oracle 10g, Oracle a introduit le CRS, supporté sur la majorité des OS (Sun, HP, Tru64, AIX, Windows, etc.). Quand on utilise Oracle CRS, il est possible d'exécuter le RAC dans un Oracle Edition Standard.

Le CRS est constitué de trois composants majeurs, qui se manifestent comme des deamons (inittab pour Unix et les Services sous Windows). Il existe trois deamons : OCSSD (cluster synchronization services daemon) , CRSD qui gère la disponibilité des ressources et EVMD (event logger daemon).

OCSSD et EVMD se lancent sous le compte Oracle et CRSD sous le compte root.

Acronyme

Description

CRS

Cluster Ready Services

RAC

Real Application Cluster

OCR

Oracle Cluster Registry

OCFS

Oracle Cluster File System

II. Problématique

Nous sommes en présence d'un environnement Oracle en RAC, disposé sur deux nœuds. Trois bases Oracle sont présentes sur ces deux nœuds. Nous avons donc, en chiffres :

  • un RAC ;
  • deux nœuds (deux machines) : DVPPORA1 et DVPPorA2 ;
  • trois bases de données Oracle (REP1P, DVP1P et DMP1P) ;
  • six instances gérant ces trois bases (REP1P1 et REP1P2, DVP1P1 et DBVP1P2, DMP1P1 et DMP1P2) ;
  • trois services TAF (REP1P1, DVP1P1, DMP1P1) ;
  • deux listeners, un pour chaque machine (LISTENER_DVPPORA1 et LISTENER_DVPPORA2).

Suite à un redémarrage du serveur AIX sur l'un des deux nœuds du cluster, on constate les statuts suivants :

 
Sélectionnez
oracle> crs_stat -t

Name           Type           Target    State     Host        
------------------------------------------------------------
ora....1P1.srv application    ONLINE    ONLINE    DVPPORA1   
ora....1P2.srv application    ONLINE    ONLINE    DVPPORA2   
ora....B1P1.cs application    ONLINE    ONLINE    DVPPORA2   
ora....P1.inst application    ONLINE    ONLINE    DVPPORA1   
ora....P2.inst application    ONLINE    ONLINE    DVPPORA2   
ora.DVP1P.db   application    ONLINE    ONLINE    DVPPORA2   
ora....1P1.srv application    ONLINE    OFFLINE               
ora....1P2.srv application    ONLINE    OFFLINE               
ora....P1P1.cs application    ONLINE    OFFLINE               
ora....P1.inst application    ONLINE    OFFLINE               
ora....P2.inst application    ONLINE    OFFLINE               
ora....1P1.srv application    ONLINE    ONLINE    DVPPORA1   
ora....1P2.srv application    ONLINE    ONLINE    DVPPORA2   
ora....P1P1.cs application    ONLINE    ONLINE    DVPPORA2   
ora....P1.inst application    ONLINE    ONLINE    DVPPORA1   
ora....P2.inst application    ONLINE    ONLINE    DVPPORA2   
ora.REP1P.db   application    ONLINE    ONLINE    DVPPORA2   
ora....A1.lsnr application    ONLINE    ONLINE    DVPPORA1   
ora....RA1.gsd application    ONLINE    ONLINE    DVPPORA1   
ora....RA1.ons application    ONLINE    ONLINE    DVPPORA1   
ora....RA1.vip application    ONLINE    ONLINE    DVPPORA1   
ora....A2.lsnr application    ONLINE    ONLINE    DVPPORA2   
ora....RA2.gsd application    ONLINE    ONLINE    DVPPORA2   
ora....RA2.ons application    ONLINE    ONLINE    DVPPORA2   
ora....RA2.vip application    ONLINE    ONLINE    DVPPORA2

Le service DVP1P.db n'apparaît plus dans la liste des services de l'OCR. Il s'agit là d'un problème connu de corruption de l'OCR par le redémarrage d'un des nœuds.

III. Enjeu et contraintes de production

Pour bien faire, il nous faudrait repartir d'une sauvegarde de l'OCR. Ceci nécessiterait malheureusement l'arrêt total des deux nœuds, et donc une interruption de services des six instances (quatre saines et deux mauvaises), ce qui est souvent inacceptable en contrainte de production.

En l'état :

  • il nous est impossible de démarrer la base en standalone sur l'un des deux nœuds, celle-ci étant toujours référencée dans l'OCR ;
  • le décataloguage de la base marche, mais le recataloguage est impossible, car les deux instances semblent toujours être cataloguées, bien qu'aucun processus Oracle concernant cette base ne soit présent sur aucun des deux nœuds (via ps ax | grep oracle) ;
  • le processus d'écoute (commun à toutes les instances d'un même nœud) fonctionne correctement, le tnsping fonctionne.

Juste pour information, la procédure de restauration de l'OCR est décrite ici, mais ce ne sera pas la solution appliquée dans notre cas

III-A. Restauration de l'OCR

Interruption de service !!!

Arrêt du CRS sur tous les nœuds (en tant que root ou via commande sudo)

 
Sélectionnez
oracle> sudo crsctl stop crs
oracle> sudo /usr/sbin/slibclean

Localisation les backups OCR via ocrconfig

 
Sélectionnez
       oracle> ocrconfig -showbackup

        DVPPORA1     2006/04/27 09:00:35     /oracle/crs10gr2/cdata/crs10gr2
        DVPPORA1     2006/04/27 05:00:35     /oracle/crs10gr2/cdata/crs10gr2
        DVPPORA1     2006/04/27 01:00:34     /oracle/crs10gr2/cdata/crs10gr2
        DVPPORA1     2006/04/25 17:47:13     /oracle/crs10gr2/cdata/crs10gr2
        DVPPORA1     2006/04/13 09:46:34     /oracle/crs10gr2/cdata/crs10gr2

Après avoir choisi le fichier OCR à restaurer, faire la restauration via ocrconfig -restore.

 
Sélectionnez
    oracle> cd /oracle/crs10gr2/cdata/crs10gr2
    oracle> sudo ocrconfig -restore week_.ocr

Il ne doit pas y avoir de message d'erreurs.

Redémarrage du CRS sur tous les nœuds.

 
Sélectionnez
oracle> sudo crsctl start crs

oracle> crs_stat -t

    Name           Type           Target    State     Host        
    ------------------------------------------------------------
    ora....1P1.srv application    ONLINE    ONLINE    DVPPORA1   
    ora....1P2.srv application    ONLINE    ONLINE    DVPPORA2   
    ora....MB1P.cs application    ONLINE    ONLINE    DVPPORA2   
    ora....P1.inst application    ONLINE    ONLINE    DVPPORA1   
    ora....P2.inst application    ONLINE    ONLINE    DVPPORA2   
    ora.DMB1P.db   application    ONLINE    ONLINE    DVPPORA1   
    ora....1P1.srv application    ONLINE    ONLINE    DVPPORA1   
    ora....VP1P.cs application    ONLINE    ONLINE    DVPPORA1   
    ora....P1.inst application    ONLINE    ONLINE    DVPPORA1   
    ora....P2.inst application    ONLINE    ONLINE    DVPPORA2   
    ora.DVP1P.db   application    ONLINE    ONLINE    DVPPORA1   
    ora....03.lsnr application    ONLINE    ONLINE    DVPPORA1   
    ora....RA1.gsd application    ONLINE    ONLINE    DVPPORA1   
    ora....RA1.ons application    ONLINE    ONLINE    DVPPORA1   
    ora....RA1.vip application    ONLINE    ONLINE    DVPPORA1   
    ora....06.lsnr application    ONLINE    ONLINE    DVPPORA2   
    ora....RA2.gsd application    ONLINE    ONLINE    DVPPORA2   
    ora....RA2.ons application    ONLINE    ONLINE    DVPPORA2   
    ora....RA2.vip application    ONLINE    ONLINE    DVPPORA2

Contrôles

 
Sélectionnez
oracle> crsctl check crs

    CSS appears healthy
    CRS appears healthy
    EVM appears healthy

oracle> ocrcheck

    Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     262144
         Used space (kbytes)      :       5356
         Available space (kbytes) :     256788
         ID                       : 1891973498
         Device/File Name         : /oradata/crsdvp1p/ocr_dvp1p.dbf
                                    Device/File integrity check succeeded
                                    Device/File not configured
         Cluster registry integrity check succeeded

III-B. Backup de l'OCR

À toutes fins utiles, la commande de sauvegarde de l'OCR qu'il sera bon d'exécuter à la fin de notre réparation.

 
Sélectionnez
oracle> sudo ocrconfig -export /oradata/crsdvp1p/backup_ocr/ocr_du_29112006.dbf -s online

Par rapport à la place que ces fichiers prennent et au service qu'ils peuvent rendre, il est utile d'en garder des sauvegardes régulières et nombreuses en local.

IV. Procédure manuelle

Supprimer toute la configuration DVP1P de l'OCR, en forçant avec l'option -f :

  • -d Nom de la base ;
  • -f Option FORCE, nécessaire dans notre cas de figure.
 
Sélectionnez
oracle> srvctl remove database -d DVP1P -f

Réinscrire la base DVP1P dans l'OCR :

  • -d Nom de la base ;
  • -o Localisation des binaires Oracle (ORACLE_HOME) ;
  • -p Localisation du spfile central si celui-ci ne se trouve pas sous ${ORACLE_HOME}/dbs.
 
Sélectionnez
oracle> srvctl add database -d DVP1P -o /oracle/db10gr2 -p /oradata/dbdvp1p/admin/spfileDVP1P.ora

Associer les instances à la base, en spécifiant sur quel nœud se trouve chaque instance :

  • -d Nom de la base ;
  • -i Nom de l'instance ;
  • -n Nom du nœud sur lequel se situe l'instance.
 
Sélectionnez
oracle> srvctl add instance -d DVP1P -i DVP1P1 -n DVPPORA1 
srvctl add instance -d DVP1P -i DVP1P2 -n DVPPORA2

Démarrer la base et les instances… la seconde instance prend un certain temps à passer en ONLINE

 
Sélectionnez
srvctl start database -d DVP1P

Créer le TAF, puis le démarrer. Cela peut se faire via dbca, mais la commande en ligne est spécifiée ici :

  • -d Nom de la base ;
  • -s Nom du service (qui doit être différent du nom de la base) ;
  • -r Noms des instances qui doivent être accessibles pour le service (Preferred) ;
  • -P Type de service TAF (None, Basic ou Preselect).
 
Sélectionnez
oracle> srvctl add service -d DVP1P -s DVP1P1 -r "DVP1P1,DVP1P2"  -P basic
srvctl start service -d DVP1P

L'état de notre CRS est maintenant d'aplomb.

 
Sélectionnez
oracle> crs_stat -t

    Name           Type           Target    State     Host        
    ------------------------------------------------------------
    ora....1P1.srv application    ONLINE    ONLINE    DVPPORA1   
    ora....1P2.srv application    ONLINE    ONLINE    DVPPORA2   
    ora....MB1P.cs application    ONLINE    ONLINE    DVPPORA2   
    ora....P1.inst application    ONLINE    ONLINE    DVPPORA1   
    ora....P2.inst application    ONLINE    ONLINE    DVPPORA2   
    ora.DMB1P.db   application    ONLINE    ONLINE    DVPPORA1   
    ora....1P1.srv application    ONLINE    ONLINE    DVPPORA1   
    ora....VP1P.cs application    ONLINE    ONLINE    DVPPORA1   
    ora....P1.inst application    ONLINE    ONLINE    DVPPORA1   
    ora....P2.inst application    ONLINE    ONLINE    DVPPORA2   
    ora.DVP1P.db   application    ONLINE    ONLINE    DVPPORA1   
    ora....03.lsnr application    ONLINE    ONLINE    DVPPORA1   
    ora....RA1.gsd application    ONLINE    ONLINE    DVPPORA1   
    ora....RA1.ons application    ONLINE    ONLINE    DVPPORA1   
    ora....RA1.vip application    ONLINE    ONLINE    DVPPORA1   
    ora....06.lsnr application    ONLINE    ONLINE    DVPPORA2   
    ora....RA2.gsd application    ONLINE    ONLINE    DVPPORA2   
    ora....RA2.ons application    ONLINE    ONLINE    DVPPORA2   
    ora....RA2.vip application    ONLINE    ONLINE    DVPPORA2

DBA, tu as bien fait ton travail : va dormir en paix… pour ce qu'il te reste comme nuit…

V. Recréation complète d'un OCR corrompu

Lorsqu'il n'est plus possible de s'en sortir avec des sauvegardes d'OCR et que celui-ci semble désespérément corrompu, ne reste plus que la solution ultime (avant la réinstallation totale !) de le nettoyer totalement. Cette procédure vient de la documentation d'Oracle même : note Metalink 399482.1. La voici résumée : veillez à exécuter tous ces ordres de manière séquentielle et précise !

À exécuter sur tous les nœuds du RAC, en tant que root.

 
Sélectionnez
${CRS_HOME}/install/rootdelete.sh

N'exécutez par contre pas le script ${CRS_HOME}/install/rootdeinstall.sh qui aurait pour conséquence de supprimer les binaires CRS, vous obligeant alors à passer par une réinstallation du logiciel de clusterware.

Contrôlez ensuite que tout processus Oracle est arrêté sur tous les nœuds. Les ordres suivants ne doivent retourner aucun processus :

 
Sélectionnez
ps -e | grep ocs 
ps -e | grep crs 
ps -e | grep evm

À exécuter sur tous les nœuds du RAC, en tant que root

 
Sélectionnez
${CRS_HOME}/install/root.sh

Ne reste plus qu'ensuite à repasser par le chapitre IV pour recataloguer tous les composants.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2006 Fadace. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.