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.
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_LISTENER
zde .
Edit: A toto se zdá docela komplexní.