web-dev-qa-db-fra.com

Erreur SQLPLUS: ORA-12504: TNS: le programme SERVICE_NAME n'a pas été attribué au programme d'écoute dans CONNECT_DATA.

J'ai téléchargé SQLPLUS d'Oracle:

http://www.Oracle.com/technetwork/topics/winx64soft-089540.html

Basic Lite et SQL * Plus

J'ai ensuite lancé SQL * Plus:

c:\Program Files\Oracle\instantclient_12_1>sqlplus /nolog

SQL*Plus: Release 12.1.0.2.0 Production on Wed Apr 15 15:25:36 2015

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

et essayé de se connecter à une base de données:

connect user\password@hostname

et a reçu le message d'erreur:

ERROR:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

Qu'est-ce que je rate?

J'ai couru les requêtes suggérées par Jakub, je me suis

SQL> select sys_context('USERENV','SERVICE_NAME') from dual;

SYS_CONTEXT('USERENV','SERVICE_NAME')
--------------------------------------------------------------------------------

SYS$USERS

SQL> select sys_context('USERENV','SID') from dual;

SYS_CONTEXT('USERENV','SID')
--------------------------------------------------------------------------------

877

SQL>
14
gbritton

Vous manquez le nom du service:

 SQL> connect username/password@hostname:port/SERVICENAME

MODIFIER

Si vous pouvez vous connecter à la base de données à partir d'un autre ordinateur, essayez de le lancer:

select sys_context('USERENV','SERVICE_NAME') from dual

et

select sys_context('USERENV','SID') from dual
16
jakub.petr

J'ai rencontré exactement le même problème dans des circonstances identiques. Je n'ai pas le fichier tnsnames.ora et je voulais utiliser SQL * Plus avec le format d'identificateur Easy Connection en ligne de commande. J'ai résolu ce problème comme suit.

Le Guide de l'utilisateur et référence SQL * Plus® donne un exemple:

sqlplus hr @ "" sales-server: 1521/sales.us.acme.com\"

Faites attention à deux points importants:

  1. L'identifiant de connexion est cité. Vous avez deux options:
    1. Vous pouvez utiliser la commande SQL * Plus CONNECT et simplement transmettre la chaîne entre guillemets.
    2. Si vous souhaitez spécifier des paramètres de connexion sur la ligne de commande, vous devez ajouter des barres obliques inverses en tant que boucliers avant les guillemets. Il indique à la bash de passer des guillemets à SQL * Plus.
  2. Le nom du service doit être spécifié dans le nom de domaine complet tel que configuré par votre administrateur de base de données. 

J'ai trouvé ces bonnes questions pour détecter le nom du service via une connexion existante: 1 , 2 . Essayez cette requête par exemple:

SELECT value FROM V$SYSTEM_PARAMETER WHERE UPPER(name) = 'SERVICE_NAMES'
12
alexeionin

Juste un petit constat: vous continuez de mentionner conn usr\pass, et c'est une faute de frappe, non? Parce que ça devrait être conn usr/pass. Ou est-ce différent sur un système d'exploitation basé sur Unix?

De plus, juste pour être sûr: si vous utilisez tnsnames, votre chaîne de connexion sera différente de celle utilisée lorsque vous utiliserez la méthode de connexion avec laquelle vous avez commencé cette rubrique.

tnsnames.ora devrait être dans $ Oracle_HOME $\network\admin. C’est la maison Oracle sur la machine à laquelle vous essayez de vous connecter, donc dans votre cas, votre PC. Si vous avez plusieurs Oracle_homes et souhaitez n’utiliser qu’un seul tnsnames.ora, vous pouvez définir la variable d’environnement tns_admin (par exemple, définir TNS_ADMIN = c:\Oracle\tns) et y placer tnsnames.ora.

Votre méthode de connexion initiale (usr/[email protected]: port/nom_service) devrait toujours fonctionner. Jusqu'à présent, je pense que vous avez toutes les informations, à l'exception du numéro de port, que je suis sûr que votre DBA sera en mesure de vous donner. Si cette méthode ne fonctionne toujours pas, l'adresse IP du serveur n'est pas disponible sur votre client, il s'agit d'un problème de pare-feu (blocage d'un certain port) ou d'un autre élément non (directement) lié à Oracle ou SQL * Plus.

hth! Regards, Remco

0
Remco