Problème d’accès à une base de données RAC par les services.

Il vous est peut-être déjà arrivé d’avoir des problèmes d’accès à une base de données RAC en utilisant un service de base de données qui passe par le scan listener, alors que tout semble normal.
Vous avez contrôlé la validité de votre chaine de connexion, et pourtant votre outils de connexion à la base favori vous informe que le service n’est pas connu du listener.
En vous connectant sur un des serveurs du cluster, vous avez vérifié que les scan listeners étaient bien actifs :
Sous le user root, après avoir positionné l’environnement correspondant au clusterware, lancez la commande suivante :

srvctl status scan_listener

et que le service en question était bien démarré. Pour cela, sous le user oracle et après avoir positionné l’environnement correspondant à la base de données, lancez la commande suivante :

srvctl status service –d Madatabase

Lorsque l’on lance sous le user oracle, la commande lsnrctl status, le nom du service apparait bien et lorsque l’on cherche à se connecter en passant par l’adresse vip, cela fonctionne.
Il faut savoir que la commande lsnrctl renvoie les informations connues par le listener local au serveur, et non pas des scan listeners. Pour résoudre notre problème, il faut donc vérifier que les instances s’enregistrent bien au niveau du scan listener.
Pour cela, pour chaque instance, lancez la séquence de commandes suivante :

sqlplus / as sysdba
show parameter remote_listener

sur chaque serveur, la réponse doit être du type :

clustername-scan:1521

Si ce n’est pas la cas, il faut modifier la valeur du paramètre au niveau de chaque instance. Pour cela :

sqlplus / as sysdba
alter system set remote_listener='clustername-scan:1521' ;
alter system register ;

 
La base de données doit maintenant être accessible à l’aide des services définis, en passant par les scan listeners.