2010-01-13 30 views
8

Hola Tengo un problema al acceder a Oracle DB desde nuestro centro de datos a través de un túnel.Uso de Oracle db a través del túnel ssh. Error "ORA-12541: TNS: sin escucha"

Tenemos un centro de datos bastante estándar con una máquina accesible desde el exterior (pongo su IP en el archivo/etc/hosts como dc) y dentro de Oracle DB. La dirección IP de la base de datos Oracle en la red interna es 192.168.1.7

Para crear un túnel que estoy usando el comando:

ssh -L 1521:192.168.1.7:1521 [email protected] 

y por supuesto funciona (a veces también añadir un poco de depuración -vs para ver si algo está pasando).

Ahora la parte difícil: conectar con Oracle. Instalé el cliente instantáneo 11.2. y mi tnsnames.ora parece que:

testdb = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
     (SERVICE_NAME = dbname) 
    ) 
) 

Y cuando intento conectar con el comando:

./sqlplus username/[email protected] 

Se inicia la conexión a través del túnel (lo veo en la depuración ssh), pero luego falla revelador:

./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: 

cuando estoy tratando de ejecutar este mismo comando en cuando estoy en la intranet funciona (obviamente, la única diferencia es que en el huésped tnsnames.ora que HÅ ve 192.168.1.7 y no el localhost).

También traté de usar la línea de comandos simple:

./sqlplus username/[email protected]//localhost:1521/testdb 

o alternativamente

./sqlplus username/[email protected]//localhost:1521/testdb 

Pero nada ayudó :)

Le agradecería cualquier ayuda o sugerencia. ¿Me estoy perdiendo alguna bandera ssh para que sea posible?

Probablemente el archivo de registro:

*********************************************************************** 

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 

donde terciopelo es mi nombre de host local y juansoto es mi nombre de usuario local. ¿Por qué se envía al otro lado?

ACTUALIZACIÓN:

Después de investigar un poco más desde el interior del centro de datos y parece que: - la primera conexión va al puerto 1521 - pero luego sqlplus se redirige al número de puerto> 3300 , que es diferente cada vez e incrementa en 3 (al menos algunos intentos que tuve) - cuando estamos tratando de conectarnos a través de un túnel sqlplus intentará conectarse a localhost y obviamente fallará

Entonces el error "No Listener" "proviene probablemente del hecho de que no estamos redireccionando aunque se puertos. ¿Hay alguna manera (probablemente alguna opción en el archivo tnsnames.ora) de forzar que se use un puerto específico?

+0

¿Cuál es el sistema operativo del servidor de base de datos? Si es Windows, Google USE_SHARED_SOCKET –

+0

Golpeando esto también; ¿Encontraste alguna solución? –

+0

Para aclarar: me estoy conectando a un RAC de Oracle, y no estoy en condiciones de reconfigurar el oyente en el otro lado (como configurarlo para usar un socket compartido). sqlplus se conecta una vez cada pocos intentos de conexión, mi aplicación nunca logra conectarse. –

Respuesta

3

Mira en Metalink ID 361284.1 (Edit: efectivamente no es público, pero encontrar la información here)

Parece que Oracle Connection Manager sería su opción. Básicamente maneja los redireccionamientos del puerto dentro del firewall. No lo he usado antes, así que no puedo aconsejarlo más.


Actualización: Otro camino a seguir sería el uso de MTS, configurar los despachadores con ciertos puertos y abrir estos puertos en el firewall. No tendría que instalar software adicional para esto, pero la conexión a través del servidor compartido puede requerir aumentar LARGE_POOL_SIZE, entre otras consideraciones. Por lo tanto, aún necesitaría la función DBA para cambiar el parámetro DISPATCHERS. También deberías rebotar la base de datos.

+0

Lamentablemente, no tengo la opción de agregar nada en el lado del servidor, y menos en el firewall. Sin embargo, antes leí acerca de Oracle Connection Manager, y si está en condiciones de configurarlo, ciertamente parece una excelente opción para manejar el redireccionamiento de conexión. –

3

Normalmente esto debería funcionar.No utilizaría un puerto de escucha predeterminado como entrada para el túnel ssh, pero ese no debería ser el problema. Tampoco utilizaría la cuenta raíz para crear la conexión ssh, preferiblemente una cuenta regular dedicada. ¿Está utilizando servidores compartidos o la base de datos pasa a ser una base de datos RAC con una configuración de equilibrio de carga? Una buena explicación está aquí How can I connect to ORACLE DB through ssh tunnel chain (double tunnel, server in company network) ?, un poco más complicado .....

actualización la caja DbVisualizer, ahora se ha integrado túneles SSH. Creo que vale la pena intentarlo al menos. No es gratis, pero bueno. Plataforma multiplataforma y multi y muy flexible.

0

¿Se puede tratar de hacer un rastreo para determinar exactamente lo que está sucediendo:

  • Para rastreo del servidor, intente here (ten cuidado toda la nueva solicitud será rastreada y el servidor se puede colapsar!).
  • Para rastreo del cliente, pago here.
-1

Quizás su oyente aún no se haya iniciado. Intente ejecutar el comando "lsnrctrl start".

+0

No, el oyente definitivamente ha comenzado; tenga en cuenta que 'sqlplus se conecta una vez cada pocos intentos de conexión'. –

-1

También una buena explicación es aquí connection to an oracle database though a SSH secure shell que funcionó para mí.

  1. abierto masilla y en la página de sesión, escriba el nombre de un servidor y asegúrese de que SSH está marcada. El servidor puede ser cualquier servidor que tenga un nombre de usuario y una contraseña para iniciar sesión. Yo uso uno aquí llamado BLUEBIRD como ¡Lo tengo!

  2. En la página conexión-> ssh-> túneles, desmarque ambas opciones en la parte superior ("Los puertos locales aceptan ..." y "Los puertos remotos hacen lo mismo").

  3. Ingrese 9999 (o cualquier puerto por encima de 1024 como el puerto de origen.

  4. En el destino, introduzca el host de base de datos y el puerto según tnsnames. En mi caso, se trata de un servidor llamado Greenbird y un puerto de

  5. marca éste como servidor: puerto

  6. a medida que el puerto se reenvíe está en su escritorio, seleccione la opción "local"..Deje marcado "Auto" también para la versión IP.

  7. Haga clic en el botón Agregar. Verá L9999 greenbird: 1521 (su diferencia será) en la lista de puertos reenviados.

  8. Ve a la página de la sesión nuevamente, ingresa un nombre para la sesión guardada y haz clic en guardar.

  9. Haga clic en abrir. Proporcione un nombre de usuario y contraseña para el servidor (BLUEBIRD en mi caso). Ingresará a una sesión ssh normal en el servidor llamado BLUEBIRD.

+0

Apagado por ahora. No hay mención de masilla en ninguna parte de esta pregunta. – zb226

0

MJ! Su túnel es solo para la conexión tcp inicial, su propio puerto LISTEN no está tunelizado, y probablemente no se haya implementado. El cortafuegos debería permitirle una conexión de regreso, similar al FTP activo. Todos los puertos para Oracle están documentados bastante extensamente a partir de la página 670 de "Building Internet Firewalls" 2/E Capítulo 23, párrafo: Oracle SQL * Net y Net8. También se puede ver en SafariBooksOnline.com

ISBN 1565928718

Cuestiones relacionadas