Подтвердить что ты не робот

Oracle ORA-12154: TNS: Не удалось разрешить имя службы Ошибка?

Я являюсь пользователем SQL Server.

Я работаю над проектом, использующим оракул (который я редко использую) Мне нужно создать ODBC-соединение, чтобы я мог получить доступ к некоторым данным через MS Access У меня есть приложение на моем компьютере под названием oraHome90. Кажется, что позволяет настроить что-то, называемое слушателем в "сетевой утилите конфигурации", я думаю, что также необходимо выполнить "Конфигурация локального сетевого имени". ИТ-поддержка дала мне эту информацию для настройки соединения ODBC. Я пробовал каждую комбинацию, о которой я могу думать. Я могу пройти тест, который успешно проходит тест на "вход" в базу данных сервера oracle. Когда я пытаюсь создать соединение ODBC, я получаю следующую ошибку: ORA-12154: TNS: не удалось разрешить имя службы.

Предполагая, что я хочу начать с нуля, и следующая информация должна позволять мне подключаться к базе данных..... Любые предложения или комментарии? Примечание: в конечном итоге проект будет иметь страницу веб-сайта .ASP, запрашивающую данные, но я должен сначала доказать, что я могу видеть данные, используя соединение ODBC через MS Access

Service name: SERVICENAME
HOST = HOST.XYZi.com
User Id: MYUSERID
Password: MYPASSWORD
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'Oracle Connection
Dim ocst
Dim oconn

ocst = "Provider=OraOLEDB.Oracle;" & _ 
        "Data Source=DATASOURCE;" & _ 
        "User ID=CHIJXL;" & _ 
        "Password=password;" 

set oconn = CreateObject("ADODB.Connection")
4b9b3361

Ответ 1

из 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.

Ответ 2

Исходя из предположения, что вы используете имена TNSNAMES, вот несколько вещей, которые нужно сделать:

  • Создайте/измените файл tnsnames.ora в подкаталоге network/admin, связанный с OraHome90, чтобы включить запись для вашей базы данных оракула:
