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) слушатель прослушивание другого порта, возможно, если на нем работает один.