web-dev-qa-db-fra.com

Comment configurer un écouteur Oracle sans SID_LIST_LISTENER dans listener.ora?

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é.

13
bernd_k

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_LISTENERici .

Edit: Et this semble assez complet.

14
Alex Poole