ODP .NET TNS: нет слушателя

В настоящее время я пытаюсь подключиться к базе данных Oracle. Я могу нормально подключиться к своей машине разработки, но при развертывании на моем сервере Win2k3 sp2 я получаю следующую ошибку.

Не удалось открыть соединение... Oracle.DataAccess.Client.OracleException ORA-12541: TNS: нет привязки к Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlVOX, StringOX, String, Spox, Spx процедура, логическое bCheck)

Любые мысли, идеи, инструкции будут полезны. Я использую Oracle.DataAccess.dll версии 4.112.1.2.

Спасибо

4 ответа

Решение

Фактической проблемой был брандмауэр.

Очевидно, моя локальная машина разработки имела доступ к серверу, на котором размещался Oracle, но мой сервер разработки не имел. После того, как между серверами было открытое соединение, TNS: ошибка слушателя не исчезла.

Похоже, это было поддельное сообщение об ошибке, возвращенное клиентом Oracle. Слушатель был там, и моя конфигурация (строка подключения) была действительной, но между двумя машинами не было никакого доступного соединения.

У меня была точно такая же проблема. Почему-то кажется, что использование "псевдонима" не работало.

мой tnsnames.ora В файле было что-то вроде этого:

oracle =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = tcp)(HOST = myoracleserver.mydomain.com)(PORT = 1525))
    )
    (CONNECT_DATA =
      (SID = MYORACLESERVER)
    )
  )

Затем я изменил строку подключения Data Source из (используя псевдоним):

User Id=scott;Password=tiger;Data Source=oracle

Чтобы (не используя псевдоним):

User Id=scott;Password=tiger;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=myoracleserver.mydomain.com)(PORT=1525)))CONNECT_DATA = (SID = MYORACLESERVER)))

Теперь все работает без проблем с ODP.NET. Это было и все еще работает с псевдонимом, когда я использую старое соединение ADODB.

ОБНОВИТЬ:

ODP.NET не может прочитать ваши tnsnames.ora файл прямо из вашего приложения. Вы должны настроить, как я сказал в своем ответе, или вы также можете указать, где ваш tnsnames.ora файл в вашем Web.Config или же App.Config файл.

Смотрите мой другой ответ для более подробной информации обо всех вариантах, которые у вас есть.

Я тоже научился другому. в файле TNSNAMES.ora внутри папки Network\admin нет места в начале экземпляров.

пример:

MYORACLESERVER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = tcp)(HOST = myoracleserver.mydomain.com)(PORT = 1525))
    )
    (CONNECT_DATA =
      (SID = MYORACLESERVER)
    )
  )

Может показаться, что на машине, на которую указывает ваша запись TNSNames, не работает прослушиватель. Я вижу три разных варианта... (1) запись указывает на разные машины в tnsnames.ora (разные на обеих машинах), (2) разрешение DNS на этих двух машинах разное, или (3) слушатель прослушивание другого порта, возможно, если на нем работает один.

Другие вопросы по тегам