> SERVICENAME_alias =
>    (DESCRIPTION =
>     (ADDRESS = (PROTOCOL = TCP)(HOST = HOST.XYZi.com)(PORT = 1521))
>     (CONNECT_DATA = (SERVICE_NAME = SERVICENAME))

Предполагается, что вы используете стандартный порт Oracle 1521. Обратите внимание, что servicename_alias может быть любым именем, которое вы хотите использовать в локальной системе. Вы также можете обнаружить, что вам нужно указать (SID = SERVICENAME) вместо (SERVICENAME = SERVICENAME).

  • Выполните команду tnsping servicename_alias для проверки возможности подключения. Получите эту работу, прежде чем идти дальше. Это скажет вам, если вы прошли ошибку 12154.
  • Предполагая хорошее соединение, создайте ODBC DSN с помощью панели управления, указав драйвер ODBC для Oracle по вашему выбору (как правило, есть драйвер Microsoft ODBC по крайней мере, и он должен работать адекватно как доказательство концепции). Я возьму имя, которое вы дали DATASOURCE. Используйте имя servicename_alias в качестве имени сервера в конфигурации ODBC.
  • На этом этапе вы сможете подключиться к своей базе данных через Access. Я не программист VB, но я знаю, что вы должны пойти в File- > Get External Data- > Link Tables и подключиться к источнику ODBC. Я бы предположил, что ваш код тоже будет работать.

Ответ 3

В отношении # 7 в этом MSDN POST добавление записи реестра для меня работало. У меня установлен Vs2010, et oracle 11.0.

Проверьте раздел реестра "TNS_ADMIN" на странице HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE. Если он существует, убедитесь, что он правильное значение как "Dir:\app\product\11.1.0\client_1\network\admin". Если вы не видите ключ, тогда создайте ключ и установите соответствующее значение как показано ниже. Regedit- > HKEY_LOCAL_MACHINE- > Software- > Oracle- > RightClick NEW- > StringValue и назовите его TNS_ADMIN и укажите значение "X:\приложение\продукт\11.1.0\client_1\сеть\админ"

Ответ 4

Я изо всех сил пытался решить эту проблему часами, пока не нашел переменную среды, называемую TNS_ADMIN, в My Computer = > Properties = > Advanced = > Environment Variables = > посмотреть в системных переменных для записи под названием TNS_ADMIN. TNS_ADMIN добавляется для изменения пути по умолчанию для записи Tnsnames.ora. Это полезно, когда оно используется в сетевой среде, где можно установить общую запись tnsnames.ora для всех сетевых компьютеров. Чтобы посмотреть путь по умолчанию для tnsnames.ora, добавьте путь по умолчанию в TNS_ADMIN.

Ответ 5

@Warren и @DCookie рассмотрели решение, одно из которых подчеркнуть - использование tnsping. Вы можете использовать это, чтобы доказать, что ваши TNSNames верны, прежде чем пытаться подключиться.

Как только вы правильно настроили tnsnames, вы можете использовать ODBC или попробовать TOra, который будет использовать ваше родное соединение оракула. TORA или что-то подобное (TOAD, SQL * Plus и т.д.) Окажутся неоценимыми при отладке и улучшении вашего SQL.

Последнее, но не менее важное, когда вы в конечном итоге подключаетесь к ASP.net, помните, что вы можете использовать библиотеки подключения данных Oracle. См. Oracle.com для большого количества ресурсов.

Ответ 6

У меня была такая же проблема, и появилась такая же ошибка. мой TNSNAMES: файл ORA тоже хорош, но, видимо, возникла проблема из-за блокировки доступа к брандмауэру. Хорошим советом будет удостовериться, что брандмауэр не блокирует доступ к источнику данных.

Ответ 7

Если в начале имени tns определено имя в файле tnsnames.ora, то некоторые из таких соединителей, как odbc, могут дать эту ошибку. Удалите символ пробела в начале.

Ответ 8

У меня тоже возникла эта проблема. Я обнаружил, что проблема заключается в том, что Oracle DB не любит пространство в файлах C: program (x86)\Toad...... поэтому я создал новый каталог с именем C: App\Toad, затем переустановил его, чтобы подключить Toad к Oracle, Это сработало.

Ответ 9

Это не имеет никакого отношения к пространству, встроенному в структуру папок.

У меня была та же проблема. Но когда я создал переменную среды (определенную как на уровне системы, так и на уровне пользователя) под названием TNS_HOME и заставил ее указывать на папку, где существовала TNSNAMES.ORA, проблема была решена. Вуаля!

venki

Ответ 10

В моем случае это потому, что я был на x64 ПК и все еще использовал старый Oracle 9i с 32-битными драйверами!

Я использую SQL Reporting Services с базой данных Oracle. Проблема заключается в скобках на пути к Visual Studio (BIDS). Oracle не любит приложения, которые начинаются с пути с помощью скобок:

Задача RDBMS 10g XE с круглыми скобками в пути

Итак, я создал файл BAT для открытия Visual Studio с Progra ~ 2 в качестве краткого пути к "Program Files (x86)".

Вот содержимое BAT файла:

rem Progra~2 is short path name for "Program Files (x86)" and works around an Oracle client bug that doesn't like the () in the path
start /B "C:\Progra~2\Microsoft Visual Studio 9.0\Common7\IDE" "C:\Progra~2\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"

Я называю этот BAT файл StartBIDS.BAT и помещаю его в каталог:

"C:\Program Files\Microsoft SQL Server\Start BIDS.bat"

Затем я делаю короткую ссылку на BAT файл на своем рабочем столе, а также в меню "Пуск" и меняю значок "ShortCuts". Это позволяет мне открывать приложения TOAD, Visual Studio, BIDS и т.д., Которые я использую для работы с Oracle.

Update:

Альтернативно выполните соединение:

mklink /J "C:\Program Files (x86)\" "C:\Program Files x86\"

Затем удалите скобки в ярлыке:

введите описание изображения здесь

Ответ 11

Время решения проблемы. Я установил бета-платформу Entity Framework для Oracle и в проекте Visual Studio 2010 MVC 3, на котором я ссылался под вкладкой .NET Oracle.DataAccess... Это продолжало давать мне "Oracle ORA-12154: TNS: не удалось..." ошибка. Я, наконец, просто просмотрел предыдущую установку Oracle в каталоге c:\Oracle\product.... с использованием старой версии dll 10.2.0.100. Наконец, он работает сейчас. Надеюсь, это поможет кому-то другому.

Ответ 12

Я просто потрачу час на это, я новичок в Oracle, поэтому я был полностью смущен.

ситуация:

только что установили инструменты разработчика Visual Studio 2012 Oracle. Когда я это сделал, я потерял элементы в своем раскрывающемся списке, которые содержали мои записи TNS в TOAD. Я получал эту ошибку от Visual Studio и TOAD!! WTH! поэтому я добавил переменную окружения TNS_ADMIN в разделе "ВСЕ ПОЛЬЗОВАТЕЛИ" с указанием пути к моему файлу .ora(который теперь работал отлично, потому что он работал, пока я не сломал его). Жаба подняла это изменение. Еще Visual Studio не давала мне никакой любви... все равно получала бы такую ​​же ошибку. THEN, я добавил переменную окружения к МОИМ ПЕРЕМЕНАМ ПОЛЬЗОВАТЕЛЯ.. VIOLA!!

ОБЕСПЕЧИВАЙТЕ ОКРУЖАЮЩЕЙ СРЕДЫ ДЛЯ СИСТЕМЫ И ПОЛЬЗОВАТЕЛЯ

Ответ 13

Только перезапустить службы SID. Например, вы SID name = orcl, тогда все службы, связанные с orcl, должны быть перезапущены, тогда проблема будет решена.

Ответ 14

Мы решили наши проблемы, повторно установив Oracle Database Client. Каким-то образом установка не была успешной на одной из рабочих станций (даже при отсутствии регистрации), однако при сравнении размера/файлов/папок каталога Oracle с рабочей рабочей рабочей станцией было потеряно значительное количество файлов. Как только мы выполнили чистую установку, все сработало отлично.

Ответ 16

Это было упомянуто в comment в другом ответе, но я хотел перенести его на реальный ответ, так как это также было проблемой в моем случае, и я было бы поддержано, если бы это был ответ.

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

$ chmod +r tnsnames.ora

Ответ 17

У нас также была аналогичная проблема. Что мы выяснили, что мы предоставили несколько псевдонимов для нашей строки соединения в tnsnames.ora, что-то вроде:

svc01, svc02 = (ОПИСАНИЕ = (ADDRESS = (PROTOCOL = TCP) (HOST = xxxx) (порт = 50)) (CONNECT_DATA = (SERVER = DEDICATED) (service_name = yyyysvc.world)))

поэтому при создании соединения с использованием ODBC, когда мы выбрали значение для имени службы TNS, автозаполнение отображало "svc01" (обратите внимание на дополнительную запятую). Как только мы удалили запятую, она начала работать для нас.

Ответ 18

Если у вас есть 32-битный DSN и 64-битный DSN с одинаковыми именами, Windows автоматически выберет 64-битную версию, а если ваше приложение 32-разрядное, это приведет к ошибке. Просто следите за этим.

Ответ 19

У меня была эта проблема из-за опечатки в имени файла tsnames.ora вместо tnsnames.ora

Ответ 20

Я исправил эту проблему, используя эти шаги.

Прежде всего, эта ошибка возникла, если вы не установили такой же каталог или диск.

Но ответ здесь.

  • Окно входа в систему как администратор.
  • Перейдите в Панель управления.
  • Свойства системы и щелкните Enviroment
  • Найдите переменную ОС и измените имя как "TNS_ADMIN"

    введите описание изображения здесь

  • И измените значение как "адрес каталога tnsnames" введите описание изображения здесь

  • Перезагрузите систему.

  • Congrulations.