it-swarm-eu.dev

Jak nakonfigurovat Oracle Listener bez SID_LIST_LISTENER v listener.ora?

Mám přístup k serveru Oracle 11g pomocí následujícího 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))
    )
  )

a slouží všem instancím na tomto serveru, jak mohu ověřit pomocí

lsnrctl status

Můj problém je, že když provedu novou instalaci Oracle 11g ve virtuálním počítači, musím použít listener.ora jako

# 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

Bez zadání SID_LIST_LISTENER, tj. Pomocí listener.ora, jako je ten z jiného serveru, dostanu

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.

Poslední zpráva se přeloží do

Posluchač nepodporuje žádné služby.

Nemám ponětí, proč se tyto dva servery chovají jinak. V konfiguračních souborech ani v klíčích registru jsem nenašel žádné rady.

Upravit:

Myslím, že odpověď je někde pohřbena v tomto příspěvku od Burleson Consulting , ale nenajdu místo, kde je ve skutečnosti nakonfigurováno.

13
bernd_k

Trochu pozdě na párty ...

Databáze by se měla automaticky zaregistrovat u posluchače, čímž by položky SID_LIST Byly zbytečné, a zdá se, že se to děje s vaším prostředím 192.168.111.111. Pokud je posluchač spuštěn po databázi, může to chvíli trvat, než se zaregistruje, a mohou nastat situace, kdy tak neučiní vůbec.

Můžete se pokusit provést registraci pomocí příkazu alter system register. Databáze používá parametr LOCAL_LISTENER K identifikaci posluchače, s nímž by se měl zaregistrovat. Ve výchozím nastavení je null, což podle dokumentace odpovídá hostname:1521.

Pokud alter system register Nezjistí, že by se služba objevila ve výstupu lsnrctl status, Pak bych měla podezření, že není schopna identifikovat hostitelské jméno nebo jej vyřešit, nebo to řeší na jinou adresu, než je ta, posluchač je zapnutý, nebo je LOCAL_LISTENER nastaven na něco neplatného pro virtuální pole. Můžete nastavit LOCAL_LISTENER Tak, aby odpovídal listener.ora Přímo, např .:

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

Nebo můžete použít alias, který má tyto podrobnosti ve vašem tnsnames.ora. Pokud například přidáte položku tnsnames.ora, Například:

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

Pak můžete:

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

Jedinou skutečnou výhodu, kterou vidím při používání verze tnsnames.ora, Snad kromě stručnosti, je to, že můžete změnit konfiguraci v souborech SQL * Net spíše než v databázi; a dokonce to opravdu vypadá, že je užitečné, pouze pokud klonujete databáze mezi počítači, nebo pokud vaše posluchače a databáze běží pod různými účty (např. s uživatelem grid pro RAC/HA).

Více na LOCAL_LISTENERzde .

Edit: A toto se zdá docela komplexní.

14
Alex Poole