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