TNSPING OK but sqlplus gives ORA-12154?

匿名 (未验证) 提交于 2019-12-03 01:12:01

问题:

I have Oracle 11 running on a Windows server and I'm logged onto the same server trying to use SQL Plus. When I try to connect I get a ORA-12154 even though TNSPING and various other diagnostics look OK.

Can anyone suggest why ? Loads of detail below.


I can use sqlplus if I use EZCONNECT like this ..

sqlplus EST/EST@192.168.10.15/ORCL 

... but if I try to connect using TNSNAMES like this ...

sqlplus EST/EST@ORCL 

... I get ...

ORA-12154: TNS:could not resolve the connect identifier specified 

TNSPING works OK

C:\Documents and Settings\user1>tnsping ORCL  TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 12-NOV-2013 12:41:14  Copyright (c) 1997, 2010, Oracle.  All rights reserved.  Used parameter files: E:\app\Administrator\product\11.2.0\dbhome_2\network\admin\sqlnet.ora   Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)) ) OK (20 msec) 

And the listener looks like this :

C:\Documents and Settings\user1>lsnrctl services  LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 14-NOV-2013 12:02:59  Copyright (c) 1991, 2010, Oracle.  All rights reserved.  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) Services Summary... Service "CLRExtProc" has 1 instance(s).   Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...     Handler(s):       "DEDICATED" established:0 refused:0          LOCAL SERVER Service "orcl" has 1 instance(s).   Instance "orcl", status READY, has 1 handler(s) for this service...     Handler(s):       "DEDICATED" established:55 refused:0 state:ready          LOCAL SERVER Service "orclXDB" has 1 instance(s).   Instance "orcl", status READY, has 1 handler(s) for this service...     Handler(s):       "D000" established:0 refused:0 current:0 max:1022 state:ready          DISPATCHER           (ADDRESS=(PROTOCOL=tcp)(HOST=mariel)(PORT=1045)) The command completed successfully 

And this

C:\Documents and Settings\user1>lsnrctl status  LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 14-NOV-2013 12:29:21  Copyright (c) 1991, 2010, Oracle.  All rights reserved.  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                14-NOV-2013 11:41:10 Uptime                    0 days 0 hr. 48 min. 11 sec Trace Level               off Security                  ON: Local OS Authentication SNMP                      OFF Listener Parameter File   E:\app\Administrator\product\11.2.0\dbhome_2\network\admin\listener.ora Listener Log File         e:\app\administrator\diag\tnslsnr\mariel\listener\alert\log.xml Listening Endpoints Summary...   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.15)(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 

Here are the various config files:

listener.ora

# listener.ora Network Configuration File: E:\app\Administrator\product\11.2.0\dbhome_2\network\admin\listener.ora # Generated by Oracle configuration tools.  SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (SID_NAME = CLRExtProc)       (ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_2)       (PROGRAM = extproc)       (ENVS = "EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_2\bin\oraclr11.dll")     )   )  LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1521))     )   )  ADR_BASE_LISTENER = E:\app\Administrator 

tnsnames.ora

# tnsnames.ora Network Configuration File: E:\app\Administrator\product\11.2.0\dbhome_2\network\admin\tnsnames.ora # Generated by Oracle configuration tools.  ORACLR_CONNECTION_DATA =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))     )     (CONNECT_DATA =       (SID = CLRExtProc)       (PRESENTATION = RO)     )   )  ORCL =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = ORCL)     )   ) 

sqlnet.ora

# sqlnet.ora Network Configuration File: E:\app\Administrator\product\11.2.0\dbhome_2\network\admin\sqlnet.ora # Generated by Oracle configuration tools.  # This file is actually generated by netca. But if customers choose to  # install "Software Only", this file wont exist and without the native  # authentication, they will not be able to connect to the database on NT.  SQLNET.AUTHENTICATION_SERVICES= (NTS)  NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) 

回答1:

Create an environment variable TNS_ADMIN that points to the directory where your tnsnames.ora file resides. Then try to connect with sqlplus.

If that works, then my guess is you maybe installed the Oracle client software too, and when you run sqlplus, it looks for the tnsnames.ora file in your client home.

-- Instructions for Adding the Environment variable TNS_ADMIN in windows
1. Go to control panel / system
2. select Advanced system settings
3. Select "Advanced" tab, and the environment variable button is at the bottom.
4. create new variable TNS_ADMIN and give the path where the .ora files are stored. e.g. C:\app\oracle\product\11.2.0\client_1\network\admin



回答2:

Sqlplus will give this error if you have an at-sign (@) in your password, which you do. Sqlplus thinks you are inputting the connection string as a parameter. Change your password (you can do this with SQL Developer).

Moral: Don't use at-signs in Oracle passwords.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!