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
Возможные решения -
Убедитесь, что TNSNAMES.ORA существует и доступен.
Убедитесь, что в TNSNAMES.ORA нет синтаксических ошибок.
Убедитесь, что строка подключения верна.
Проверьте, есть ли какие-либо проблемы с DNS.
Если проблема заключается в подключении к серверу с помощью PL sql developer client.try для установки разработчика SQL в Program File вместо Program Files(x86)