У нас есть приложение, работающее локально, где мы видим следующую ошибку:
ORA-12514: TNS: слушатель в настоящее время не знает об услуге, запрошенной в дескрипторе соединения
Я протестировал соединение, TNSPing
которое было разрешено правильно, и попытался SQLPlus
установить соединение, которое не удалось с той же ошибкой, что и выше Я использовал этот синтаксис для SQLPlus
:
sqlplus username/password@addressname[or host name]
Мы убедились, что:
- прослушиватель TNS на сервере работает.
- Сам Oracle на сервере работает.
Мы не знаем о каких-либо изменениях, которые были сделаны в этой среде. Что-нибудь еще мы можем проверить?
Ответы:
У меня возникла эта проблема, и исправление состояло в том, чтобы убедиться, что в вашей базе данных
tnsnames.ora
указаноSERVICE_NAME
правильное имя службы. Чтобы узнать действительные имена сервисов, вы можете использовать следующий запрос в Oracle:Однажды я обновился
tnsnames.ora
до:тогда я побежал:
Успех! Слушатель в основном говорит вам, что какое бы имя_службы вы не использовали, оно не является действительным сервисом в соответствии с БД.
(* Я запускал sqlplus с клиентской рабочей станции Win7 на удаленную БД и обвинял администраторов БД;) *)
источник
Я знаю, что это старый вопрос, но все еще без ответа. Это заняло у меня целый день исследований, но я нашел самое простое решение, по крайней мере, в моем случае (Oracle 11.2 в Windows 2008 R2) и хотел поделиться им.
Ошибка, если смотреть непосредственно, указывает, что слушатель не распознает имя службы. Но где он хранит названия сервисов? В
%ORACLE_HOME%\NETWORK\ADMIN\listener.ora
«SID_LIST» - это просто список SID и имен сервисов в паре в формате, который вы можете скопировать или найти.
Я добавил проблему Service Name, затем в панели управления Windows «Службы» произвел «Перезапуск» в службе прослушивания Oracle. Теперь все хорошо.
Например, ваш файл listener.ora может изначально выглядеть так:
... И чтобы он распознал имя службы
orcl
, вы можете изменить его на:источник
listener.ora
хранятся имена. У меня даже нетlistener.ora
файла. Я также на клиентской рабочей станции, на которой работает SQL Developer и пытаюсь просто создать ссылку на базу данных, когда я получаю сообщение об ошибке. У меня нет службы прослушивания Oracle для перезапуска.У меня была эта проблема на Windows Server 2008 R2 и Oracle 11g
Если у вас нет записей для служб баз данных, создайте их и задайте правильную глобальную базу данных
sid
и oracle home.источник
В моих обстоятельствах ошибка была связана с тем, что у слушателя не была зарегистрирована служба БД. Я решил это путем регистрации услуг. Пример:
Мой дескриптор в
tnsnames.ora
:Итак, приступаю к регистрации сервиса в
listener.ora
ручном режиме:Наконец, перезапустите слушатель по команде:
Готово!
источник
Запуск OracleServiceXXX из services.msc работал для меня в Windows.
источник
Это действительно должен быть комментарий к ответу Брэда Риппе , но, увы, недостаточно реп. Этот ответ дал мне 90% пути туда. В моем случае установка и настройка баз данных помещают записи в файл tnsnames.ora для баз данных, которые я запускал. Во-первых, я смог подключиться к базе данных, установив переменные среды (Windows):
а затем подключение с помощью
Далее запустим команду из ответа Брэда Риппе:
показал, что имена не совпадают точно. Записи, созданные с помощью Oracle Database Configuration Assistant, где изначально:
Название сервиса из запроса было просто,
mydatabase
а неmydatabase.mydomain.com
. Я отредактировал файл tnsnames.ora только для базового имени без доменной части, чтобы они выглядели так:Я перезапустил службу прослушивателя TNS (я часто использую
lsnrctl stop
иlsnrctl start
из командного окна администратора [или Windows Powershell] вместо панели управления службами, но оба работают.) После этого я смог подключиться.источник
У меня такая же проблема. Для меня просто пишу
сделал трюк, делая так, он подключается к имени службы по умолчанию, я думаю.
источник
jdbc:oracle:thin:@//localhost:1521/orcl
. Скорректированная строка подключения , чтобы устранить эту ошибку было:jdbc:oracle:thin:@localhost:1521
.То, что работало для меня, было действительно простым, мне просто нужно было вручную запустить службу в «Службах Windows» (services.msc в cmd trompt). мое сервисное имя: OracleServiceXXXXX.
источник
Проверьте, что база данных работает. Войдите на сервер, задайте для переменной среды ORACLE_SID SID базы данных и запустите SQL * Plus в качестве локального соединения.
источник
Эта ошибка может возникать, когда приложение устанавливает новое соединение для каждого взаимодействия с базой данных или соединения не закрываются должным образом. Одним из бесплатных инструментов для мониторинга и подтверждения этого является Oracle Sql developer (хотя это не единственный инструмент, который вы можете использовать для мониторинга сеансов БД).
Вы можете скачать инструмент с сайта оракула Sql Developer
Вот скриншот того, как следить за вашими сессиями. (если вы видите много сессий, накапливающихся для пользователя вашего приложения во время, когда вы видите ошибку ORA-12514, то это хороший признак того, что у вас может быть проблема с пулом соединений).
источник
Я решил эту проблему в своей среде linux, обновив IP-адрес моей машины в файле / etc / hosts.
Вы можете проверить свой сетевой IP (inet end.) С помощью:
Посмотрите, совпадает ли ваш IP с файлом / etc / hosts:
Отредактируйте файл / etc / hosts, если он подключен:
До свидания.
источник
Для тех, кто может использовать Oracle на виртуальной машине (например, я), я видел эту проблему, потому что моей виртуальной машине не хватало памяти, что, по-видимому, препятствовало правильному запуску / запуску OracleDB. Увеличение моей виртуальной памяти и перезапуск исправили проблему.
источник
Здесь много ответов, но вот рабочий пример с кодом, который можно сразу скопировать, вставить и протестировать:
Для меня ошибка 12514 была решена после указания правильного SERVICE_NAME. Вы обнаружите, что на сервере в файле,
tnsnames.ora
который поставляется с 3 предопределенными именами служб (одно из них «XE»).HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. На 64-битных машинах пишут дополнительно вHKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
только 4 МБ и представляющую собой чисто управляемую DLL, которая работает в 32-разрядных и 64-разрядных процессах. а также и не зависит от других DLL и не требует каких-либо записей в реестре.Если
SERVICE_NAME=XE
вы ошиблись, вы получите ошибку 12514. ЭтоSERVICE_NAME
необязательно. Вы также можете оставить это в стороне.источник
Я также столкнулся с той же самой проблемой и потратил 3 дня, чтобы выкопать это.
Это происходит из-за неправильного входа в службу TNS.
Сначала проверьте, можете ли вы подключиться к резервной базе данных из первичной базы данных, используя sql>
sqlplus sys@orastand as sysdba
(orastand
резервная база данных).Если вы не можете подключиться, то это проблема с сервисом. Исправьте запись имени службы в файле TNS на первичном конце.
Проверьте резервную базу данных таким же образом. Внесите изменения и здесь, если требуется.
Убедитесь, что
log_archive_dest_2
параметр имеет правильное имя службы.источник
Я получил ту же ошибку, потому что указан неверный SID:
Я запросил системную базу данных:
выберите * из global_name;
и нашел мой удаленный SID ("XE").
Тогда я мог подключиться без проблем.
источник
В моем случае в базе данных не хватило места на диске. Что заставило его не отвечать. Как только я прояснил этот вопрос, все снова заработало.
источник
Для меня это было вызвано использованием динамического ipadress с помощью установки. Я переустановил Oracle, используя статический ipadress, и тогда все было хорошо
источник
Перезапуск ВМ работал на меня
источник
Моя проблема была решена путем замены 'SID' в URL на 'имя службы' и правильный хост.
источник
tnslsnr
вверх, но база данных не работает.Для начинающего оракула не очевидно, что база данных может быть недоступна во время приема соединений.
Я должен был запустить базу данных вручную, как это
А потом в консоли SQL
В моем случае я не запустился, но получил другое сообщение об ошибке и нашел источник проблемы - мне пришлось изменить имя хоста, после чего автоматический запуск базы данных снова заработал.
источник
Я применил ниже обходной путь для решения этой проблемы.
Я установил ORACLE_HOME с помощью командной строки (щелкните правой кнопкой мыши cmd.exe и выберите Запуск от имени системного администратора).
Используется ниже команды
set oracle_home="path to the oracle home"
Перейдите в раздел Все программы -> Oracle -ora home1 -> Инструменты миграции конфигурации -> Net Manager -> Слушатель
Выберите Database Services из выпадающего списка. И глобальное имя базы данных, и SID установлены одинаково (ORCL в моем случае). Установить домашний каталог Oracle.
Пример окна Oracle Net Manager из документации Oracle:
источник
Проблема заключалась в том, что URL-адрес строки подключения содержал имя базы данных вместо SID. Замена имени базы данных на соединение с базой данных оракула SID решила эту проблему.
Чтобы узнать ваш SID оракула, вы можете просмотреть
tnsnames.ora
файл.XE
был фактический SID, так вот как выглядит моя строка подключения tomcat:Моя версия сервера была "Oracle 11.2 Express", но решение должно работать и на других версиях.
источник
В моем случае в файле tnsnames.ora отсутствовали круглые скобки вокруг SERVICE_NAME .
источник
Для тех, кто использует Spring-Boot и JDBC для подключения. Вы должны быть осторожны при написании jdbcUrl в application.properties
С SID в подключении к базе данных -
source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID
С именем службы в подключении к БД
globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
Это сработало для меня :)
источник