2010-01-13 5 views
8

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?

+0

ansehen Was das Betriebssystem des Datenbankservers ist? Wenn es Windows ist, Google USE_SHARED_SOCKET –

+0

Schlagen Sie dies auch; Hast du jemals eine Lösung gefunden? –

+0

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. –

Antwort

3

Blick in Metalink ID 361284.1 (Edit: effektiv nicht öffentlich, sondern finden die Info here)

Es scheint, wie Oracle Connection Manager würde Ihre Wahl sein. Es behandelt im Grunde die Portweiterleitungen innerhalb der Firewall. Ich habe es vorher nicht benutzt und kann Sie nicht weiter beraten.


Update: Eine andere Möglichkeit, MTS zu gehen wäre, konfigurieren Sie mit bestimmten Ports Disponenten zu verwenden und diese Ports in der Firewall öffnen. Sie müssen dafür keine zusätzliche Software installieren, aber die Verbindung über den gemeinsam genutzten Server erfordert unter Umständen eine Erhöhung von LARGE_POOL_SIZE. Sie benötigen also die DBA-Rolle, um den DISPATCHERS-Parameter zu ändern. Du müsstest auch die DB hüpfen lassen.

+0

Leider kann ich nichts auf der Serverseite hinzufügen, geschweige denn die Firewall. Ich habe jedoch schon einmal etwas über den Oracle Connection Manager gelesen, und wenn Sie in der Lage sind, ihn einzurichten, klingt das sicherlich nach einer großartigen Option, um mit der Umleitung auf Verbindung umzugehen. –

3

Normalerweise sollte dies funktionieren.Ich würde keinen Standard-Listener-Port als Eintrag für den SSH-Tunnel verwenden, aber das sollte nicht das Problem sein. Ich würde auch nicht das root-Konto verwenden, um die ssh-Verbindung zu erstellen, vorzugsweise ein dediziertes reguläres Konto. Verwenden Sie gemeinsam genutzte Server oder handelt es sich bei der Datenbank um eine RAC-Datenbank mit einer Lastausgleichskonfiguration? Eine schöne Erklärung ist hier How can I connect to ORACLE DB through ssh tunnel chain (double tunnel, server in company network) ?, ein bisschen komplizierter .....

Update Kasse DbVisualizer, wurde nun SSH-Tunneling integriert. Ich denke, es lohnt sich, es wenigstens einmal auszuprobieren. Es ist nicht kostenlos, aber gut. Multi-Plattform und Multi-Datenbank und sehr flexibel.

0

Können Sie versuchen, eine Spur zu machen, genau zu bestimmen, was geschieht:

  • Für Server-Trace, versuchen here (vorsicht alle die neue Anforderung zurückgeführt wird, und der Server kann zusammengeklappt werden!).
  • Für Client-Ablaufverfolgung, Kasse here.
-1

Vielleicht wurde Ihr Listener noch nicht gestartet. Versuchen Sie den Befehl "lsnrctrl start" auszuführen.

+0

Nein, der Hörer hat definitiv angefangen; Beachten Sie, dass "sqlplus einmal alle paar Verbindungsversuche verbindet". –

-1

Auch eine gute Erklärung ist hier connection to an oracle database though a SSH secure shell, die für mich funktionierte.

  1. öffnen Kitt und auf der Session-Seite, den Namen eines Servers ein und wird sicher SSH überprüft werden. Der Server kann ein beliebiger Server sein, für den Sie sich mit einem Benutzernamen und einem Passwort anmelden können. Ich benutze einen hier genannt BLUEBIRD als Ich besitze es!

  2. Auf der Seite connection-> ssh-> tunnels, deaktivieren Sie beide Optionen oben ("Lokale Ports akzeptieren ..." und "Remote-Ports tun das gleiche").

  3. 9999 eingeben (oder einen beliebigen Port über 1024 als Source Port.

  4. Im Ziel, geben Sie den Datenbank-Host und Port gemäß tnsnames. In meinem Fall ist dies ein Server Greenbird und ein Port genannt von

  5. Geben Sie diese als Server: port

  6. da der Port wird auf dem Desktop weitergeleitet, überprüfen Sie die "Local" Option..Lassen Sie "Auto" auch für die IP-Version aktiviert.

  7. Klicken Sie auf die Schaltfläche Hinzufügen. Sie werden sehen, L9999 Greenbird: 1521 (Sie werden anders) in der Liste der weitergeleiteten Ports.

  8. Gehen Sie erneut zur Sitzungsseite, geben Sie einen Namen für Ihre gespeicherte Sitzung ein und klicken Sie auf Speichern.

  9. Klicken Sie auf Öffnen. Gib einen Benutzernamen und ein Passwort für den Server an (BLUEBIRD in meinem Fall). Sie werden eine normale SSH-Sitzung auf dem Server BLUEBIRD anmelden.

+0

Aus bei weitem. In dieser Frage wird nirgendwo Putty erwähnt. – zb226

0

MJ! Dein Tunnel ist nur für den ersten tcp connect, dein eigener LISTEN-Port wird nicht getunnelt und wahrscheinlich nicht implementiert. Die Firewall sollte eine Verbindung zu Ihnen ermöglichen, ähnlich wie bei aktivem FTP. Alle Ports für Oracle sind ab Seite 670 von "Building Internet Firewalls" 2/E Kapitel 23, Abschnitt: Oracle SQL * Net und Net8 recht ausführlich dokumentiert. Sie können es auf SafariBooksOnline.com

ISBN 1565928718