DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

ORA-12154: TNS: could not resolve database name

TNS: could not resolve database name
На первый взгляд эта ошибка понятна и легко устранима. Однако со временем вы увидите, что невозможность разрешить имя базы данных может быть вызвана многими причинами. Мой прошлый опыт свидетельствует, что над устранением этой ошибки можно биться очень долго. При
наличии нескольких каталогов иногда трудно определить, какой из файлов tnsnames.ora используется. Дело усугубляется тем, что в версиях младше 8.1.5 Oracle Enterprise Manager хранит свою собственную копию сетевого программного обеспечения и файлов конфигурации. Net8 "видит" два файла tnsnames.ora в разных каталогах и, так сказать, приходит в замешательство. Вы, со своей стороны, можете не осознавать, что в системе есть два файла конфигурации. Как следствие, диагностика сильно усложняется.
Бывает и так, что в системе только один файл listener.ora и один файл tnsnames.ora, и ошибка ORA-12154 возникает, казалось бы, без всяких видимых причин. Недавно я провела несколько дней в попытках устранить такую ошибку и в конце концов, благодаря помощи двух удивительно терпеливых сотрудников Oracle - Питера Повинека и Пьера Бодина - обнаружила, что в файле sqlnet.ora стояла ссылка на службу имен Oracle:
NAMES.DIRECTORY_РАТН= (ONAMES)
При наличии такой записи Net8 вообще не использует файл tnsnames.ora. Ошибка исчезла, как только я изменила запись следующим образом:
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES)
Поиск причины, которая привела к выдаче этого сообщения об ошибке, можно начать с просмотра всех каталогов Oracle с целью поиска дополнительных копий файла tnsnames.ora. Этот подход хорошо работает, если версия вашей РСУБД не ниже, чем 7.3.4. Корпорация Oracle рекомендует использовать для соединений Net8 самую последнюю версию прослушивающего процесса.
В главе 12 руководства администратора Net8 для Release 2 предлагается следующий алгоритм поиска причин ошибки.
Проверить, что файл tnsnames.ora существует.
2.        Проверить, нет ли в системе множественных копий tnsnames.ora.
Если такие копии найдены, поместить в каждую из них уникальную
запись, чтобы было проще определить, какой файл использует Net8.
Проверить, что имя сетевой службы, указанное в строке соединения, отображено в дескриптор соединения.
Проверить, нет ли дублирующихся копий файла sqlnet.ora.
При использовании доменных имен проверить, что файл sqlnet.ora содержит параметр names.default_dom.ain. Если этот параметр отсутствует, в строке соединения необходимо указывать доменное имя.
Если доменные имена не используются, а этот параметр указан, удалить или закомментировать его.
Если соединение устанавливается из диалогового окна, проверить, не используется ли символ "@" перед именем сетевой службы в строке Host.
8.        Активизировать трассировку клиента и повторить операцию.
 









jAntivirus