如何在listener.ora中配置没有SID_LIST_LISTENER的Oracle Listener?


13

我可以使用以下listener.ora访问ORACLE 11g服务器

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

并为该服务器上的所有实例提供服务,我可以通过以下方式进行验证

lsnrctl status

我的问题是,当我在虚拟机中全新安装Oracle 11g时,必须使用listener.ora

# 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

没有SID_LIST_LISTENER实体,即像从其他服务器那样使用listener.ora,我得到

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.

最后一条消息翻译为

侦听器不支持任何服务。

我不知道为什么这两个服务器的行为不同。我没有在配置文件或注册表项中找到任何提示。

编辑:

我猜答案是Burleson Consulting埋在此帖子中某个地方,但我找不到实际配置的位置。

Answers:


14

在这个聚会上有点晚了...

数据库应自动向侦听器注册,从而使SID_LIST条目冗余,并且这似乎是在您的192.168.111.111环境中发生的。如果侦听器是在数据库之后启动的,则可能需要一段时间才能注册,并且在某些情况下它可能根本不这样做。

您可以尝试使用alter system register命令进行注册。数据库使用该LOCAL_LISTENER参数标识应向其注册的侦听器。默认情况下为null,根据文档,它等于hostname:1521

如果alter system register没有使服务出现在lsnrctl status输出中,那么我怀疑它无法识别主机名或无法解析该主机名,或者它正在解析为与侦听器所在的主机不同的地址,或者LOCAL_LISTENER被设置为对该主机无效的地址。虚拟盒子。您可以将设置为直接LOCAL_LISTENER匹配listener.ora,例如:

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

或者,您也可以使用别名中包含这些详细信息的别名tnsnames.ora。例如,如果添加如下tnsnames.ora条目:

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

然后,您可以:

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

tnsnames.ora除了简洁起见,我可以看到使用该版本的唯一真正优势是可以在SQL * Net文件而不是数据库中更改配置。甚至只有在您要在计算机之间克隆数据库,或者使侦听器和数据库在不同帐户下运行(例如,grid使用RAC / HA 的用户)时,这才显得真正有用。

还有更多的LOCAL_LISTENER 在这里

编辑:而且似乎相当全面。


-2

我有一个类似的问题,发现只是关闭并重新启动实例会导致它正确注册。

这可以通过使用sqlplus命令行来完成。您将需要以具有SYSDBA特权(例如系统)语法的用户身份登录:

sqlplus name/pass as SYSDBA

然后运行“关机”并等待其完成。然后运行“启动”并等待其完成。

用手指交叉,您现在应该已经向侦听器注册了一个实例。

要检查这种情况,可以启动lsnrctl并运行命令“ status”。如果没有奏效,您仍然会看到“监听器不支持任何服务”消息,否则您将看到类似

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

4
请,不要...根本没有必要仅出于侦听器注册而重新启动数据库。“更改系统寄存器;” 从sqlplus可以做到这一点,它已经在前面的答案中编写了。
Balazs Papp 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.