两个 Oracle TNS 侦听器

Two Oracle TNS Listener

当我想在 SQLDeveloper 中连接到我的数据库时,我收到一条 TNS 侦听器错误消息。 当我在我的服务中停止 OracleOraClient11g_home1_32bitTNSListener 并重试连接时,它工作正常。然后 OracleXETnsListener 是 运行。 如何避免停止另一个可以启动的一个侦听器?

我有两个配置了端口 1521 的 listener.ora 文件。所以我认为它与端口有关?

在任何操作系统上,您都不允许在同一个网络接口上的同一个端口(在本例中为 1521)上侦听 2 个进程(我假设您只有 1 个网络接口)。不然操作系统怎么知道把端口连接交给哪个进程呢!

正如 Alex 所提到的,您不需要 运行 多个侦听器。禁用其中一项服务并编辑指向正确服务的 listener.ora - 默认情况下,它位于 oracle_home/network/admin 目录下,但如果您更改了系统上的 TNS_ADMIN 变量值,它将在那里。如果愿意,您可以为 SID/Service 名称添加另一个侦听器,但在 Windows 的情况下,它将自动获取系统上 运行ning 的所有实例。

以防万一你真的想要 运行 2 个监听器(例如,如果你有一个非常旧的 RDBMS 版本,你只需要这样做)你可以编辑其中一个 listener.ora文件并将端口更改为 1522。示例如下:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ROBS)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

然后您将连接的 tnsnames.ora 更改为指向该端口,如下所示:

SCN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ROBS)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = SCN)
    )
  )

或者使用 SQLDeveloper,您可以使用 TNS 直接选项直接在 IDE 上更改端口(如果您是这样配置的)。