J'ai accès à un serveur Oracle 11g en utilisant le listener.ora suivant
# listener.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 192.168.111.111)(PORT = 1521))
)
)
et il sert toutes les instances sur ce serveur, comme je peux le vérifier par
lsnrctl status
Mon problème est que lorsque je fais une nouvelle installation d'Oracle 11g dans une machine virtuelle, je dois utiliser un listener.ora comme
# listener.ora Network Configuration File: C:\app\Oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(Oracle_HOME = C:\app\Oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(Oracle_HOME = C:\app\Oracle\product\11.2.0\dbhome_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = BMBK)
(Oracle_HOME = C:\app\Oracle\product\11.2.0\dbhome_1)
(SID_NAME = BMBK)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(Host = 169.254.200.102)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = C:\app\Oracle
Sans les entrées SID_LIST_LISTENER, c'est-à-dire en utilisant un listener.ora comme celui de l'autre serveur que je reçois
C:\Windows\system32>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 27-NOV-2011 10:14
:24
Copyright (c) 1991, 2010, Oracle. All rights reserved.
Anmeldung bei (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS des LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
Startdatum 27-NOV-2011 10:14:08
Uptime 0 Tage 0 Std. 0 Min. 18 Sek.
Trace-Ebene off
Sicherheit ON: Local OS Authentication
SNMP OFF
Parameterdatei des Listener C:\app\Oracle\product\11.2.0\dbhome_1\network\admin\
listener.ora
Log-Datei des Listener c:\app\Oracle\diag\tnslsnr\WSV-BK-W7en64-S\listener\al
ert\log.xml
Zusammenfassung Listening-Endpunkte...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=169.254.200.102)(PORT=1521)))
Der Listener unterst³tzt keine Services
Der Befehl wurde erfolgreich ausgef³hrt.
Le dernier message se traduit par
L'auditeur ne prend en charge aucun service.
Je n'ai aucune idée, pourquoi ces deux serveurs se comportent différemment. Je n'ai trouvé aucun indice dans les fichiers de configuration ni dans les clés de registre.
Modifier:
Je suppose que la réponse est quelque part enterrée dans ce post par Burleson Consulting , mais je ne trouve pas l'endroit où il est réellement configuré.
Un peu tard pour la fête sur celui-ci ...
La base de données doit s'enregistrer automatiquement auprès de l'auditeur, ce qui rend le SID_LIST
entrées redondantes, et cela semble se produire avec votre 192.168.111.111
environnement. Si l'écouteur est démarré après la base de données, l'enregistrement peut prendre un certain temps et il peut y avoir des situations où il ne le fait pas du tout.
Vous pouvez essayer de le faire enregistrer avec un alter system register
commande. La base de données utilise le LOCAL_LISTENER
paramètre pour identifier l'écouteur auprès duquel il doit s'enregistrer. Par défaut, cette valeur est nulle, ce qui, selon la documentation équivaut à hostname:1521
.
Si alter system register
ne fait pas apparaître le service dans le lsnrctl status
alors je soupçonne qu'il est incapable d'identifier le nom d'hôte ou de le résoudre, ou qu'il se résout à une adresse différente de celle sur laquelle l'auditeur se trouve, ou LOCAL_LISTENER
a la valeur invalide pour la boîte virtuelle. Vous pouvez définir le LOCAL_LISTENER
pour correspondre au listener.ora
directement, par exemple:
alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(PORT=1521))' scope=both;
alter system register;
Ou vous pouvez utiliser un alias contenant ces informations dans votre tnsnames.ora
. Par exemple, si vous ajoutez un tnsnames.ora
entrée comme:
MY_LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
)
Vous pourriez alors:
alter system set local_listener='MY_LISTENER' scope=both;
alter system register;
Le seul véritable avantage que je peux voir en utilisant le tnsnames.ora
la version, à part peut-être la brièveté, est que vous pouvez changer la configuration dans les fichiers SQL * Net plutôt que dans la base de données; et même cela ne semble vraiment utile que si vous clonez des bases de données entre des machines ou si vos écouteurs et bases de données s'exécutent sous différents comptes (par exemple avec un utilisateur grid
pour RAC/HA).
Il y a plus sur LOCAL_LISTENER
ici .
Edit: Et this semble assez complet.