我坚持使用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.ora
和tnsnames.ora
我建立了连接。
答案 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
条目。)