Настройка слушателя Oracle для внешнего прослушивания
Я застрял с конфигурацией слушателя 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
Я использую Oracle 11g Standard на RHEL 7.
Решение: Когда я заменил localhost на IP-адрес и правильно изменил и отформатировал listener.ora
а также tnsnames.ora
Я установил связь.
1 ответ
Если вы хотите, чтобы ваш слушатель обрабатывал внутренние и внешние соединения, используя оба адреса, вы должны перечислить оба в 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
записей).