У нас є додаток, що працює локально, де ми стикаємося з наступною помилкою:
ORA-12514: TNS:listener does not currently know of service requested в дескрипторі підключення
Я протестував з'єднання за допомогою TNSPing
, яке вирішилося правильно, і
Я спробував SQLPlus
, щоб спробувати підключитися, що не вдалося з тією ж помилкою, що і вище. Я використовував цей синтаксис для SQLPlus
:
sqlplus username/password@addressname[or host name]
Ми перевірили це:
Ми не знаємо про будь-які зміни, які були внесені в це середовище. Що ще ми можемо перевірити?
У мене була така проблема, і рішення полягало в тому, щоб переконатися, що в tnsnames.ora
SERVICE_NAME
є допустимим ім'ям служби у вашій базі даних. Для того, щоб дізнатися валідні імена сервісів, можна скористатися наступним запитом в oracle:
select value from v$parameter where name='service_names'
Після того, як я оновив tnsnames.ora
на:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *<servicenamefromDB>*)
)
)
я побіг:
sqlplus user@TEST
Успіх! Слухач, по суті, повідомляє вам, що незалежно від того, яке ім'я_служби ви використовуєте, не є дійсною службою згідно з БД.
(Я запускав sqlplus з клієнтської робочої станції Win7 на віддалену БД і звинувачую в цьому DBA ;) )
Ця помилка може виникати, коли додаток встановлює нове з'єднання для кожної взаємодії з базою даних або з'єднання не закриваються належним чином. Одним з безкоштовних інструментів для моніторингу та підтвердження цього є Oracle Sql developer (хоча це не єдиний інструмент, який можна використовувати для моніторингу сеансів роботи з БД).
Завантажити інструмент можна з сайту oracle Sql Developer.
Ось скріншот того, як можна відстежувати сесії. (якщо ви бачите багато сеансів, що накопичуються для користувача вашого додатку під час того, як ви бачите помилку ORA-12514, то це є гарною ознакою того, що у вас може бути проблема з пулом з'єднань).