配置Oracle侦听器以进行外部侦听

时间:2016-03-01 16:15:44

标签: linux oracle listener

我坚持使用Oracle侦听器配置。它正在收听localhost,但我无法通过外部计算机访问它。网络工作正常,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

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

其中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

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

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

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

1 个答案:

答案 0 :(得分:0)

如果您希望您的侦听器使用这两个地址处理内部和外部连接,您需要在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))
      )
    )
  )

同一个端口可用于两个地址,如果您愿意,它们可以不同。如果它们不同,则单独的监听器可能不那么令人困惑,但它会以任何一种方式工作。

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

您可能还想通过查看LOCAL_LISTENER初始化参数来检查数据库的注册方式。如果未设置或使用主机名,请检查它是否已解析为您指定的IP地址之一 - 通过DNS或/ etc / hosts。如果它无法正常解决,那么它就无法向听众注册,lsnrctl services不会列出其服务名称,而您也不会[...]能够使用服务名称通过SQL * Net进行连接。 (或者是SID,因为您没有SID_LIST_LISTENER条目。)