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?
¿Cuál es el sistema operativo del servidor de base de datos? Si es Windows, Google USE_SHARED_SOCKET –
Golpeando esto también; ¿Encontraste alguna solución? –
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. –