gpt4 book ai didi

oracle - 通过 ssh 隧道使用 oracle db。错误 "ORA-12541: TNS:no listener"

转载 作者:行者123 更新时间:2023-12-04 08:39:17 27 4
gpt4 key购买 nike

您好,我在通过隧道从我们的数据中心访问 Oracle DB 时遇到问题。

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

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

 ssh -L 1521:192.168.1.7:1521 root@dc

当然它可以工作(有时我还会添加一些 debug -vv 以查看是否有任何内容通过)。

现在是困难的部分 - 连接到 Oracle。我安装了 Instantclient 11.2。我的 tnsnames.ora 看起来像这样:
testdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbname)
)
)

当我尝试使用以下命令进行连接时:
./sqlplus username/pass@testdb

它开始通过隧道连接(我在 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:

当我尝试在 Intranet 上执行相同的命令时,它可以工作(显然唯一的区别是在 tnsnames.ora HOST 中我们有 192.168.1.7 而不是 localhost)。

我还尝试使用简单的命令行:
./sqlplus username/pass@//localhost:1521/testdb

或者
./sqlplus username/pass@//localhost:1521/testdb

但没有任何帮助:)

我将不胜感激任何帮助或建议。我是否缺少一些 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

其中 velvet 是我的本地主机名,johndoe 是我的本地用户名。
为什么要发给对方?

更新:

在从数据中心内部进行了更多调查后,它看起来像:
- 第一个连接将连接到端口 1521
- 但随后 sqlplus 被重定向到端口号 > 3300,每次都不同,并以 3 递增(至少我尝试过几次)
- 当我们尝试通过隧道连接时,sqlplus 将尝试连接到本地主机,但显然会失败

所以错误“No Listener”可能来自我们没有重定向这些端口的事实。有没有办法(可能是 tnsnames.ora 文件中的某些选项)强制使用某些特定端口?

最佳答案

通常这应该有效。我不会使用默认监听器端口作为 ssh 隧道的条目,但这应该不是问题。我也不会使用 root 帐户来创建 ssh 连接,最好是专用的普通帐户。您使用的是共享服务器还是数据库恰好是具有负载平衡配置的 RAC 数据库?
一个很好的解释在这里How can I connect to ORACLE DB through ssh tunnel chain (double tunnel, server in company network) ? ,有点复杂……

更新
结帐 DbVisualizer ,它现在已经集成了 ssh 隧道。我认为至少值得一试。它不是免费的,但很好。多平台和多数据库,非常灵活。

关于oracle - 通过 ssh 隧道使用 oracle db。错误 "ORA-12541: TNS:no listener",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com