Hinky Oracle Connection (Справка TNSNAMES.ora) - PullRequest
2 голосов
/ 15 января 2009

Недавно мы изменили физические базы данных, новые серверы, новые местоположения, ту же схему и данные базы данных, и после изменения каждый раз, когда мы пытаемся подключиться напрямую к БД в наших собственных приложениях настольного типа, примерно в половине случаев мы получаем эту ошибку :

SQL*Loader-704: Internal error: ulconnect: OCIServerAttach[0]
ORA-12545: Connect failed because target host or object does not exist

В остальное время он подключается сразу, без проблем. Наши приложения, которые устанавливают соединения через JDBC, похоже, не имеют проблем, но мы сталкиваемся с тем, что выполняет поиск tnsnames.ora (или, по крайней мере, это моя догадка). TNSPING работает на 100%, но использование исполняемого файла оракула, такого как SQLLDDR, дает сбой как минимум в 50% случаев. Вот анонимный фрагмент нашего файла TSNNAMES и вывод TNSPING:

DB_CONNECTION =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = MY.URL.COM)
  )
)

И ТНПИНГ:

C:\>TNSPING DB_CONNECTION
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\oracle\ora92\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 1.2.3.4)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = MY.URL.COM)))
OK (200 msec)

У меня есть SID БД, на который полагаются соединения JDBC, но добавление его в tnsnames.ora не увеличивает шансы на установление соединения. Я не знаю достаточно о том, как файл tnsnames используется Oracle для интеллектуального решения этой проблемы, поэтому, если у вас есть предложения или вы видите что-то, чего явно не хватает, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ: новые базы данных могут быть две базы данных с балансировкой нагрузки, которые могут быть частью проблемы.

Ответы [ 3 ]

1 голос
/ 15 апреля 2009

У нас недавно была похожая проблема с нашим приложением. Приложение иногда подключалось к Oracle RAC, а иногда с ORA-12545. Вкратце проблема заключалась в том, что у сервера было настоящее имя, когда мы использовали виртуальные IP-адреса в TNSNAMES.ORA. После того как мы добавили сопоставление имени сервера с IP-адресом через файл system32 \ drivers \ etc \ hosts, все стало работать нормально.

Я написал немного больше в своем блоге <бесстыдная реклама> http://dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html

0 голосов
/ 15 апреля 2009

Если вы используете Oracle 10g, вы можете использовать обработчик Easy Connect вместо:

//servername/instancename

,

//1.2.3.4/my.url.com

в вашем случае.

Неуязвим для лотов из TNSNAMES выпусков.

0 голосов
/ 15 января 2009

Ах, должен любить прерывистые проблемы :) (Далее мне пришлось заменить знак подчеркивания, поскольку я не знаю escape-символа для этого языка вики)

Вы всегда используете одного и того же пользователя ОС для подключения и выполнения tnsping?

Проверка переменных среды TNS [подчеркивание] ADMIN, указывающих на различные местоположения tnsnames.ora. Выполните сканирование клиента на наличие дубликатов tnsnames.ora; либо в местах, на которые указывает $ TNS [подчеркивание] ADMIN, либо в других $ ORACLE [подчеркивание] ДОМАХ (например, если у вас установлено 2 клиента Oracle).

Также убедитесь, что вы используете одни и те же переменные среды $ ORACLE [underscore] HOME и $ PATH для всех попыток подключения и tnsping. (Например, всегда один и тот же пользователь ОС или каждый пользователь имеет одинаковые значения)

Я вижу, что вывод tnsping сообщает о версии 9.2, так что это маловероятно, но в 11g БД регистрируется в приемнике, что может занять минуту или около того. (может быть и правда с 10 г). Попытки подключиться до этого не найдут цель.

Еще одна маловероятная возможность - служба с тем же именем службы все еще рекламируется на старом хост-сервере? Удалите его, если это возможно.

После этого я бы начал смотреть на саму сеть. Пинг сервера всегда успешен и быстр? Если вы используете имя хоста, а не IP в tnsnames.ora, имя хоста надежно разрешается с правильным IP (nslookup). Существует ли локальный брандмауэр и, если да, то он ведет себя?

С уважением Карл

...