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)))
Другие вопросы по тегам