Подробный гайд: Ошибка «Listener state: Not listening»

Гайд по ошибке Oracle Listener Not listening: диагностика, проверка логов и портов, настройка listener.ora, восстановление работы

2026.06.01                  


Подробный гайд: Ошибка «Listener state: Not listening»Подробный гайд: Ошибка «Listener state: Not listening» Представлен подробный практический гайд по диагностике и устранению ошибки Listener state: Not listening в Oracle Database. Гайд ориентирован на версии 11gR2 – 19c и охватывает типичные сценарии, логи, команды и превентивные меры.


1. Что означает эта ошибка

Сообщение Listener state: Not listening появляется в выводе команды:

lsnrctl status

Оно означает, что процесс слушателя (tnslsnr) запущен, но не успешно привязался к сетевым конечным точкам (адресам/портам), указанным в listener.ora. В результате слушатель не принимает входящие соединения, хотя процесс существует в ОС.


Не путать с:

  • Instance "..." status UNKNOWN — проблема регистрации БД, а не самого слушателя.
  • ORA-12541: TNS:no listener — слушатель вообще не запущен или порт недоступен клиенту.

2. Типичные причины

Причина Как проявляется
Порт уже занят другим процессом lsnrctl start падает или статус показывает Not listening
Ошибка в listener.ora (синтаксис, дубли, неверный IP/хост) Слушатель не может распарсить или привязаться к адресу
Проблемы с DNS/hostname Listener привязывается к адресу, который не резолвится или не принадлежит серверу
Недостаточно прав (Linux/Unix) Попытка привязки к порту < 1024 без root/CAP_NET_BIND_SERVICE
Слушатель "завис" после reload или падения Процесс висит, но сетевые сокеты не восстановлены
Несоответствие ORACLE_HOME/PATH Бинарники tnslsnr не находят библиотеки или конфигурацию

3. Пошаговая диагностика

Шаг 1. Проверка текущего статуса

lsnrctl status

Обратите внимание на блок:

Listening Endpoints Summary...

Если он пуст или содержит (ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=...)) (NOT LISTENING), переходите к шагу 2.


Шаг 2. Просмотр логов слушателя (ADR)

С версии 11g логи хранятся в структуре ADR:

echo $ORACLE_BASE
# Обычно: /u01/app/oracle

# Перейдите в:
$ORACLE_BASE/diag/tnslsnr/$(hostname)/<имя_слушателя>/trace/
ls -l listener.log
tail -n 50 listener.log

Ищите строки:

  • TNS-12545: Connect failed because target host or object does not exist
  • TNS-12547: TNS:lost contact
  • Error listening on: (ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=...))
  • Permission denied или Address already in use

Шаг 3. Проверка занятости порта в ОС

# Linux
ss -tlnp | grep 1521
# или
netstat -tlnp | grep 1521
# или
lsof -i :1521

Если порт занят другим процессом (не tnslsnr), нужно остановить конфликтующий сервис или изменить порт в listener.ora.


Шаг 4. Проверка hostname и резолвинга

hostname -f
ping $(hostname -f)
cat /etc/hosts | grep $(hostname)

Listener привязывается к полному доменному имени (FQDN). Если в /etc/hosts указано 127.0.0.1 hostname, а в listener.ora стоит внешний IP, привязка может упасть.


Шаг 5. Проверка прав и окружения

whoami
echo $ORACLE_HOME
ls -l $ORACLE_HOME/bin/tnslsnr

Убедитесь, что вы работаете от oracle, переменные заданы, а бинарник имеет права на выполнение.


4. Пошаговое решение

4.1. Корректная остановка и запуск

lsnrctl stop
# Убедитесь, что процесс исчез
ps -ef | grep tnslsnr | grep -v grep

lsnrctl start
lsnrctl status

Примечание:

lsnrctl reload не восстанавливает упавшие сокеты. При Not listening требуется полный stop/start.


4.2. Проверка и правка listener.ora

Файл обычно находится в $ORACLE_HOME/network/admin/listener.ora или $TNS_ADMIN/listener.ora.


Минимальная рабочая конфигурация:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ваш.fqdn.или.ip)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (PROGRAM = extproc)
    )
  )

Правила:

  • HOST должен резолвиться в IP, принадлежащий серверу.
  • Не используйте localhost, если клиент подключается извне.
  • Избегайте дублирующих ADDRESS блоков.
  • После правки: lsnrctl stop -> lsnrctl start.

4.3. Если порт занят

  1. Найдите процесс: ss -tlnp | grep 1521
  2. Если это другой Oracle-слушатель или postgres, остановите его.
  3. Если изменить нельзя, смените порт в listener.ora (например, 1522) и обновите tnsnames.ora у клиентов.

4.4. Принудительная регистрация сервисов (после старта слушателя)

sqlplus / as sysdba
ALTER SYSTEM REGISTER;
EXIT;

Затем:

lsnrctl services

Убедитесь, что статусы сервисов READY, а не UNKNOWN.


5. Профилактика и лучшие практики

Практика Зачем
Не редактировать listener.ora вручную без бэкапа Исключает синтаксические ошибки
Использовать netca для генерации конфигов Гарантирует валидный синтаксис
Настроить ротацию логов (LOGGING_LISTENER=OFF или LOG_FILE_SIZE) Предотвращает переполнение диска
Мониторить порт 1521 через Zabbix/Prometheus Раннее обнаружение падений
Фиксировать hostname в /etc/hosts и DNS Избегает проблем с привязкой
Регулярно проверять lsnrctl status после патчей/перезагрузок Патчи иногда сбрасывают конфигурацию

6. Шпаргалка по командам

Команда Назначение
lsnrctl status Статус слушателя и конечных точек
lsnrctl start / stop / reload Управление процессом
lsnrctl services Регистрация БД и сервисов
tnsping <alias> Проверка клиентского соединения
ss -tlnp | grep 1521 Проверка порта в ОС
adrci exec="show alert" Просмотр ADR-алертов слушателя

7. Чек-лист быстрого восстановления

  1. lsnrctl stop
  2. ps -ef | grep tnslsnr — убить, если остался
  3. Проверить /etc/hosts и hostname -f
  4. Проверить listener.ora на синтаксис и дубли
  5. ss -tlnp | grep 1521 — освободить порт
  6. lsnrctl start
  7. lsnrctl status — убедиться, что Listening Endpoints заполнены
  8. sqlplus / as sysdbaALTER SYSTEM REGISTER;
  9. Проверить подключение клиентом

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта