2008-10-02 1 views
3

Недавно я разместил одно веб-приложение на одном из моих серверов разработки. Я использую oracle, asp.net и C#. При запуске приложения на сервере все работает отлично, но когда я пытаюсь запустить приложение за пределами сервера (с помощью моего компьютера, к примеру) я получаю эту ошибку:Ошибка Ora 12154

ORA-12154: TNS:could not resolve the connect identifier specified 

Если я запустить приложение в мой компьютер с визуальной студией работает отлично.

Oracle установлен на сервере «A», а приложение находится на сервере «B». Сервер «A» находится в одном домене, а сервер «B» находится в другом домене. Мой компьютер находится в том же домене, что и сервер «A».

В моем компьютере я могу найти файл tnsname.ora в C: \ оракул \ продукт \ 10.2.0 \ client_1 \ NETWORK \ ADMIN, но в Server "B" я не могу найти его в любом месте

Есть идеи? Спасибо за помощь.

+0

Пожалуйста, отредактируйте название этого сообщения ot be more descriptive – 2008-10-02 15:00:09

+0

Пожалуйста, задайте вопрос о программировании, а не вопрос поддержки Oracle. – ColinYounger 2008-10-02 16:53:51

ответ

0

Guess: клиент оракул не установлен на сервер B.

Если у вас есть установленный клиент оракула, то вы можете поместить файл TNSNAMES в любом месте (например, в каталоге в сети доля). Чтобы сделать это, установите системную переменную TNS_ADMIN (Свойства системы-> Дополнительно-> Переменные среды в XP) в каталог, содержащий ваши файлы tnsnames.

Для меня, например, у меня есть переменная системы: TNS_ADMIN - C: \ оракул \ ora92 \ сеть \ ADMIN

3

Вы еще не пробовали? (От http://ora-12154.ora-code.com/)

ORA-12154: TNS: не удалось разрешить идентификатор подключения указанного
Причина: подключение к базе данных или другой службе было предложено, используя идентификатор подключения и идентификатор подключения указано не может быть решен в дескриптор соединения, используя один из настроенных методов именования. Например, если тип используемого идентификатора подключения был именем сетевой службы, то имя нетто-службы не могло быть найдено в репозитории метода имен или хранилище не могло быть найдено или достигнуто.
Действие: - Если вы используете локальную именование (TNSNAMES.ORA файл):

  • Убедитесь, что «TNSNAMES» в качестве одного из значений параметра NAMES.DIRECTORY_PATH в профиле Oracle Net (SQLNET.ORA)

  • Проверьте, что файл TNSNAMES.ORA существует и находится в соответствующем каталоге и доступен.

  • Проверьте, что имя сетевого сервиса, используемое как идентификатор соединения, существует в файле TNSNAMES.ORA.

  • Убедитесь, что в файле TNSNAMES.ORA нет синтаксических ошибок. Ищите непревзойденные круглые скобки или бродячие символы. Ошибки в файле TNSNAMES.ORA могут сделать его непригодным.

  • Если вы используете каталог имен:

  • Убедитесь, что «LDAP» указан в качестве одного из значений параметра NAMES.DIRETORY_PATH в Чистом профиле Oracle (SQLNET.ORA).

  • Проверьте, что сервер каталогов LDAP включен и доступен.

  • Убедитесь, что имя сети или имя базы данных, используемые в качестве идентификатора подключения, настроены в каталоге.

  • Убедитесь, что контекст по умолчанию используется правильно, указав полное сетевое имя службы или полный LDAP DN как идентификатор подключения

  • Если вы используете Easy Connect именование:

  • Проверьте что «EZCONNECT» указан как одно из значений параметра NAMES.DIRETORY_PATH в профиле Oracle Net (SQLNET.ORA).

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

  • Попробуйте включить идентификатор соединения в кавычки. Для получения дополнительной информации об именовании см. Руководство администратора Oracle Net Services или руководство по операционной системе Oracle.

0

ли ORACLE_HOME установлен на сервере B?

+0

да, но я собираюсь переустановить его, тогда я собираюсь попробовать все ответы – 2008-10-02 15:41:05

0

Возможно, вам необходимо установить Oracle Client на «Сервер B» (сервер приложений) и настроить его файл TNSNAMES.ORA. Это необходимо, так как в противном случае исполняемый код не имеет понятия, где искать базу данных, которую вы используете в приложении (возможно, вы настроили источник данных в файле web.config или в некотором жестком коде). Помните - вы не можете получить доступ к Oracle (легко) без Oracle Client.

3

Устранение ошибок TNS может быть настоящей болью. Несколько вещей, о которых нужно помнить.

Большинство сред разработки (например, visual studio) сохраняют собственную копию информации о подключении TNS и не используют файл TNSNAMES.ora. Файл, в котором хранится эта информация, не должен называться TNSNAMES.ora, это просто имя по умолчанию. Что может быть причиной вы не можете найти его на сервер B.

Если у вас есть программное обеспечение клиента Oracle (или базы данных Oracle) можно использовать tnsping, чтобы проверить, если ваш файл TNSNames.ora настроен правильно.

Наиболее часто возникающие проблемы с конфигурацией файла TNSNAMES.ora используют неправильное имя службы и/или неправильное имя хоста. Возможно, вам придется изменить «ODB_A» на «ODB_A.WORLD» или наоборот, в зависимости от настроек NET NET. Для Oracle 10 последний параметр NET NET по умолчанию. Для последнего вам нужно использовать ping, чтобы увидеть сервер «A», и знать, нужно ли вам использовать «SERVERA» или «SERVERA.DOMIN.COM» или IP-адрес.

0

Была такая же проблема. Оказывается, в TNSNAMES.ORA в среде развертывания были разные ADDRESS_NAME и SID/SERVICE_NAME, и приложение было настроено на использование SID, что вызвало проблему.

Ваша строка подключения должна содержать ADDRESS_NAME а не SID

0

Возможные решения -

Убедитесь, что TNSNAMES.ORA существует и доступен.

Убедитесь, что в TNSNAMES.ORA нет синтаксических ошибок.

Проверьте правильность строки подключения.

Проверьте, есть ли какие-либо проблемы с DNS.

Если проблема во время подключения к серверу с помощью PL разработчика SQL client.try установить проявитель SQL в рамках программы File вместо Program Files (x86) 'ы

0

Добавить окружающую среду:

Variable Name: TNS_ADMIN 

Variable Value: (YourDrive):\app\(UserName)\product\11.2.0\dbhome_1\NETWORK\ADMIN 
0

Я столкнулся с подобной проблемой. Следующий код работал в моей системе, но не работал на другом сервере, хотя я добавил запись tns в файл tnsnames.ora.

con = new OracleConnection(); 
con.ConnectionString = "User Id=username;Password=password;Data Source=uit45"; 
con.Open(); // throws error here 

После копания и рытья я нашел решение для этого. Мы должны игнорировать запись в tns-файле и можем вводить tns-запись в качестве строки подключения, которая отлично работает для меня. Попробуйте приведенный ниже код.

con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=db-uit45.xxx)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=uit45)));User Id=username;Password=password"); 
con.Open(); 

Обратите внимание, что вы должны дать соответствующие значения, особенно для HOST,PORT,SID,User Id и Password.

Смежные вопросы