首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tns别名连接时ORA-12154

使用tns别名连接时ORA-12154
EN

Stack Overflow用户
提问于 2012-11-10 19:31:53
回答 1查看 12.4K关注 0票数 3

我在一台Win7x64笔记本电脑上安装了Oracle11.2,几乎所有设备都正常工作。不过,有一件事我不明白。我可以通过以下方式连接到示例HR模式:

代码语言:javascript
复制
sqlplus hr/password

但不包括:

代码语言:javascript
复制
sqlplus hr/password@orcl

我得到了一个ORA-12154: TNS:could not resolve the connect identifier specified

我偶然发现了这一点,因为我期望第二种选择是正确的。为什么我可以省略TNS的化名?我是Oracle初学者,但当我连接到其他环境时,需要TNS别名,否则我无法连接。

我的tnsnames.ora中有以下内容

代码语言:javascript
复制
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 orcltnsping dummy都很好。有人能给我解释一下吗?

更新1lsnrctl status的输出如下:

代码语言:javascript
复制
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

更新2tnsping orcl的输出(为可读性格式化)。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-10 20:18:16

您真的创建了一个名为ORCL的数据库实例吗?

使用以下命令查看数据库的实际名称

代码语言:javascript
复制
lsnrctl status

这将告诉您侦听器知道哪些服务,这就是您在使用@语法连接时要与之交谈的内容。您可以不使用@ORCL进行连接的原因是,在这种情况下,您使用进程间通信(IPC)并绕过侦听器,因为数据库与SQL*Plus客户端会话位于同一台计算机上。

在第一个示例中使用以下内容连接时,还可以找到数据库名称:

代码语言:javascript
复制
SELECT name FROM v$database;

编辑:

试试EZConnect语法,看看它是否有效:

代码语言:javascript
复制
sqlplus user/pw@localhost/ORCL

请记住,TNSPING除了与侦听器联系之外什么也不做--它不会验证数据库是否可以被访问。

还有一件事:看起来TCP可能不是为侦听器配置的协议?检查listener.ora文件(与tnsnames.ora文件位于同一个目录)。侦听器的条目应该如下所示:

代码语言:javascript
复制
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

在输出开始附近的一行中,我的TNSPING输出看起来有点不同:

代码语言:javascript
复制
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13325367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档