web-dev-qa-db-ger.com

SQLPLUS-Fehler: ORA-12504: TNS: Listener erhielt in CONNECT_DATA nicht den SERVICE_NAME

Ich habe SQLPLUS von Oracle heruntergeladen:

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

Basic Lite und SQL * Plus

Ich habe dann SQL * Plus gestartet:

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.

und versucht, eine Verbindung zu einer Datenbank herzustellen:

connect user\[email protected]

und erhielt die Fehlermeldung:

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

Was vermisse ich?

Ich habe die von Jakub vorgeschlagenen Abfragen ausgeführt

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

Ihnen fehlt der Servicename:

 SQL> connect username/[email protected]:port/SERVICENAME

EDIT

Wenn Sie von einem anderen Computer aus eine Verbindung zur Datenbank herstellen können, versuchen Sie es dort:

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

und

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

Ich bin unter identischen Umständen auf dasselbe Problem gestoßen. Ich habe nicht die Datei tnsnames.ora, und ich wollte SQL * Plus mit dem Format "Easy Connection Identifier" in der Befehlszeile verwenden. Ich habe dieses Problem wie folgt gelöst.

Das SQL * Plus® Benutzerhandbuch und die Referenz gibt ein Beispiel:

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

Achten Sie auf zwei wichtige Punkte:

  1. Die Verbindungskennung wird in Anführungszeichen gesetzt. Sie haben zwei Möglichkeiten:
    1. Sie können den SQL * Plus CONNECT-Befehl verwenden und einfach die in Anführungszeichen gesetzte Zeichenfolge übergeben.
    2. Wenn Sie Verbindungsparameter in der Befehlszeile angeben möchten, müssen Sie vor Anführungszeichen Backslashes als Schilde hinzufügen. Es weist die bash an, Anführungszeichen an SQL * Plus zu übergeben.
  2. Der Dienstname muss im FQDN-Formular angegeben werden, wie es von Ihrem DBA konfiguriert wurde. 

Ich habe diese guten Fragen gefunden, um den Dienstnamen über die bestehende Verbindung zu ermitteln: 1 , 2 . Versuchen Sie diese Abfrage zum Beispiel:

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

Nur eine kleine Bemerkung: Sie erwähnen conn usr\pass, und das ist ein Tippfehler, richtig? Denn es sollte conn usr/pass sein. Oder ist es auf einem Unix-basierten Betriebssystem anders?

Nur zur Sicherheit: Wenn Sie tnsnames verwenden, sieht Ihr Login-String anders aus, als wenn Sie die Login-Methode verwenden, mit der Sie dieses Thema gestartet haben.

tnsnames.ora sollte sich in $ Oracle_HOME $\network\admin befinden. Dies ist das Oracle-Zuhause auf dem Computer, von dem aus Sie eine Verbindung herstellen möchten. In Ihrem Fall also Ihren PC. Wenn Sie mehrere Oracle_homes-Objekte haben und nur ein tnsnames.ora verwenden möchten, können Sie die Umgebungsvariable tns_admin (z. B. set TNS_ADMIN = c:\Oracle\tns) setzen und tnsnames.ora in diesem Verzeichnis ablegen.

Ihre ursprüngliche Anmeldemethode (usr/[email protected]: port/servicename) sollte immer funktionieren. Ich glaube, Sie haben bisher alle Informationen, mit Ausnahme der Portnummer, die Sie mir sicher von Ihrem DBA geben können. Wenn diese Methode immer noch nicht funktioniert, ist entweder die IP-Adresse des Servers nicht auf Ihrem Client verfügbar oder es handelt sich um ein Firewall-Problem (das Blockieren eines bestimmten Ports) oder etwas anderes, das nicht (direkt) mit Oracle oder SQL * Plus zusammenhängt.

hth! Grüße.... Remco

0
Remco