ORA-12541 TNS: 在 1 个特定的远程数据库上没有侦听器,但在其他数据库上没有
ORA-12541 TNS :no listener on 1 specific remote database, but not on others
一些上下文:我正在设置一个环境来 运行 我们的 Lead 编写的一些 Ruby 代码以连接到一些远程数据库。我正在使用 Win10 并安装了 WSL。我已经安装了 SQL*Plus、docker 和 Ruby,并且确定我已经安装了所有相关的 gem(实际上此时我知道它不是 ruby 问题)。我正在使用 Docker 来使用 Oracle 数据库的预构建映像,并且我已经用数据填充了它。
混淆公司数据库信息:
'Broken' DB(TNS 无监听器)
- 用户名:W-WORK-DEV
- 密码:密码
- 主机:host1
- 端口:999
- SID:W-WORK-DB.tech.company
'Working' DB(可以正常连接)
- 用户名:C-OLD-DEV
- 密码:密码
- 主机:host2
- 端口:999
- SID:C-OLD-DB.tech.company
Please note the names I have provided here are purely for obfuscation, they do not represent anything about age or even config. They are essentially the same, just different databases on different hosts. Also note this is a corporate company and would have a lot of base infrastructure for their internal network.
我遇到的问题是我无法连接到我正在处理的特定数据库。我通过 VPN 连接到公司内部网(我在异地工作)并且在连接到 WORK-DB.tech.company
时遇到问题,但我可以连接到 C-OLD-DB.tech.company
。我尝试连接的方法:
- Oracle SQL 开发人员
我输入了所有正确的 jdbc 字符串和用户名/密码。 甚至要求其他人尝试连接(至少另外 3 个人)。 他们都可以访问 C-OLD-DB
以及 W-WORK-DB
。使用此方法时,我得到 The network adapter could not establish the connection
.
Side note: I'm fairly sure I have connected to the DB just fine in the past, though I can't be certain because I'm fairly new to this team and have only accessed it once, if that.
- SQL*通过 WSL 添加
我安装了 SQL*Plus,因为我认为 Ruby 在 运行 脚本时以某种能力访问它。我到达了脚本能够连接到本地 docker 数据库的地步,但是当它尝试连接到远程数据库时,它会 return TNS: no listener
。我也尝试使用 sqlplus 进行此操作,但得到了同样的错误。
Example:
- sqlplus C-OLD-DEV/password@host2:999/C-OLD-DB.tech.company
- This command works and connected to the DB jsut fine.
- sqlplus W-WORK-DEV/password@host1:999/W-WORK-DB.tech.company
- This command gave me TNS: no listener.
在我的研究过程中,我发现了关于 tnsnames.ora、sqlnet.ora 和 listener.ora 的提及。我在公司内部网上找到了相关文件,并试图在我自己的个人环境中使用它们但无济于事(其中一个 sqlnet.ora 文件实际上阻止了我连接到任何文件)我发现提到了一个 config/database.yml
文件与 ruby 相关,但我们的代码已经设置了数据库信息,当我尝试通过 sqlplus 手动连接时,我似乎得到了与脚本相同的解决方案。
以下是我在进行这些安装时设置的一些相关环境变量。我在想,在尝试设置我的环境时,我搞砸了一些配置,这些配置改变了 sqldeveloper 或 sql plus 连接到该数据库的方式。
$ echo $ORACLE_HOME: /usr/lib/oracle/12.2/client64/
$ echo $TNS_ADMIN: /usr/lib/oracle/12.2/client64/network/admin
$ echo $LD_LIBRARY_PATH: /usr/lib/oracle/12.2/client64/lib
我希望我已经提供了我遇到的所有信息并清楚地解释了我的问题是什么,如果您有任何问题,请随时发表评论,以便我解决。感谢您的所有帮助。
您使用的是 64 位 jdbc 驱动程序吗?
所以我的问题最终变成了 'firewall/port' 问题。最后我发现我连接的特定端口被阻止了,但我认为它只在我的系统上。原来我使用的 VPN 是阻止该端口的问题。公司有一个主数据中心和一个辅助数据中心,显然 SDC VPN 阻止了我的那个端口。我切换到使用 PDC VPN 并且它有效。
一些上下文:我正在设置一个环境来 运行 我们的 Lead 编写的一些 Ruby 代码以连接到一些远程数据库。我正在使用 Win10 并安装了 WSL。我已经安装了 SQL*Plus、docker 和 Ruby,并且确定我已经安装了所有相关的 gem(实际上此时我知道它不是 ruby 问题)。我正在使用 Docker 来使用 Oracle 数据库的预构建映像,并且我已经用数据填充了它。
混淆公司数据库信息:
'Broken' DB(TNS 无监听器)
- 用户名:W-WORK-DEV
- 密码:密码
- 主机:host1
- 端口:999
- SID:W-WORK-DB.tech.company
'Working' DB(可以正常连接)
- 用户名:C-OLD-DEV
- 密码:密码
- 主机:host2
- 端口:999
- SID:C-OLD-DB.tech.company
Please note the names I have provided here are purely for obfuscation, they do not represent anything about age or even config. They are essentially the same, just different databases on different hosts. Also note this is a corporate company and would have a lot of base infrastructure for their internal network.
我遇到的问题是我无法连接到我正在处理的特定数据库。我通过 VPN 连接到公司内部网(我在异地工作)并且在连接到 WORK-DB.tech.company
时遇到问题,但我可以连接到 C-OLD-DB.tech.company
。我尝试连接的方法:
- Oracle SQL 开发人员
我输入了所有正确的 jdbc 字符串和用户名/密码。 甚至要求其他人尝试连接(至少另外 3 个人)。 他们都可以访问 C-OLD-DB
以及 W-WORK-DB
。使用此方法时,我得到 The network adapter could not establish the connection
.
Side note: I'm fairly sure I have connected to the DB just fine in the past, though I can't be certain because I'm fairly new to this team and have only accessed it once, if that.
- SQL*通过 WSL 添加
我安装了 SQL*Plus,因为我认为 Ruby 在 运行 脚本时以某种能力访问它。我到达了脚本能够连接到本地 docker 数据库的地步,但是当它尝试连接到远程数据库时,它会 return TNS: no listener
。我也尝试使用 sqlplus 进行此操作,但得到了同样的错误。
Example:
- sqlplus C-OLD-DEV/password@host2:999/C-OLD-DB.tech.company
- This command works and connected to the DB jsut fine.
- sqlplus W-WORK-DEV/password@host1:999/W-WORK-DB.tech.company
- This command gave me TNS: no listener.
在我的研究过程中,我发现了关于 tnsnames.ora、sqlnet.ora 和 listener.ora 的提及。我在公司内部网上找到了相关文件,并试图在我自己的个人环境中使用它们但无济于事(其中一个 sqlnet.ora 文件实际上阻止了我连接到任何文件)我发现提到了一个 config/database.yml
文件与 ruby 相关,但我们的代码已经设置了数据库信息,当我尝试通过 sqlplus 手动连接时,我似乎得到了与脚本相同的解决方案。
以下是我在进行这些安装时设置的一些相关环境变量。我在想,在尝试设置我的环境时,我搞砸了一些配置,这些配置改变了 sqldeveloper 或 sql plus 连接到该数据库的方式。
$ echo $ORACLE_HOME: /usr/lib/oracle/12.2/client64/
$ echo $TNS_ADMIN: /usr/lib/oracle/12.2/client64/network/admin
$ echo $LD_LIBRARY_PATH: /usr/lib/oracle/12.2/client64/lib
我希望我已经提供了我遇到的所有信息并清楚地解释了我的问题是什么,如果您有任何问题,请随时发表评论,以便我解决。感谢您的所有帮助。
您使用的是 64 位 jdbc 驱动程序吗?
所以我的问题最终变成了 'firewall/port' 问题。最后我发现我连接的特定端口被阻止了,但我认为它只在我的系统上。原来我使用的 VPN 是阻止该端口的问题。公司有一个主数据中心和一个辅助数据中心,显然 SDC VPN 阻止了我的那个端口。我切换到使用 PDC VPN 并且它有效。