ORACLE: SQLNET-Fehler

Hallo!

Ich versuche gerade, SQLNET auf meinem PC zu konfigurieren und bekomme den Fehler : „TNS-12541: TNS: Kein Listener“.
Ich verstehe nur nicht, warum er meinen Listener nicht findet !

Hier der Status des Listeners:
##########################################################
>lsnrctl status

LSNRCTL for 32-bit Windows: Version 9.2.0.3.0 - Production on 06-AUG-2004 18:34:02
Copyright © 1991, 2002, Oracle Corporation. All rights reserved.

Verbindung mit (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))) wird aufgebaut
STATUS des LISTENER

Alias LISTENER
Version TNSLSNR for 32-bit Windows: Version 9.2.0.3.0 - Production
Startdatum 06-AUG-2004 18:27:43
Uptime 0 Tage 0 Std. 6 Min. 20 Sek.
Trace-Ebene off
Sicherheit OFF
SNMP OFF
Parameterdatei des Listener C:\oracle\ora92\network\admin\listener.ora
Log-Datei des Listener C:\oracle\ora92\network\log\listener.log
Zusammenfassung Listening-Endpunkte…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.\pipe\EXTPROC0ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=amilo)(PORT=1521)))
Services _bersicht…
Dienst „OEMREP“ hat 1 Instanz(en).
Instanz „OEMREP“, Status UNKNOWN, hat 1 Handler f³r diesen Dienst…
Dienst „PLSExtProc“ hat 1 Instanz(en).
Instanz „PLSExtProc“, Status UNKNOWN, hat 1 Handler f³r diesen Dienst…
Dienst „db92“ hat 1 Instanz(en).
Instanz „db92“, Status UNKNOWN, hat 1 Handler f³r diesen Dienst…
Der Befehl wurde erfolgreich ausgef³hrt.
##########################################################

wenn ich nun mit TNSPING die Verbindung prüfe, erhalte ich folgendes:

##########################################################

>tnsping db92

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 06-AUG-2004 18:36:37

Copyright © 1997 Oracle Corporation. All rights reserved.

Parameterdateien benutzt:
c:\oracle\ora92\network\admin\sqlnet.ora
c:\oracle\ora92\network\admin\tnsnames.ora

Adapter TNSNAMES zur Aufl÷sung des Alias benutzt
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = amilo)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = db92)))
TNS-12541: TNS: Kein Listener
####################################################

-> Es ist der richtige Listener gestartet (der unter c:\oracle\ora92)
-> Es wird die richtige tnsnames.ora verwendet (unter demselben Pfad)
-> vorsichtshalber habe ich auch TNS_ADMIN auf diesen Pfad gesetzt
-> er sagt mir, dass er auf den Host amilo, den Port 1521 und den Service-Namen db92 den Connect versucht, und dies ist auch so im Listener eingetragen. Und trotzdem findet er keinen Listener

Weiss jemand, wo das Problem liegen könnte?

Für Eure Hilfe wäre ich Euch dankbar

Gruß
Regine

Hallo Regine
Hast du ORACLE_HOME gesetzt?
echo %ORACLE_HOME% ergibt C:\oracle\ora92\ ?
wie sehen denn die tnsnames.ora und listener.ora aus?

Gruss Ulrich

listener.ora, tnsnames.ora
Hallo Regine
so sollte es m.E. ungefähr aussehen:

C:\oracle\ora92\network\admin\listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = amilo)(PORT = 1521)
)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = db92.amilo.ch)
(ORACLE_HOME = C:\oracle\ora92)
(SID_NAME = db92)
)
)

C:\oracle\ora92\network\admin\tnsnames.ora
db92 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = amilo)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = db92.amilo.ch)
)
)

Gruss Ulrich

Hallo Ulrich,

