2008-10-29 4 views
1

Я пытаюсь использовать доступ MS для подключения к базе данных Oracle. Я продолжаю получать следующее сообщение об ошибке:Соединение Oracle - ODBC с использованием ошибки MS Access (ORA-12154)

ORA-12154: TSN- не может разрешить идентификатор подключения secified

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

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

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

ИМЕНА. DIRECTORY_PATH = (HOSTNAME, ONAMES, TNSNAMES, LDAP, EZCONNECT)

При использовании утилиты настройки драйвера ODBC для Windows он запрашивает следующую следующей информации DATA SOURCE NAME: MySource ИМЕНИ TSN SERVICE ИМЕНИ: UBASEP10G USERID: MYUSERID

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

ответ

2

У меня нет доступа, но с помощью Excel 2007, я должен был сделать следующее:

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

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

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

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

+0

Спасибо за предложение, - но я все еще получаю сообщение об ошибке при попытке проверить подключение «TSN: не удалось разрешить идентификатор соединения, указанный» – Joe 2008-10-29 16:43:34

0

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

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

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

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

В вас ODBC связи, все, что вам нужно, это установить TNS Service Name с именем, который вы использовали выше, «UBASEP10G»

+0

Я считаю, что я это делаю, и это не работает .... ИДЕНТИФИКАТОР ИСТОЧНИКА ДАННЫХ: ИМЯ НАРУШЕНИЯ TSN СЕРВИСНОЕ ИМЯ: UBASEP10G USERID: MYUSERID .... notice СЕРВИСНОЕ ИМЯ: UBASEP10G - это не то, что вы только что предложили? – Joe 2008-10-29 16:58:15

+0

Существует различие между «SERVICE_NAME» в TNSNAMES.ORA и «TNS Service Name» в диалоговом окне ODBC. В диалоговом окне это «имя службы TNS» должно быть точно таким, что находится слева от = в вашем файле TNSNAMES.ORA («UBASEP10G»). – 2008-10-29 17:15:19

+0

Но ваша проблема заключается в том, что вы не можете разрешить SERVICE_NAME в TNSNAMES.ORA.Вот почему я получаю это значение напрямую от того, что, по мнению экземпляра базы данных, он слушает. – 2008-10-29 17:16:29

0

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

SQLPLUS myuserid/мойпароль @ UBASEP10G

ли подключить это успешно?

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

Services Summary... 
Service "UBASE" has 1 instance(s). 
    Instance "UBASE", status READY, has 1 handler(s) for this service... 
0

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

Bad:

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) 
Смежные вопросы