AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 273138
Accepted
OSGI Java
OSGI Java
Asked: 2020-08-04 10:34:45 +0800 CST2020-08-04 10:34:45 +0800 CST 2020-08-04 10:34:45 +0800 CST

连接远程Oracle数据库时如何解决供应商代码17002?

  • 772

我有一个在 AWS ec2 的 Linux 实例上运行的 Oracle 数据库 12c 标准版版本 12.2.0.1.0。当我尝试使用 SQL Developer 从我的机器 (macOS) 远程连接到它时,我收到一个IO Error: The Network Adapter could not establish the connection Vendor Code 17002错误。

  • 在我的机器上使用 sqlplus 进行连接:
sqlplus cd2/ @ec2-publicIp.myCloud.compute.amazonaws.com:1522/orcl

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Aug 3 15:30:56 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

ERROR:
ORA-12541: TNS:no listener
  • 在 ec2 实例 Security Groups 上,为我的机器的公共 IP 打开了一个 TCP 1522 端口
  • telnet 到实例,端口 1522 似乎表明该端口是开放的:
telnet ec2-pubIp.compute.amazonaws.com 1522
Trying pubIp...
telnet: connect to address pubIp: Connection refused
telnet: Unable to connect to remote host
  • 端口 1522 在所有配置中一致使用
  • 我验证了 ec2 主机名(hostname命令)与从lsnrctl status. 输出显示localhost而不是ip-localIp.myCloud.compute.internal。
$ hostname
ip-localIp.myCloud.compute.internal
$ lsnrctl status
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 03-AUG-2020 15:20:44

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ip-localIp.myCloud.compute.internal)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                03-AUG-2020 13:30:22
Uptime                    0 days 1 hr. 50 min. 22 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/centos/product/12.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/centos/diag/tnslsnr/ip-localIp/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
Services Summary...
Service "orcl.myCloud.compute.internal" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB.myCloud.compute.internal" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

  • 主机名和端口也与配置的默认侦听器匹配listener.ora:
cat /u01/app/centos/product/12.2.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/centos/product/12.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ip-localIp.myCloud.compute.internal)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
    )
  )
  • Oracle 参数如图所示,主机和端口再次匹配:
SQL> show parameter listener_networks

NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
listener_networks            string

SQL> show parameter local_listener

NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
local_listener               string  (ADDRESS=(PROTOCOL=TCP)(HOST =
                          ip-localIp.myCloud
                         .compute.internal)(PORT = 1522
                         ))

SQL> show parameter remote_listener

NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
remote_listener              string
  • 我可以从 ec2 实例连接:sqlplus / as sysdba
  • 我可以从 ec2 实例作为模式/用户 cd2 连接:
sqlplus cd2/ @orcl

SQL*Plus: Release 12.2.0.1.0 Production on Mon Aug 3 18:04:13 2020

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Enter password: 
Last Successful login time: Mon Aug 03 2020 18:03:52 +00:00

Connected to:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

SP2-0310: unable to open file "orcl.sql"
SQL> select 1 from dual;

     1
----------
     1

SQL> 

  • SQL Developer 连接匹配端口和 ec2 的公共域名: 在此处输入图像描述
  • 这个数据库服务器是我们的开发实例,所以没有安装许可证
  • listener.ora通过将HOST值设置为更新0.0.0.0,重新启动lsnrctl但结果相同:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
    )
  )

  • /etc/hosts内容:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ip-localIp.myCloud.compute.internal
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  • 我还使用所有入站流量和为 ec2 实例打开的所有端口对其进行了测试
oracle-sql-developer oracle-12c
  • 2 2 个回答
  • 32334 Views

2 个回答

  • Voted
  1. Best Answer
    Balazs Papp
    2020-08-05T11:01:54+08:002020-08-05T11:01:54+08:00

    不,以下内容并不表示您可以通过该端口访问服务器:

    telnet ec2-pubIp.compute.amazonaws.com 1522
    Trying pubIp...
    telnet: connect to address pubIp: Connection refused
    telnet: Unable to connect to remote host
    

    这只是一个通用的网络问题。只需在连接详细信息中输入错误的主机或端口,即可随时重现 17002 错误。

    您的侦听器侦听内部地址,在您的情况下是环回适配器的 127.0.0.1 地址。但是您尝试通过外部地址进行连接。

    您的云基础架构中需要一些转发/防火墙规则。或者您需要更改侦听器配置,以便它可以侦听外部地址。但即使你这样做,如果没有上述内容,它也可能无法工作。

    更好的选择是将连接封装在 SSH 隧道中。您可以通过首选的 SSH 客户端设置隧道(这适用于 Oracle Cloud,但概念与创建 SSH 隧道到计算节点端口的概念相同)。甚至 SQL Developer 也为此提供了一些内置功能:使用 Oracle SQL Developer 远程连接到数据库。

    或者这里是一篇关于在 SQL Developer 中设置 SSH 隧道的博客文章,带有截图:https ://learncodeshare.net/2016/06/02/sql-developer-oracle-database-connection-through-an-ssh-tunnel/

    • 1
  2. miracle173
    2020-08-06T23:45:49+08:002020-08-06T23:45:49+08:00

    这不是一个完整的答案,我已经在评论中写了这个答案的一部分。但是错误消息非常清楚,所以我将在这里解释,因为我不确定 Balazs 的回答是否清楚这一点。正确的解释有助于分析问题。

    来自 sqlplus 错误信息

    sqlplus cd2/ @ec2-publicIp.myCloud.compute.amazonaws.com:1522/orcl
    
    SQL*Plus: Release 19.0.0.0.0 - Production on Mon Aug 3 15:30:56 2020
    Version 19.3.0.0.0
    
    Copyright (c) 1982, 2019, Oracle.  All rights reserved.
    
    ERROR:
    ORA-12541: TNS:no listener
    

    你可以得出结论:

    1. 您可以到达 ec2-pubIp.compute.amazonaws.com 的 1522 端口
    2. 没有 Oracle 侦听器正在侦听 ec2-pubIp.compute.amazonaws.com 的端口 1522

    从 telnet 错误信息

    telnet ec2-pubIp.compute.amazonaws.com 1522
    Trying pubIp...
    telnet: connect to address pubIp: Connection refused
    telnet: Unable to connect to remote host
    

    你可以得出结论

    1. 您可以到达 ec2-pubIp.compute.amazonaws.com 的 1522 端口
    2. ec2-pubIp.compute.amazonaws.com 的 1522 端口没有进程正在监听

    因此,两条消息都表明您可以访问 ec2-pubIp.compute.amazonaws.com 的端口 1522

    • 0

相关问题

  • SQL 开发人员:为 plsql 设置调试器

  • 我应该有多少个控制文件?

  • ORA-00905: 尝试创建同义词时缺少关键字

  • 在 Oracle SQL Developer 中禁用 SQL Server 连接的自动提交

  • Oracle 怎么知道我是谁?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve