web-dev-qa-db-fra.com

TNSPING OK mais sqlplus donne ORA-12154?

J'ai Oracle 11 en cours d'exécution sur un serveur Windows et je suis connecté au même serveur en essayant d'utiliser SQL Plus. Lorsque j'essaie de me connecter, j'obtiens un ORA-12154 même si TNSPING et divers autres diagnostics semblent OK.

Quelqu'un peut-il suggérer pourquoi? Beaucoup de détails ci-dessous.


Je peux utiliser sqlplus si j'utilise EZCONNECT comme ça ..

sqlplus EST/[email protected]/ORCL

... mais si j'essaye de me connecter en utilisant TNSNAMES comme ceci ...

sqlplus EST/EST@ORCL

... Je reçois ...

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

TNSPING fonctionne bien

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)

Et le écouteur ressemble à ceci:

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 <machine: MARIEL, pid: 2400>
         (ADDRESS=(PROTOCOL=tcp)(Host=mariel)(PORT=1045))
The command completed successfully

Et ça

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

Voici les différents fichiers de configuration:

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)
13
glaucon

Créez une variable d'environnement TNS_ADMIN qui pointe vers le répertoire où réside votre fichier tnsnames.ora. Essayez ensuite de vous connecter avec sqlplus.

Si cela fonctionne, je suppose que vous avez peut-être également installé le logiciel client Oracle, et lorsque vous exécutez sqlplus, il recherche le fichier tnsnames.ora dans la maison de votre client.

- Instructions pour ajouter la variable d'environnement TNS_ADMIN dans les fenêtres
1. Aller au panneau/système de contrôle
2. sélectionnez Paramètres système avancés
3. Sélectionnez l'onglet "Avancé", et le bouton de variable d'environnement est en bas.
4. créez une nouvelle variable TNS_ADMIN et indiquez le chemin où les fichiers .ora sont stockés. par exemple. C:\app\Oracle\product\11.2.0\client_1\network\admin

15
DCookie

Sqlplus donnera cette erreur si vous avez un signe at (@) dans votre mot de passe, ce que vous faites. Sqlplus pense que vous entrez la chaîne de connexion en tant que paramètre. Modifiez votre mot de passe (vous pouvez le faire avec SQL Developer).

Moralité: n'utilisez pas de signes at dans les mots de passe Oracle.

9
Gary

tnslsnr est en hausse mais la base de données est en panne.

Vérifiez que la base de données est en cours d'exécution

ps aux | fgrep pmon

S'il n'y a pas un tel processus, essayez de démarrer la base de données manuellement

su - Oracle
export Oracle_SID=XE
sqlplus sys as sysdba

Et puis dans la console SQL

startup
0
user3132194