Très souvent, vous pouvez obtenir Ressources Oracle RAC dans un état inconnu, ce qui est assez ennuyeux car vous ne pourrez pas utiliser la fonction srvctl de gérer cette ressource, de la démarrer et de l'arrêter.
Il existe un moyen d'y remédier et je vais vous montrer comment j'ai résolu ce problème dans un Exadata RAC à 2 nœuds.
Commençons par vérifier une ressource qui se trouve dans un état inconnu :
[oracle@xjhd01db02:PRO02INT2 ~]$ crsctl status res ora.pro02int.db -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.pro02int.db
1 ONLINE ONLINE xjhd01db01 Open,HOME=/u01/app/o
racle/product/19.0.0
.0/dbhome_1,STABLE
2 ONLINE UNKNOWN xjhd01db02 STABLE
--------------------------------------------------------------------------------
La ressource du nœud 2 est dans un état inconnu.
J'essaie d'abord d'arrêter et de supprimer l'instance, mais le cluster ne me le permet pas.
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl stop instance -d PRO02INT -i PRO02INT2
PRCR-1191 : The stop request failed because the resource is not running on nodes xjhd01db02.
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl remove instance -d PRO02INT -i PRO02INT2
Remove instance from the database PRO02INT? (y/[n]) y
PRKO-3147 : Instance PRO02INT2 cannot be removed because it is the only preferred instance for service(s) PRO02INT_bkup1,PRO02INT_bkup2 for database PRO02INT
Il indique que je ne peux pas supprimer l'instance parce que deux services ont cette instance comme préférée.
Je modifie ces ressources pour que l'autre instance soit privilégiée.
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl modify service -d PRO02INT -s PRO02INT_bkup1 -n -i PRO02INT1
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl modify service -d PRO02INT -s PRO02INT_bkup2 -n -i PRO02INT1
Je peux donc supprimer l'instance et l'ajouter à nouveau.
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl remove instance -d PRO02INT -i PRO02INT2
Remove instance from the database PRO02INT? (y/[n]) y
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl add instance -d PRO02INT -i PRO02INT2 -n xjhd01db02
Je vérifie à nouveau et je constate que la ressource est désormais hors ligne.
Bonnes nouvelles 🙂 .
[oracle@xjhd01db02:PRO02INT2 ~]$ crsctl status res ora.pro02int.db -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.pro02int.db
1 ONLINE ONLINE xjhd01db01 Open,HOME=/u01/app/o
racle/product/19.0.0
.0/dbhome_1,STABLE
2 OFFLINE OFFLINE STABLE
--------------------------------------------------------------------------------
Je peux maintenant démarrer l'instance.
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl start instance -d PRO02INT -i PRO02INT2
Je vérifie les services et tout fonctionne correctement.
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl status database -d PRO02INT
Instance PRO02INT1 is running on node xjhd01db01
Instance PRO02INT2 is running on node xjhd01db02
[oracle@xjhd01db02:PRO02INT2 ~]$ srvctl status service -d PRO02INT
Service PRO02INT_bkup1 is running on instance(s) PRO02INT1
Service PRO02INT_bkup2 is running on instance(s) PRO02INT1
Service PRO02INTplug is running on instance(s) PRO02INT1
J'espère que cela vous a été utile.