ORACLE_HOME habe ich auf c:\oracle\ora92 gesetzt.
Der Dienst des Listeners zeigt auch auf das richtige Verzeichnis
und wenn ich im DOS-Fenster mit „lsnrctl start“ den Listener starte,
kann ich dies auch unter „Dienste“ sehen.
Somit müßte doch eigentlich sichergestellt sein,
dass ich den richtigen Listener verwende, oder?
Der Listener läßt sich ordnungsgemäß starten und der
Befehl „tnsping db92“ gibt auch an, dass er die Parameterdateien
(tnsnames.ora und sqlnet.ora) aus demselben Verzeichnis des Listeners nimmt.

Der Listener sieht wie folgt aus:
############################################

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = amilo)(PORT = 1521))
)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\ora92)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = db92.amilo.ch)
(ORACLE_HOME = C:\oracle\ora92)
(SID_NAME = db92)
)
)
##################################################

Ich habe nach Deinem Vorschlag unter GLOBAL_DBNAME den Eintrag
von „db92“ auf „db92.amilo.ch“ geändert, aber das juckt ihn genausowenig und er sagt immernoch „kein Listener“.

Die TNSNAME.ORA habe ich auch nur noch auf diesen Eintrag reduziert:
####################################################
db92=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = amilo)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = db92)
)
)
#####################################################

Irgendwas am Pfad muss nicht stimmen, denn bevor ich ORACLE
Developer-Suite installiert hatte, konnte ich auf die DB zugreifen.
(Ich hatte danach den Zugriff zwar nicht kontrolliert, aber es war das Einzige, was danach geschehen ist)

Durch die Installation steht in der PATH-Variable das Verzeichnis
C:\oracle\oradev vor dem Eintrag c:\oracle\ora92 (was auf meine Datenbank zeigt). Die CLASSPATH zeigt nur auf das neue Verzeichnis.

Haben diese Variablen vielleicht einen Einfluß auf das Ganze?

liebe Grüße
Regine

Hallo Regine

Irgendwas am Pfad muss nicht stimmen, denn bevor ich ORACLE
Developer-Suite installiert hatte, konnte ich auf die DB
zugreifen.
(Ich hatte danach den Zugriff zwar nicht kontrolliert, aber es
war das Einzige, was danach geschehen ist)

Durch die Installation steht in der PATH-Variable das
Verzeichnis
C:\oracle\oradev vor dem Eintrag c:\oracle\ora92 (was auf
meine Datenbank zeigt). Die CLASSPATH zeigt nur auf das neue
Verzeichnis.

Haben diese Variablen vielleicht einen Einfluß auf das Ganze?

liebe Grüße
Regine

Da gehe ich mal davon aus, dass da was geändert hat, aber interessanter ist dann die Variable %ORACLE_HOME%, diese bestimmt den Pfad für die connection files.
Wenn dies Variable nun nach C:\oracle\oradev zeigt, werden die richtigen *.ora nicht gefunden.
Deine „alten“ *.ora files sollten m.E. nach wie vor taugen, du kannst sie spasshalber mal in das neue dev Verzeichnis in network\admin kopieren und testen.

Bei der PATH Variable kannst du die neuen Einträge hinter die alten setzen. Dies könnte allerdings bei den Developer Tools dann hineinspielen.

Der classpath sollte eigentlich nur bei den java Teilen ins Spiel kommen.

Gruss Ulrich

Hallo Ulrich,

der Befehl echo „%ORACLE_HOME%“ gibt korrekt „c:\oracle\ora92“ aus.
Die Registry hat auch den richtigen Pfad und das richtige „Haupt-Oracle_HOME-Verzeichnis“.
Ich hatte auch nochmal mit dem Befehl set ORACLE_HOME den Pfad im Dos-Fenster gesetzt, da ich unter dem SET-Befehl im DOS-Fenster die Variablen ORACLE_HOME und TNS_ADMIN nicht gesehen hatte.

Die .ORA-Dateien habe ich versuchsweise in das network/admin-Verzeichnis des Developers kopiert, bringt aber dasselbe Ergebnis.
Auch die Leerzeilen am Ende habe ich aus beiden .ORA-Dateien entfernt,
da es früher einmal damit Probleme gab und ich sicher gehen wollte, dass es daran nicht lag.

