Enregistrement automatique des services par PMON

  • Si votre base est bien installée.
  • Si votre serveur est bien configuré.
  • Si un service est créé dans la base (ok, il y en a toujours un).
  • Si le listener LISTENER est démarré sur le port 1521.
  • Et même si les paramètres local_listener ou remote_listener ne sont pas renseignés.

ALORS pmon enregistre le service auprès du listener.

Oui mais des fois, ça ne marche pas, et on ne sait pas trop pourquoi.

C’est donc à ce moment là qu’en général on se demande quels sont les automatismes suivis par Oracle, les paramètres que le moteur utilise par défaut pour effectuer son enregistrement.

En premier lieu, il recherche le nom de l’hôte sur lequel il se trouve par le truchement de la commande hostname. Cela lui permet de générer la valeur par défaut de local_listener : (ADDRESS=(PROTOCOL=TCP)(HOST=monbeauserveur)(PORT=1521)).

En second lieu il vérifie la présence du local listener en effectuant la conversion nom d’hôte, adresse IP selon la manière indiquée dans les fichiers /etc/resolv.conf /etc/hosts.conf après avoir soigneusement vérifié le contenu du fichier /etc/hosts. Normalement l’adresse IP est résolue dans /etc/hosts, parce qu’oracle vous a dit de renseigner le fichier,c’est un pré-requis d’installation.

Si ça déconne donc, i y a de fortes chances que ça soit au niveau de la résolution de nom.

Depuis sa version 11, oracle vous propose de tracer l’enregistrement auprès du listener par l’instruction suivante :

alter system set events='immediate trace name listener_registration level 3';

Cette instruction génère un fichier de trace <ORACLE_SID>PMON<PPID>.trc au niveau du background_dump_dest (donc à coté du fichier alert.log).

Le fichier à la gueule suivante :

[...]

------------------------------
Start Registration Information
------------------------------

Last update: 2234589688 (18 seconds ago)
Flag: 0xc, 0x0
State: succ=0, wait=0, fail=1

Listeners:
0 - (ADDRESS=(PROTOCOL=TCP)(HOST=monbeauserveur)(PORT=1521))
state=4, err=3
nse[0]=12571, nse[1]=12560, nte[0]=513, nte[1]=113, nte[2]=0
ncre=0
endp=(ADDRESS=(PROTOCOL=TCP)(HOST=monbeauserveur)(PORT=1521))
flg=0x0 nse=0

[...]
----------------------------
End Registration Information
----------------------------

Là on a un enregistrement qui n’a pas abouti (fail=1 sur la ligne qui commence par state) et la cause est visible sur la ligne qui commence par endp; la conversion en IP ne s’est pas faite. Un enregistrement réussi présentera plutôt les lignes suivante:

[...]

------------------------------
Start Registration Information
------------------------------

Last update: 2064522366 (24 seconds ago)
Flag: 0x4, 0x0
State: succ=1, wait=0, fail=0

Listeners:
0 - (ADDRESS=(PROTOCOL=TCP)(HOST=monbeauserveur)(PORT=1521))
state=1, err=0
nse[0]=0, nse[1]=0, nte[0]=0, nte[1]=0, nte[2]=0
ncre=0
endp=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.42)(PORT=1521)))
flg=0x80000000 nse=0

[...]
----------------------------
End Registration Information
----------------------------

lsnrctl status permet de vérifier l’IP qui est écoutée :

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 24-MAR-2015 11:32:08

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(HOST=192.168.0.42)(PROTOCOL=tcp)(PORT=1521)))
[...]

cat /etc/hosts permet de vérfier la résolution

127.0.0.1 localhost.localdomain localhost
192.168.0.42 monbeauserveur monbeauserveur.monbeaudomaine.fr

qui fonctionne plutôt bien.

ou

127.0.0.1 localhost.localdomain localhost
192.168.0.54 monbeauserveur monbeauserveur.monbeaudomaine.fr

qui, de fait, à plus de mal.