为什么我无法连接到我的 Amazon RDS for Oracle 数据库实例?

2 分钟阅读
0

我无法连接到我的 Amazon Relational Database Service(Amazon RDS)for Oracle 数据库实例。

简短描述

以下是与 RDS for Oracle 数据库实例出现连接问题的最常见原因:

  • 您的安全组、网络访问控制列表或本地防火墙配置不正确。不正确的配置可能会屏蔽到实例的流量。
  • 实例未处于可用状态。
  • 您使用了错误的用户凭证。
  • 您使用了错误的端点连接到 RDS 数据库实例。
  • 客户端到数据库实例的连接不兼容。
  • 您没有所需的权限。

解决方法

使用 TNSPING 检查连接

**注意:**必须安装 Oracle 客户端才能使用 TNSPING 实用程序。

使用 TNSPING 实用程序检查 Oracle 客户端是否可以连接到数据库实例。如果您在 tnsnames.ora 文件中添加了数据库条目,请运行以下命令来检查是否可以访问 RDS for Oracle:

tnsping <Service Name>

如果您没有在 tnsnames.ora 文件中添加数据库条目,请运行与以下命令类似的命令:

tnsping "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxx-yyyyy.us-east-1.rds.amazonaws.com)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))"  

TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 23-JUL-2023 19:48:22  

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

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxx-yyyyy.us-east-1.rds.amazonaws.com)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))  
OK (210 msec)

如果 TNSPING 确认 Oracle 客户端无法连接到数据库实例,请检查以下配置。

检查 VPC 设置

如果您从虚拟私有云(VPC)外部连接到数据库实例,请确认您的数据库实例的可公开访问属性设置为。如果该属性设置为,则不会为数据库实例分配公共 IP 地址。只有 VPC 内的 Amazon Elastic Compute Cloud(Amazon EC2)实例和客户端才能通过 Amazon RDS 私有 IP 地址连接到您的数据库。

要从不同的 VPC 或本地网络进行访问,您必须添加其他配置,例如 VPC 对等AWS Direct Connect。如果将可公开访问属性设置为,则 VPC 外的客户端可以通过互联网使用互联网网关连接到您的数据库实例。

检查安全组设置

确认数据库实例的安全组允许相应的入站流量进入数据库。有关更多信息,请参阅使用安全组控制访问权限

检查网络 ACL 设置

网络访问控制列表充当 VPC 特定子网中资源的防火墙。如果您的 VPC 具有网络 ACL,请确认它们有允许入站和出站流量进出您的实例的规则。默认情况下,网络 ACL 允许所有入站和出站流量。如果您的网络 ACL 有更为严格的控制,则必须明确允许流量进入临时端口范围。

检查您的网络或本地防火墙

您的客户端连接可能源自本地网络。对于数据库实例用于入站和出站通信的端口,确认您的网络是否允许流量进出这些端口。您可能需要联系网络管理员以获取此信息。

检查您的路由表设置

检查您的路由表是否正确配置了关联的数据库子网。

进一步进行故障排除

要进一步故障排除连接问题,请采取以下措施:

  • 运行以下命令来验证网络连接。将 example-rds-endpointexample-port-number 值替换为数据库实例的 RDS 端点和端口号。
    **注意:**Amazon RDS 不支持互联网控制消息协议(ICMP)流量,包括 ping。

    telnet example-rds-endpoint example-port-number  
    OR   
    curl -v http://<example-rds-endpoint>:<PORT>
  • 运行 nslookup 命令,确认客户端的 DNS 服务器将数据库实例的 DNS 端点名称解析为正确的 IP 地址:

    nslookup  example-instance.example-accountcode.example-region.rds.amazonaws.com
  • 确认您的数据库实例状态处于可用状态。版本升级、实例类升级或多可用区失效转移等数据库活动可能会导致短暂中断。中断可能会改变数据库实例状态并导致连接问题。

  • 连接可能已经到达数据库实例,但连接仍然会失败。确认您用于连接数据库实例的用户凭证准确无误。如果需要,您可以重置主用户密码

  • 确认您拥有连接数据库实例所需的权限。

使用 Amazon EC2 连接到您的数据库实例

要配置 Amazon EC2 和您的数据库实例之间的连接,请使用 Amazon RDS 控制台中的自动连接功能

**注意:**要使用自动连接功能,EC2 实例和数据库实例必须位于同一 VPC 中。

您还可以在没有堡垒主机的情况下,使用 EC2 实例连接端点从 AWS 管理控制台访问资源,例如 Amazon RDS。首先,检查您的用户是否具有连接到 EC2 连接端点所需的 AWS Identity and Access Management(IAM)权限。此外,请检查您的数据库实例的安全组是否允许来自 VPC 端点的流量。

运行 aws ec2-instance-connect open-tunnel 命令打开 WebSocket 隧道:

aws ec2-instance-connect open-tunnel --instance-connect-endpoint-id "VPC Endpoint ID"--private-ip-address "Private IP"--local-port "random port number to use locally" --remote-port "rds port number"

相关信息

排除与 Oracle 数据库实例的连接故障

无法连接到 Amazon RDS 数据库实例

Oracle 网站上的 TNSPING

AWS 官方
AWS 官方已更新 1 年前