Ich habe sogar nochmal neu gebootet und anschliessend mit „set“ die Variablen neu gesetzt.
Immer derselbe Effekt! Er findet einfach meinen Listener nicht!

Wie kann ich denn die PATH-Variable setzen? In der Registry finde ich sie nicht. Unter Unix gab es die ORAENV-Datei. Unter Windows sehe ich zwar alle Werte in der Registry (unter HKEY_LOCAL_MACHINE/Software/Oracle), sie werden aber unter DOS mit SET nicht angezeigt und deshalb hatte ich sie zuletzt immer nochmal händisch gesetzt.
Wie holt er sich denn unter Windows die Werte?
Die Registry-Werte müßten doch eigentlich ausreichend sein, oder nicht?

Gruss
Regine

Hallo Regine

Der set Befehl in der Windows Shell ist nur für die jeweilige shell gültig, das kennst du auch aus unix, dort können wir aber noch entscheiden, ob er im geforkten Prozess auch noch wirken soll.

Die Umgebungsvariablen unter Windows findest du seit W95 in den Systemeinstellungen.
WinXP:
Start, Systemsteuerung, System, Erweitert, unten der Button Umgebungsvariablen (ziemlich besoffen)

Bei den anderen Windows Versionen sind sie auch im System versteckt, aber sind ein wenig anders platziert.

Die Variablen sind auch in der Registry su finden und manipulierbar, sind aber teilweise nur temporär oder mehrfach vorhanden, je nach Version. Wenn du sie über die Registry einstellen willst, musst du an verschiedenen Orten graben.

Der sichere Weg führt über die Systemeinstellungen.

die db ist lokal?
wie läuft den sqlplus „/as sysdba“?

Hast du die ORACLE_SID gesetzt?

Wie rufst du ORACLE SQLNET denn eigentlich auf?

Und dann noch: reboot unter Windows? aber immer doch, sonst wird da keine ENV-Variable übernommen.

Gruss Ulrich

1 Like

Hallo Ulrich,

ich habe den Zugriff geschafft!
Erschlage mich nicht, aber der Firewall auf meinem PC fuschte mir dazwischen.

Bei mir ist alles auf einem Rechner installiert,
also DB-Server und Client ist ein und derselbe PC.
Die Verbindung von SQLNET testete ich mit TNSPING.

Ich änderte zuletzt die PATH-Variable in der Systemsteuerung, wie Du es erklärt hattest, und setze auch dort nochmal TNS_ADMIN und ORACLE_SID.
Danach bootete ich erneut und startete nochmal einen Versuch mit TNSPING.
Da meldete sich auf einmal mein Firewall
(ich habe ihn immer aktiv, da ich zwischendurch immer mal ins Internet gehe) und fragte mich, ob er TNSPING durchlassen soll.
Ich lehnte schon gedankenlos ab (deshalb kann er dies durchaus schon früher mal gefragt haben) und da kam mir auf einmal der Gedanke, dass das evtl. mein Problem sein könnte.
Also schaltete ich den Firewall ab und siehe da, der Zugriff funktioniert !

Ich könnte mir echt in den Hintern beissen, dass es daran lag und ich in keinster Weise an sowas gedacht habe.
Vielen vielen Dank für Deine Mühe und Deine Hilfe.

Und danke auch für die Tips, wie ich die Umgebungsvariablen unter Windows finden und setzen kann.
In der Registry ist wirklich alles doppelt und dreifach eingetragen, so dass ich nie weiss, wo er sich welche Informationen herholt.

liebe Grüße und danke nochmal
Regine

Geduld bringt Rosen…
Hallo Regine

Glückwunsch zum Volltreffer.

Die meisten Anfragen, die ich über Windows Netzwerke bekomme, werden durch Software-Firewalls verursacht. Dass auch Oracle-Clients davon betroffen werden ist im nachhinein ja logisch, aber wer denkt auch an sowas.

Und das mit dem in den Hintern beissen, was meinst du, wieviele admins dann häufig stehen müssen :wink:

Gruss Ulrich