Hallo, ich habe ein Problem mit dem Zugriff auf Oracle DB von unserem Rechenzentrum durch einen Tunnel.
Wir haben ein ziemlich normales Rechenzentrum mit einem Rechner, der von außen zugänglich ist (ich habe seine IP in die Datei /etc/hosts als dc eingetragen) und die Oracle-Datenbank im Inneren. Die IP-Adresse unserer Oracle-Datenbank im internen Netzwerk lautet 192.168.1.7
Um einen Tunnel zu erstellen, verwende ich den Befehl:
ssh -L 1521:192.168.1.7:1521 root@dc
und natürlich funktioniert es (manchmal füge ich auch ein Debug -vv hinzu, um zu sehen, ob etwas durchläuft).
Jetzt kommt der schwierige Teil - die Verbindung zu Oracle. Ich habe instantclient 11.2. installiert und meine tnsnames.ora sieht so aus:
testdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbname)
)
)
Und wenn ich versuche, eine Verbindung mit dem Befehl:
./sqlplus username/pass@testdb
Die Verbindung wird durch den Tunnel hergestellt (ich sehe es im ssh-Debug), aber dann schlägt sie fehl erzählt:
./sqlplus username/pass@testdb
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, denselben Befehl auszuführen, wenn ich mich im Intranet befinde, funktioniert es (der einzige Unterschied ist offensichtlich, dass in der tnsnames.ora HOST 192.168.1.7 und nicht localhost steht).
Ich habe auch versucht, die einfache Befehlszeile zu verwenden:
./sqlplus username/pass@//localhost:1521/testdb
oder alternativ
./sqlplus username/pass@//localhost:1521/testdb
Aber nichts hat geholfen :)
Ich würde mich über jede Hilfe oder Anregung freuen. Fehlt mir ein ssh-Flag, um dies zu ermöglichen?
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=(PROGRAM=sqlplus@velvet)(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
wobei velvet mein lokaler Hostname und johndoe mein lokaler Benutzername ist. Warum wird sie an die andere Seite gesendet?
UPDATE:
Nach der Untersuchung ein wenig mehr von innerhalb Rechenzentrum und es sieht aus wie: - die erste Verbindung geht an den Port 1521 - aber dann wird Sqlplus auf die Portnummer > 3300 umgeleitet, die jedes Mal anders ist und sich um 3 erhöht (zumindest bei den wenigen Versuchen, die ich hatte) - wenn wir versuchen, eine Verbindung über einen Tunnel herzustellen, versucht sqlplus, sich mit localhost zu verbinden, was natürlich fehlschlägt
Der Fehler "No Listener" kommt also wahrscheinlich daher, dass wir diese Ports nicht umleiten. Gibt es eine Möglichkeit (wahrscheinlich eine Option in der Datei tnsnames.ora), die Verwendung eines bestimmten Ports zu erzwingen?
0 Stimmen
Was ist das Betriebssystem des Datenbankservers? Wenn es Windows ist, Google USE_SHARED_SOCKET
0 Stimmen
Haben Sie jemals eine Lösung für dieses Problem gefunden?
0 Stimmen
Um zu verdeutlichen: Ich stelle eine Verbindung zu einem Oracle RAC her, und ich bin nicht in der Lage, den Listener auf der anderen Seite neu zu konfigurieren (z. B. indem ich ihn so einstelle, dass er einen freigegebenen Socket verwendet). sqlplus stellt alle paar Verbindungsversuche eine Verbindung her, meine Anwendung schafft es nie, eine Verbindung herzustellen.
0 Stimmen
Meine bisherige Lösung: in einer Schleife neu verbinden, bis es gelingt, denn manchmal wird man nicht umgeleitet. seufz.
0 Stimmen
@MartijnPieters - Verwenden Sie überhaupt VM? Außerdem, welches Betriebssystem, welche Version der Datenbank?
0 Stimmen
@APC Keine VM. Verbindung von Mac OS X 10.6 zu einem 10g RAC-Cluster (4 virtuelle IP-Adressen). Ich habe festgestellt, dass das Problem durch mehrmaliges Wiederholen der Verbindung behoben werden kann.