通过ssh隧道使用oracle db.错误"ORA-12541:TNS:没有听众"

Jak*_*zok 8 oracle ssh sqlplus tunnel ora-12541

您好我通过隧道从数据中心访问Oracle DB时遇到问题.

我们有一个非常标准的数据中心,一台机器可以从外部访问(我把它的IP放在/ etc/hosts文件中作为dc)和Oracle DB里面.我们在内部网络上的oracle数据库的IP地址是192.168.1.7

要创建隧道我正在使用命令:

 ssh -L 1521:192.168.1.7:1521 root@dc
Run Code Online (Sandbox Code Playgroud)

当然它可以工作(有时我也添加一些debug -vv来查看是否有任何东西通过).

现在困难的部分 - 连接到Oracle.我安装了instantclient 11.2.我的tnsnames.ora看起来像那样:

testdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbname)
    )
  )
Run Code Online (Sandbox Code Playgroud)

当我尝试使用命令连接时:

./sqlplus username/pass@testdb
Run Code Online (Sandbox Code Playgroud)

它开始通过隧道连接(我在ssh调试中看到它),但它失败告诉:

./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: 
Run Code Online (Sandbox Code Playgroud)

当我在内网上尝试执行相同的命令时,它可以工作(显然唯一的区别是在tnsnames.ora主机中我们有192.168.1.7而不是本地主机).

我也尝试使用简单的命令行:

./sqlplus username/pass@//localhost:1521/testdb
Run Code Online (Sandbox Code Playgroud)

或者

./sqlplus username/pass@//localhost:1521/testdb
Run Code Online (Sandbox Code Playgroud)

但没有任何帮助:)

我将不胜感激任何帮助或建议.我错过了一些ssh标志以使其成为可能吗?

可能是日志文件:

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

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
Run Code Online (Sandbox Code Playgroud)

其中velvet是我的本地主机名,johndoe是我的本地用户名.为什么要送到另一边?

更新:

在从数据中心内部调查了一下后,它看起来像: - 第一个连接到达端口1521 - 但是然后sqlplus被重定向到端口号> 3300,每次都不同,增加3(至少几次尝试)我曾经 - 当我们尝试通过隧道连接时,sqlplus会尝试连接到localhost,它显然会失败

所以错误"No Listener"可能来自于我们没有重定向这些端口的事实.是否有任何方法(可能是tnsnames.ora文件中的某个选项)强制使用某个特定端口?

HAL*_*000 3

查看Metalink ID 361284.1 (编辑:实际上不公开,但可以在此处找到信息)

看来 Oracle Connection Manager 将是您的选择。它主要处理防火墙内的端口重定向。我以前没有使用过它,所以无法给你进一步的建议。


更新:另一种方法是使用 MTS,使用某些端口配置调度程序并在防火墙中打开这些端口。您不必为此安装额外的软件,但通过共享服务器连接可能需要增加 LARGE_POOL_SIZE 以及其他考虑因素。因此,您仍然需要 DBA 角色来更改 DISPATCHERS 参数。您还必须退回数据库。