我在一台Win7x64笔记本电脑上安装了Oracle11.2,几乎所有设备都正常工作。不过,有一件事我不明白。我可以通过以下方式连接到示例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 successfullySELECT 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)发布于 2012-11-10 20:18:16
您真的创建了一个名为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 =
(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)))https://stackoverflow.com/questions/13325367
复制相似问题