it-swarm.com.de

Wie konfiguriere ich einen Oracle Listener ohne SID_LIST_LISTENER in listener.ora?

Ich habe Zugriff auf einen Oracle 11g-Server mit dem folgenden listener.ora

# 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))
    )
  )

und es bedient alle Instanzen auf diesem Server, wie ich anhand überprüfen kann

lsnrctl status

Mein Problem ist, dass ich bei einer Neuinstallation von Oracle 11g in einer virtuellen Maschine eine listener.ora wie verwenden muss

# 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

Ohne die SID_LIST_LISTENER-Enties, d. H. Mit einem Listener.ora wie dem vom anderen Server, den ich bekomme

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.

Die letzte Nachricht wird übersetzt in

Der Listener unterstützt keine Dienste.

Ich habe keine Ahnung, warum sich diese beiden Server unterschiedlich verhalten. Ich habe weder in Konfigurationsdateien noch in Registrierungsschlüsseln Hinweise gefunden.

Bearbeiten:

Ich denke, die Antwort ist irgendwo in diesem Beitrag vergraben von Burleson Consulting , aber ich finde nicht die Stelle, an der sie tatsächlich konfiguriert ist.

13
bernd_k

Etwas spät zur Party in diesem Fall ...

Die Datenbank sollte sich automatisch beim Listener registrieren, wodurch die SID_LIST - Einträge überflüssig werden. Dies scheint in Ihrer 192.168.111.111 - Umgebung zu geschehen. Wenn der Listener nach der Datenbank gestartet wird, kann es eine Weile dauern, bis er sich registriert, und es kann Situationen geben, in denen dies überhaupt nicht der Fall ist.

Sie können versuchen, es mit einem Befehl alter system register Registrieren zu lassen. Die Datenbank verwendet den Parameter LOCAL_LISTENER, Um den Listener zu identifizieren, bei dem sie sich registrieren soll. Standardmäßig ist das null, was laut Dokumentationhostname:1521 Entspricht.

Wenn alter system register Den Dienst nicht in der Ausgabe von lsnrctl status Erscheint, kann ich vermuten, dass der Hostname nicht identifiziert oder aufgelöst werden kann oder dass er in eine andere Adresse als die Adresse aufgelöst wird Listener ist eingeschaltet oder LOCAL_LISTENER ist auf etwas Ungültiges für die virtuelle Box eingestellt. Sie können LOCAL_LISTENER So einstellen, dass es entweder direkt mit listener.ora Übereinstimmt, z.

alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(PORT=1521))' scope=both;
alter system register;

Oder Sie können einen Alias ​​verwenden, der diese Details in Ihrem tnsnames.ora Enthält. Wenn Sie beispielsweise einen tnsnames.ora - Eintrag wie folgt hinzufügen:

MY_LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
  )

Dann könnten Sie:

alter system set local_listener='MY_LISTENER' scope=both;
alter system register;

Der einzige wirkliche Vorteil, den ich bei der Verwendung der Version tnsnames.ora Sehen kann, ist, abgesehen von der Kürze, dass Sie die Konfiguration in den SQL * Net-Dateien und nicht in der Datenbank ändern können. und selbst das scheint nur dann wirklich nützlich zu sein, wenn Sie Datenbanken zwischen Computern klonen oder Ihre Listener und Datenbanken unter verschiedenen Konten ausführen (z. B. mit einem grid Benutzer für RAC/HA).

Es gibt mehr zu LOCAL_LISTENERhier .

Edit: Und this scheint ziemlich umfassend zu sein.

14
Alex Poole