ORA-12154 при подключении с использованием псевдонима tns
Я установил Oracle 11.2 на ноутбук Win7x64, и почти все работает нормально. Одна вещь, которую я не понимаю, как бы то ни было. Я могу подключиться к образцу схемы HR с помощью:
sqlplus hr/password
но не с:
sqlplus hr/password@orcl
Я получаю ORA-12154: TNS:could not resolve the connect identifier specified
,
Я узнал об этом случайно, так как ожидал, что второй вариант будет правильным. Почему я могу опустить псевдоним TNS? Я новичок в Oracle, но когда я подключаюсь к другим средам, псевдоним TNS требуется, или я не могу установить соединение.
У меня есть следующее в моем tnsnames.ora
:
LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORACLR_CONNECTION_DATA = (DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)))
(CONNECT_DATA = (SID = CLRExtProc)(PRESENTATION = RO)))
ORCL, DUMMY = (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))
Я точно знаю, что он используется, потому что оба tnsping orcl
а также tnsping dummy
ОК. Может кто-то объяснить это мне?
ОБНОВЛЕНИЕ 1: вывод lsnrctl status
является следующим:
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
Start Date 11-NOV-2012 00:43:22
Uptime 0 days 0 hr. 15 min. 53 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File C:\app\Ronald\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File c:\app\ronald\diag\tnslsnr\Ronald-PDC\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
Результат SELECT name FROM v$database
это одна база данных: ORCL
,
ОБНОВЛЕНИЕ 2: Вывод tnsping orcl
(отформатирован для удобства чтения).
Used parameter files:
C:\app\Ronald\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
OK (20 msec)
1 ответ
Вы действительно создали экземпляр базы данных с именем ORCL?
Проверьте фактическое имя вашей базы данных с помощью команды
lsnrctl status
Это должно сказать вам, о каких сервисах знает слушатель, о чем вы говорите при соединении с синтаксисом @. Причина, по которой вы можете подключиться без @ORCL, заключается в том, что в этом случае вы используете межпроцессное взаимодействие (IPC) и обходите прослушиватель, потому что база данных находится на том же компьютере, что и сеанс клиента SQL*Plus.
Вы также можете узнать имя базы данных при подключении в первом примере с этим:
SELECT name FROM v$database;
РЕДАКТИРОВАТЬ:
Попробуйте синтаксис EZConnect и посмотрите, работает ли он:
sqlplus user/pw@localhost/ORCL
Имейте в виду, что TNSPING
ничего не делает, кроме как связаться со слушателем - он не проверяет доступ к базе данных.
Еще одна вещь: похоже, что TCP не настроенный протокол для слушателя? проверьте файл listener.ora (в том же каталоге, что и файл tnsnames.ora). Запись для LISTENER должна выглядеть примерно так:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
мой TNSPING
вывод выглядит немного по-другому в одной строке рядом с началом вывода:
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521)))