gpt4 book ai didi

oracle - 使用 tns 别名连接时出现 ORA-12154

转载 作者:行者123 更新时间:2023-12-01 15:25:00 24 4
gpt4 key购买 nike

我在 Win7x64 笔记本电脑上安装了 Oracle 11.2,几乎一切正常。但是,我不明白一件事。我可以通过以下方式连接到示例 HR 模式:

sqlplus hr/password

但不包括:

sqlplus hr/password@orcl

我得到一个ORA-12154:TNS:无法解析指定的连接标识符

这是我偶然发现的,因为我希望第二个选项是正确的。为什么我可以省略 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 orcltnsping 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)

最佳答案

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

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

lsnrctl status

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

您还可以在第一个示例中连接时找到数据库名称:

SELECT name FROM v$database;

编辑:

尝试 EZConnect 语法,看看是否可行:

sqlplus user/pw@localhost/ORCL

请记住,TNSPING 除了联系监听器外不会做任何事情 - 它不会验证是否可以访问数据库。

还有一件事:看起来 TCP 可能不是为监听器配置的协议(protocol)?检查您的 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)))

关于oracle - 使用 tns 别名连接时出现 ORA-12154,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com