Oracle - соединение ODBC с использованием ошибки MS Access (ORA-12154) - PullRequest
1 голос
/ 29 октября 2008

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

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

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

В моем файле tsnnames.ora есть раздел, который выглядит следующим образом: UBASEP10G = (ОПИСАНИЕ = (ADDRESS_LIST = (АДРЕС = (ПРОТОКОЛ = TCP) (ХОСТ = bxxx-xxx.yyyy.com) (ПОРТ = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = UBASE) ) )

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

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

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

любые предложения ?????

Ответы [ 5 ]

2 голосов
/ 29 октября 2008

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

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

Попробуйте 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)
0 голосов
/ 29 октября 2008

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

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...
0 голосов
/ 29 октября 2008

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

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

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

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

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

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

Попробуйте изменить (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 на клиентах не требовались.

...