配置Oracle监听器以监听外部

Ant*_*rev 5 linux oracle listener

我被 Oracle 监听器配置困住了。它正在监听本地主机,但我无法从外部计算机访问它。网络工作正常,Oracle 安装在虚拟机上,我通过 ssh 工作。

我的listener.ora文件:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS_LIST=
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.110)(PORT = 1530))
    )
  )

ADR_BASE_LISTENER = /home/oracle/app/oracle
Run Code Online (Sandbox Code Playgroud)

tnsnames.ora

QSYSTEM =
  (DESCRIPTION =
    (ADDRESS_LIST=
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.110)(PORT = 1530))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = QSYSTEM)
    )
  )
Run Code Online (Sandbox Code Playgroud)

其中QSYSTEM是数据库 SID,192.168.10.110是主机 netstat 输出的地址。

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:50904           0.0.0.0:*               LISTEN      9650/ora_d000_QSYST
tcp        0      0 192.168.10.110:22       10.48.202.125:63350     ESTABLISHED 2994/sshd: oracle [
tcp        0      0 127.0.0.1:14468         127.0.0.1:1521          ESTABLISHED 9618/ora_pmon_QSYST
udp        0      0 127.0.0.1:60990         0.0.0.0:*                           9652/ora_s000_QSYST
udp        0      0 127.0.0.1:20566         0.0.0.0:*                           9650/ora_d000_QSYST
udp        0      0 0.0.0.0:21371           0.0.0.0:*                           9646/ora_mmon_QSYST
udp        0      0 127.0.0.1:58024         0.0.0.0:*                           9618/ora_pmon_QSYST
Run Code Online (Sandbox Code Playgroud)

lsnrctl status输出:

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 02-MAR-2016 13:57:16

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

TNS-01150: The address of the specified listener name is incorrect
 NL-00303: syntax error in NV string
Run Code Online (Sandbox Code Playgroud)

我在 RHEL 7 上使用 Oracle 11g Standard。

解决方案:当我用 IP 地址替换 localhost 并正确更改和格式化后listener.oratnsnames.ora我就建立了连接。

Ale*_*ole 2

如果您希望侦听器使用这两个地址处理内部和外部连接,您需要在 中列出这两个地址listener.ora,并添加ADDRESS_LIST带有平衡括号的级别:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.110)(PORT = 1521))
      )
    )
  )
Run Code Online (Sandbox Code Playgroud)

两个地址可以使用相同的端口,如果您愿意,也可以使用不同的端口。如果它们不同,单独的侦听器可能不会那么混乱,但无论哪种方式都会起作用。

然后,您需要停止并启动侦听器以获取更改。lsnrctl status您可以使用和/或 netstat验证它正在监听的内容。

您可能还想通过查看初始化参数来检查数据库的注册情况LOCAL_LISTENER。如果未设置或正在使用主机名,请检查它是否解析为您指定的 IP 地址之一 - 通过 DNS 或在 /etc/hosts 中。如果它无法正确解析,则它将无法向侦听器注册,不会lsnrctl services列出其服务名称,并且您将无法使用服务名称通过 SQL*Net 进行连接。(或者 SID,因为您没有SID_LIST_LISTENER条目)。