Beim Versuch mich via sqlplus mit der Datenbank eines Kunden zu verbinden, bekam ich folgende Fehlermeldung: ORA-12162 TNS:net service name is incorrectly specified.
Für diejenigen, die auch in diese Situation kommen, dieser kleine Beitrag dazu, warum und wie man es umgeht:
ich hatte folgende Kommandos eingegeben:
1 2 3 4 5 6 7 8 9 10 11 12 13 | oracle@db04-p:/opt/user/oracle () # ps -ef|grep pmon oracle 1906 4662 0 Apr 08 ? 4:34 ora_pmon_TEST1 oracle 26624 26220 0 16:35:54 pts/3 0:00 grep pmon grid 25960 4662 0 Mar 31 ? 6:17 asm_pmon_+ASM2 oracle@db04-p:/opt/user/oracle () # ORACLE_SID=TEST1 oracle@db04-p:/opt/user/oracle (TEST1) # sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Fri Apr 17 16:36:15 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12162: TNS:net service name is incorrectly specified |
Um nun das Environment besser zu analysieren, habe ich mich vom Server wieder ab- und angemeldet. Danach habe ich mir das Environment angeschaut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | oracle@db04-p:/opt/user/oracle () # env|sort DISPLAY=localhost:10.0 EDITOR=vi HOME=/opt/user/oracle HOSTNAME=db04-p LOGNAME=oracle MAIL=/var/mail//oracle MANPATH=/usr/dt/man:/usr/man:/usr/openwin/share/man:/usr/ssh/man:/usr/symcli/man:/usr/cluster/man:/opt/SUNWcluster/man NLS_DATE_FORMAT=DD.MM.YYYY HH24:MI:SS ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1 PAGER=less PATH=/u01/app/oracle/product/11.2.0.4/dbhome_1/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/ucb:/usr/cluster/bin:/usr/cluster/lib/sc:/usr/open PS1=$USER@$HOSTNAME:$PWD ($ORACLE_SID) # PWD=/opt/user/oracle SHELL=/usr/bin/ksh TERM=vt100 TZ=MET USER=oracle _=/usr/bin/env |
Fazit:
Im Gegensatz zu den circa 200 anderen Datenbankservern war hier die Variable ORACLE_SID nicht vorbesetzt noch exportiert. Beim Setzen mit
1 | ORACLE_SID=TEST1 |
war diese so in der Shell zwar sichtbar, nicht jedoch innerhalb jedes weiteren Programms, das in dieser aufgerufen wird, da sie nicht exportiert worden war.
1 | export ORACLE_SID=TEST1 |
ist somit die kleine, ganze Lösung dieses Problems.
Viel Spass …
Hi Rainer, als Linux-Laie habe ich natürlich nicht viel zu reden, aber es ist mir sofort aufgefallen, dass du zuerst „export“ unterlassen hattest. Nämlich soweit in mein Linux-Laie-Hirn eingebrannt ist, müsste man das immer machen.
Ferner interessant ist, dass wohl unter Windows die Umgebungs-Variable ORACLE_SID ebenso nicht gesetzt wird. sqlplus verbindet halt mit der Instanz, aus deren dbhome er gestartet war. Dann um mit dem gleichen sqlplus mit einer anderen Instanz (die aus anderem dbhome läuft) zu verbinden, muss man eben ORACLE_SID setzen, aber dann reicht eben nur „lokal“ in der Kommandozeile-Session, aus der sqlplus gestartet wird.
Danke & Grüße
Dmytro