Oracle - соединение ODBC с использованием ошибки MS Access (ORA-12154)

Я пытаюсь использовать доступ MS для подключения к базе данных Oracle. Я продолжаю получать следующее сообщение об ошибке:

ORA-12154: TSN- не удалось разрешить идентификатор соединения

Драйверы Oracle OracleClient10g может проверить, что сервер базы данных существует.

В моем файле tsnnames.ora есть раздел, который выглядит следующим образом: UBASEP10G = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = bxxx-xxx.yyyy.com)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = UBASE)))

за мои попытки разрешить эту ошибку я добавил это в файл sqlnet.ora:

NAMES.DIRECTORY_PATH = (HOSTNAME, ONAMES, TNSNAMES, LDAP, EZCONNECT)

При использовании утилиты конфигурирования драйвера Windows ODBC она запрашивает следующую информацию ИМЯ ИСТОЧНИКА ДАННЫХ: ИМЯ ИСТОЧНИКА ТИПА ИМЯ СЛУЖБЫ TSN: UBASEP10G ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ:MYUSERID

какие-либо предложения?????

5 ответов

У меня нет доступа, но с помощью Excel 2007 мне пришлось сделать следующее:

  1. Откройте ODBC Administrator (в панели управления администратора)
  2. Для DSN пользователя или System DSN нажмите Добавить...
  3. Выберите "Oracle in OraDb10g_home1" в качестве драйвера
  4. В конфигурации драйвера Oracle ODBC я ввел:
    • Имя источника данных: myOracleDsn
    • Описание: это мой DSN для моей базы данных Oracle
    • TNS Service Название: oratns
    • Идентификатор пользователя: Скотт
  5. Нажмите Test Connection и введите "тигр" для пароля. Очевидно, я подключаюсь к моей базе данных Oracle Скотта / Тигра. Кроме того, когда я установил Oracle, в качестве имени TNS я выбрал oratns. Два других значения выше произвольны - вы увидите их в диалогах в Excel.
  6. Если тест работает, нажмите ОК.
  7. Перейдите в Excel и создайте новое подключение к DSN. Диалог покажет "myOracleDsn" в качестве опции. Выберите его, введите "тигр" для пароля еще раз, и вы должны получить рабочее соединение.

Попробуйте tnsping и сообщите о своих результатах.

Плохой:

C:\>tnsping notreal.world

TNS Ping Utility for 32-bit Windows: Version 9.2.0.5.0 - Production on 29-OCT-2008 15:56:47

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\oracle\ora92\network\admin\sqlnet.ora

TNS-03505: Failed to resolve name

Хорошо:

O:\>tnsping real.world

TNS Ping Utility for 32-bit Windows: Version 9.2.0.5.0 - Production on 29-OCT-2008 15:57:42

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:

C:\oracle\ora92\network\admin\sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = DBSERVER.DOMAIN.COM)(PORT = 1521)) (LOAD_BALANCE = YES) (FAILOVER = YES))
(CONNECT_DATA = (SERVICE_NAME = REAL.WORLD) 
(FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 10) (DELAY = 3))))
OK (40 msec)

Можете ли вы войти в базу данных с помощью SQL*Plus? Делать это с другой машины с работающим соединением (или с самим сервером БД) тоже хорошо.

Если так, запустите это:

select value from v$parameter where name='service_names';

В вашем TNSNAMES.ORA используйте одно из перечисленных здесь значений для SERVICE_NAME.

В вашем соединении ODBC все, что вам нужно, это установить имя службы TNS на имя, которое вы использовали выше, "UBASEP10G"

Попробуйте изменить (CONNECT_DATA = (SERVICE_NAME = UBASE)) на (CONNECT_DATA = (SID = UBASE)) в файле TNSNAMES.ora.

ServiceName и SID не обязательно совпадают и, следовательно, не всегда взаимозаменяемы.

Параметр SERVICENAME ссылается на конкретное GLOBAL_DBNAME, указанное в файле listener.ora на сервере базы данных. Это псевдоним для экземпляра на сервере. На сервере может быть несколько служебных имен, ссылающихся на один и тот же SID. Параметр SID относится к конкретному экземпляру на этом сервере.

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

(SID_DESC =
  (GLOBAL_DBNAME = THESERVICE)
  (ORACLE_HOME = d:\oracle\10.2.0_DB)
  (SID_NAME = SID1)

Позже я могу изменить фактическую базу данных, на которую ссылаются, переключив конфигурацию listener.ora:

(SID_DESC =
  (GLOBAL_DBNAME = THESERVICE)
  (ORACLE_HOME = d:\oracle\10.2.0_DB)
  (SID_NAME = SID2)

и никто не мудрее на стороне клиента. Изменения в файлах tnsnames.ora на клиентах не требовались.

Давайте вернемся к исходной точке. Откройте командное окно и подключитесь к вашей базе данных:

sqlplus myuserid / mypassword @ UBASEP10G

Это соединяется успешно?

Поскольку ответ "нет", есть ли способ, которым вы МОЖЕТЕ успешно подключиться к этой базе данных? BQ правильно, ваша проблема с именем UBASE. Вам необходимо определить, что слушатель на сервере считает именем этой базы данных. У вас есть доступ к серверу? Можете ли вы выполнить команду "lsnrctl status" на сервере? Это скажет вам сервисы, которые зарегистрированы у слушателя, и будет выглядеть примерно так:

Services Summary...
Service "UBASE" has 1 instance(s).
  Instance "UBASE", status READY, has 1 handler(s) for this service...
Другие вопросы по тегам