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


13

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

Éditer:

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ù elle est réellement configurée.

Réponses:


14

Un peu tard pour la fête sur celui-ci ...

La base de données doit s'enregistrer automatiquement auprès de l'écouteur, ce qui rend les SID_LISTentrées redondantes, et cela semble se produire avec votre 192.168.111.111environnement. 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 une alter system registercommande. La base de données utilise le LOCAL_LISTENERparamètre pour identifier l'écouteur auprès duquel elle doit s'inscrire. Par défaut, cette valeur est nulle, ce qui, selon la documentation, est équivalent à hostname:1521.

Si alter system registerle service n'apparaît pas dans la lsnrctl statussortie, 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'écouteur est activé, ou LOCAL_LISTENERest défini sur quelque chose de non valide pour le boîte virtuelle. Vous pouvez définir le LOCAL_LISTENERpour correspondre listener.oradirectement au, 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 qui contient ces détails dans votre tnsnames.ora. Par exemple, si vous ajoutez une tnsnames.oraentré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 réel avantage que je peux voir en utilisant la tnsnames.oraversion, à 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 des comptes différents (par exemple avec un gridutilisateur pour RAC / HA).

Il y a plus LOCAL_LISTENER ici .

Edit: Et cela semble assez complet.


-2

J'ai rencontré un problème similaire et j'ai constaté que l'arrêt et le redémarrage de l'instance provoquaient son enregistrement correct.

Cela peut être fait en utilisant la ligne de commande sqlplus. Vous devrez vous connecter en tant qu'utilisateur avec la syntaxe des privilèges SYSDBA (par exemple système):

sqlplus name/pass as SYSDBA

puis exécutez «shutdown» et attendez qu'il se termine. puis exécutez «démarrage» et attendez qu'il se termine.

les doigts croisés, vous devriez maintenant avoir une instance enregistrée auprès de l'auditeur.

Pour vérifier que c'est le cas, vous pouvez lancer lsnrctl et exécuter la commande 'status'. si cela n'a pas fonctionné, vous verrez toujours le message «L'auditeur ne prend en charge aucun service» sinon vous verrez quelque chose comme

Service "horse" has 1 instance(s).
 Instance "horse", status READY, has 1 handler(s) for this service...

4
S'il vous plaît, ne le faites pas ... il n'est pas nécessaire de redémarrer la base de données juste pour l'enregistrement de l'auditeur. "modifier le registre du système;" de sqlplus le fait, et c'était déjà écrit dans la réponse précédente.
Balazs Papp du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.