Ora 12154 ошибка - PullRequest
       58

Ora 12154 ошибка

3 голосов
/ 02 октября 2008

Я недавно развернул одно веб-приложение на одном из моих серверов разработки. Я использую оракул, asp.net и c #. Когда я запускаю приложение на сервере, все работает нормально, но когда я пытаюсь запустить приложение за пределами сервера (например, на моем компьютере), я получаю эту ошибку:

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

Если я запускаю приложение на моем компьютере с Visual Studio, оно работает нормально.

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

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

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

Ответы [ 9 ]

3 голосов
/ 02 октября 2008

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

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

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

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

3 голосов
/ 02 октября 2008

Вы уже пробовали это? (из 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 Net (SQLNET.ORA).

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

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

  • Проверьте правильность используемого контекста по умолчанию, указав в качестве идентификатора соединения полное имя сетевого сервиса или полное LDAP DN

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

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

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

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

0 голосов
/ 17 сентября 2016

Я сталкивался с подобной проблемой. Приведенный ниже код работал в моей системе, но не работал на другом сервере, хотя я добавил запись 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.

0 голосов
/ 07 января 2014

Добавить среду:

Variable Name: TNS_ADMIN

Variable Value: (YourDrive):\app\(UserName)\product\11.2.0\dbhome_1\NETWORK\ADMIN
0 голосов
/ 24 декабря 2013

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

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

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

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

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

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

0 голосов
/ 22 октября 2012

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

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

0 голосов
/ 02 октября 2008

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

0 голосов
/ 02 октября 2008

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

0 голосов
/ 02 октября 2008

Угадайте: клиент Oracle не установлен на сервере B.

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

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

...