ORA-12514 TNS: слушатель в настоящее время не знает об услуге, запрошенной в дескрипторе соединения
У нас есть приложение, работающее локально, где мы видим следующую ошибку:
ORA-12514: TNS: слушатель в настоящее время не знает об услуге, запрошенной в дескрипторе соединения
Я проверил соединение с помощью TNSPing
который решил правильно, и я попытался SQLPlus
попытаться подключиться, но не с той же ошибкой, что и выше. Я использовал этот синтаксис для SQLPlus
:
sqlplus username/password@addressname[or host name]
Мы убедились, что:
- Слушатель TNS на сервере работает.
- Сам Oracle на сервере работает.
Мы не знаем о каких-либо изменениях, которые были внесены в эту среду. Что-нибудь еще мы можем проверить?
31 ответ
Это сложная ошибка Oracle, поскольку она может иметь множество возможных причин. Кажется, это означает, что что-то в этой цепочке событий не работает:
- Найдите имя службы в tnsnames.ora.
- Подключитесь к хосту в записи tnsnames.
- Достичь слушателя на этом хосте
- Сообщите слушателю, что вы хотите подключиться к службе, указанной в записи tnsnames.
Все, что вызывает эту ошибку, может вызвать эту ошибку: от отсутствующей скобки в tnsnames.ora до подключения к неправильному хосту базы данных.
Если tnsping работает, это исключает некоторые вещи, поскольку это означает, что мы можем найти запись в tnsnames, подключиться к хосту и связаться со слушателем... так что мы знаем, например, что хост по крайней мере существует, и там работает прослушиватель Oracle; но слушатель говорит, что имя службы неизвестно. Это все еще оставляет много возможностей, таких как:
- имя службы в tnsnames.ora неверно
- экземпляр базы данных не запущен и/или не зарегистрирован в прослушивателе
- мы подключаемся к неправильному хосту Oracle
- мы подключаемся к неправильному прослушивателю (неправильный порт) на правильном хосте Oracle
- проблема с брандмауэром/сетью (вероятно, брандмауэр может разрешать передачу пакетов tnsping, но блокировать подключение других клиентских приложений)
Я видел ORA-12514 с небольшими опечатками в tnsnames.ora... типа неправильных отступов. Но я подозреваю, что tnsping не увенчается успехом, если это проблема.
Когда я столкнулся с этим совсем недавно, это произошло из-за третьего пункта выше; мы подключались к хосту базы данных Oracle, но не к тому хосту; нам нужно было убедиться, что имя хоста в записи tnsnames соответствует серверу базы данных Oracle, на котором размещалась эта конкретная служба базы данных.
Подключение к хосту Oracle и запускlsnrctl status
может помочь проверить, известна ли служба этому прослушивателю. Помните, чтоlsnrctl
по умолчанию проверяет имя прослушивателя по умолчанию. Возможно, вам придется проверить Listener.ora, чтобы увидеть, есть ли в этом экземпляре базы данных прослушиватели других имен.