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


13

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 dient allen Instanzen auf diesem Server, wie ich durch überprüfen kann

lsnrctl status

Mein Problem ist, dass ich, wenn ich eine Neuinstallation von Oracle 11g in einer virtuellen Maschine mache, 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 Einträge, dh mit einer listener.ora wie dieser vom anderen Server bekomme ich

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 in übersetzt

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 von Burleson Consulting vergraben , aber ich finde nicht die Stelle, an der sie tatsächlich konfiguriert ist.

Antworten:


14

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

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

Sie können versuchen, es mit einem zu registrieren alter system register Befehl . Die Datenbank verwendet den LOCAL_LISTENERParameter, um den Listener zu identifizieren, bei dem sie sich registrieren soll. Standardmäßig ist das null, was laut Dokumentation äquivalent ist zu hostname:1521.

Wenn alter system registerder Dienst nicht in der lsnrctl statusAusgabe angezeigt wird, kann er vermutlich weder den Hostnamen identifizieren noch ihn auflösen, oder er wird in eine andere Adresse aufgelöst als die, auf der der Listener sich befindet, oder er LOCAL_LISTENERist auf eine ungültige Adresse für festgelegt virtuelle Box. Sie können das einstellenLOCAL_LISTENER , dass er entweder listener.oradirekt übereinstimmt , zB:

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

Oder Sie können einen Alias ​​verwenden, in dem diese Details enthalten sind tnsnames.ora . Zum Beispiel, wenn Sie einen tnsnames.oraEintrag 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 sehen kann, ist die Verwendung des tnsnames.ora Version 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 gridBenutzer für RAC / HA).

Da ist noch mehr dran LOCAL_LISTENER hier .

Edit: Und das scheint ziemlich umfassend zu sein.


-2

Ich hatte ein ähnliches Problem und stellte fest, dass es beim Herunterfahren und Neustarten der Instanz zu einer korrekten Registrierung kam.

Dies kann mithilfe der sqlplus-Befehlszeile erfolgen. Sie müssen sich als Benutzer mit SYSDBA-Berechtigungssyntax (z. B. System) anmelden:

sqlplus name/pass as SYSDBA

Führen Sie dann "shutdown" aus und warten Sie, bis der Vorgang abgeschlossen ist. Führen Sie dann 'startup' aus und warten Sie, bis der Vorgang abgeschlossen ist.

Daumen drücken, jetzt sollte eine Instanz beim Listener registriert sein.

Um dies zu überprüfen, können Sie lsnrctl starten und den Befehl 'status' ausführen. Wenn es nicht geklappt hat, wird weiterhin die Meldung "Der Listener unterstützt keine Dienste" angezeigt. Andernfalls wird die Meldung angezeigt

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

4
Bitte nicht ... Sie müssen die Datenbank nicht neu starten, nur um den Listener zu registrieren. "Systemregister ändern" von sqlplus tut es, und es wurde bereits in der vorherigen Antwort geschrieben.
Balazs Papp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.