当我想在 SQLDeveloper 中连接到我的数据库时,我收到一条 TNS 侦听器错误消息。当我在我的服务中停止 OracleOraClient11g_home1_32bitTNSListener 并重试连接时,它工作正常。然后 OracleXETnsListener 正在运行。如何避免停止另一个可以启动的一个侦听器?
我有两个配置了端口 1521 的 listener.ora 文件。所以我认为它与端口有关?
在任何操作系统上,不允许有 2 个进程在同一个网络接口上的同一个端口(在本例中为 1521)上侦听(我将假设您只有 1 个网络接口)。否则操作系统怎么会知道将端口连接交给哪个进程!
正如亚历克斯所提到的,您不需要运行多个侦听器。禁用其中一项服务并编辑指向正确服务的 listener.ora - 默认情况下,它位于 oracle_home/network/admin 目录下,但如果您更改了系统上的 TNS_ADMIN 变量值,它将在那里。如果您愿意,您可以为 SID/服务名称添加另一个侦听器,但在 Windows 的情况下,它将自动获取系统上运行的所有实例。
万一你真的想运行 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 上更改端口,如果您是这样配置的。