Hallo, ich habe ein Problem beim Zugriff auf Oracle DB von unserem Rechenzentrum durch einen Tunnel.Verwenden von Oracle DB durch SSH-Tunnel. Fehler "ORA-12541: TNS: kein Listener"
Wir haben ein ziemlich Standard-Datacenter mit einer Maschine von außen zugänglich (Ich habe es in der Datei/etc/hosts als dc) und die Oracle DB innerhalb. Die IP-Adresse unserer Oracle-Datenbank auf internes Netzwerk ist 192.168.1.7
einen Tunnel erstellen ich den Befehl bin mit:
ssh -L 1521:192.168.1.7:1521 [email protected]
und natürlich funktioniert es (manchmal auch ich einige Debug -vv hinzufügen um zu sehen, ob etwas passiert.
Jetzt der schwierige Teil - Verbindung zu Oracle. Ich habe den Instant Client 11.2 installiert. und meine tnsnames.ora sieht wie folgt aus:
testdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbname)
)
)
Und wenn ich versuche, den Befehl zu verbinden mit:
./sqlplus username/[email protected]
Es beginnt durch den Tunnel verbindet (ich es in der ssh debug sehen), aber dann es scheitert telling:
./sqlplus username/[email protected]
SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 13 20:46:07 2010
Copyright (c) 1982, 2009, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS:no listener
Enter user-name:
wenn ich versuche, auf diesen gleichen Befehl auszuführen, wenn ich im Intranet bin es (offensichtlich der einzige Unterschied funktioniert ist, dass in der tnsnames.ora HOST ha wir 192.168.1.7 und nicht der localhost).
Ich habe auch versucht die einfache Befehlszeile zu verwenden:
./sqlplus username/[email protected]//localhost:1521/testdb
oder alternativ
./sqlplus username/[email protected]//localhost:1521/testdb
Aber nichts half :)
ich Hilfe oder Anregungen schätzen würde. Vermische ich etwas ssh-Flagge, um es möglich zu machen?
Wahrscheinlich die Protokolldatei:
***********************************************************************
Fatal NI connect error 12541, connecting to:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DBNAME)(CID=([email protected])(HOST=velvet)(USER=johndoe))))
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.1.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
Time: 13-JAN-2010 20:48:42
Tracing not turned on.
Tns error struct:
ns main err code: 12541
TNS-12541: Message 12541 not found; No message file for product=network, facility=TNS
ns secondary err code: 12560
nt main err code: 511
TNS-00511: Message 511 not found; No message file for product=network, facility=TNS
nt secondary err code: 111
nt OS err code: 0
wo Samt mein lokaler Hostname und johndoe ist mein lokaler Benutzername ein. Warum wird es auf die andere Seite geschickt?
UPDATE:
Nach einem wenig mehr von innen Rechenzentrum untersucht und es sieht so aus: - die erste Verbindung mit dem Port 1521 geht - aber dann sqlplus an die Port-Nummer umgeleitet wird> 3300 , das ist jedes Mal anders und inkrementieren um 3 (mindestens wenige Versuche, die ich hatte) - wenn wir versuchen, durch einen Tunnel zu verbinden sqlplus wird versuchen, eine Verbindung zu localhost und es wird offensichtlich fehlschlagen
Also der Fehler "No Listener "kommt wahrscheinlich von der Tatsache, dass wir tho nicht umleiten se Häfen. Gibt es eine Möglichkeit (wahrscheinlich eine Option in der Datei tnsnames.ora), um bestimmte Ports zu verwenden?
ansehen Was das Betriebssystem des Datenbankservers ist? Wenn es Windows ist, Google USE_SHARED_SOCKET –
Schlagen Sie dies auch; Hast du jemals eine Lösung gefunden? –
Um zu verdeutlichen: Ich verbinde mich mit einem Oracle RAC, und ich bin nicht in der Lage, den Listener auf der anderen Seite neu zu konfigurieren (z. B. die Verwendung eines Shared Sockets). sqlplus verbindet sich einmal alle paar Verbindungsversuche, meine Anwendung schafft es nie, eine Verbindung herzustellen. –