Ora 12154 ошибка

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

любая идея? Спасибо за помощь.

10 ответов

Решение

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

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

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

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

Устранение ошибок 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-адрес.

Не добавляйте @ в пароль, который вы устанавливаете, и не удаляйте его из пароля. Я также получал ошибку, и после ее изменения ошибка была устранена.

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

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

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

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

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

Variable Name: TNS_ADMIN

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

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

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

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

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

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

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

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

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