连接到 Oracle 数据库实例 - Amazon Relational Database Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

连接到 Oracle 数据库实例

在 Amazon RDS 配置 Oracle 数据库实例后,您可以使用任何标准 SQL 客户端应用程序连接到数据库实例。在本主题中,您将使用 Oracle SQL Developer 或 SQL*Plus 连接到运行 Oracle 数据库引擎的数据库实例。

有关指导您完成创建和连接到示例数据库实例的示例,请参阅 创建 Oracle 数据库实例并连接到 Oracle 数据库实例上的数据库

查找 Oracle 数据库实例的终端节点

每个 Amazon RDS 数据库实例都有一个终端节点,每个终端节点都包含数据库实例的 DNS 名称和端口号。要使用 SQL 客户端应用程序连接到数据库实例,您需要该数据库实例的 DNS 名称和端口号。

您可使用 Amazon RDS 控制台或 AWS CLI 查找数据库实例的终端节点。

注意

如果您使用的是 Kerberos 身份验证,请参阅使用 Kerberos 身份验证连接到 Oracle

控制台

使用控制台查找终端节点

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在控制台的右上角,选择数据库实例的 AWS 区域。

  3. 找到数据库实例的 DNS 名称和端口号。

    1. 选择 Databases (数据库) 以显示您的数据库实例的列表。

    2. 选择 Oracle 数据库实例名称以显示实例详细信息。

    3. Connectivity & security (连接和安全性)选项卡上,复制终端节点。另请注意端口号。您需要终端节点和端口号才能连接到数据库实例。

      
                                找到该数据库实例的终端节点和端口

AWS CLI

要使用 AWS CLI 查找 Oracle 数据库实例的终端节点,请调用 describe-db-instances 命令。

例 使用 AWS CLI 查找终端节点

aws rds describe-db-instances

在输出中搜索 Endpoint 以查找数据库实例的 DNS 名称和端口号。输出中的 Address 行包含 DNS 名称。下面是 JSON 终端节点输出的示例。

"Endpoint": { "HostedZoneId": "Z1PVIF0B656C1W", "Port": 3306, "Address": "myinstance.123456789012.us-west-2.rds.amazonaws.com" },
注意

该输出可能包含多个数据库实例的信息。

使用 Oracle SQL Developer 连接到数据库实例

在此过程中,您将使用 Oracle SQL Developer 连接到数据库实例。要下载此实用工具的独立版本,请参阅 Oracle SQL 开发人员下载页

要连接到数据库实例,您需要该实例的 DNS 名称和端口号。有关查找数据库实例的 DNS 名称和端口号的信息,请参阅查找 Oracle 数据库实例的终端节点

使用 SQL Developer 连接到数据库实例

  1. 启动 Oracle SQL Developer。

  2. Connections 选项卡上,选择 add (+) 图标。

    
                        突出显示了“添加”图标的 Oracle SQL Developer
  3. New/Select Database Connection 对话框中,提供您的数据库实例的信息:

    • 对于 Connection Name (连接名称),输入可描述连接的名称,如 Oracle-RDS

    • 对于 Username (用户名),输入数据库实例的数据库管理员的名称。

    • 对于 Password (密码),输入数据库管理员的密码。

    • 对于 Hostname (主机名),输入数据库实例的 DNS 名称。

    • 对于 Port (端口),输入端口号。

    • 对于 SID,输入 Oracle 数据库 SID。

    完成后的对话框应该与下面类似。

    
                        在 Oracle SQL Developer 中创建新连接
  4. 选择 Connect

  5. 您现在可以开始创建您自己的数据库并像往常一样对数据库实例和数据库运行查询。要对数据库实例运行测试查询,请执行以下操作:

    1. 在您的连接的 Worksheet (工作表) 选项卡中,输入以下 SQL 查询。

      SELECT NAME FROM V$DATABASE;
    2. 选择 execute (执行) 图标以运行查询。

      
                                使用“执行”图标在 Oracle SQL Developer 中运行查询

      SQL Developer 将返回数据库名称。

      
                                Oracle SQL Developer 中的查询结果

使用 SQL*Plus 连接到数据库实例

您可以使用实用程序 (如 SQL*Plus) 连接到运行 Oracle 的 Amazon RDS 数据库实例。要下载包含独立版本 SQL*Plus 的 Oracle 即时客户端,请参阅 Oracle 即时客户端下载

要连接到数据库实例,您需要该实例的 DNS 名称和端口号。有关查找数据库实例的 DNS 名称和端口号的信息,请参阅查找 Oracle 数据库实例的终端节点

例 使用 SQL*Plus 连接到 Oracle 数据库实例

在以下示例中,请将用户名替换为您的数据库实例管理员。另外,请将 DNS 名称替换为您的数据库实例,然后包含端口号和 Oracle SID。SID 值是您创建数据库实例时指定的数据库实例数据库的名称,而不是数据库实例的名称。

对于 Linux、macOS 或 Unix:

sqlplus 'user_name@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dns_name)(PORT=port))(CONNECT_DATA=(SID=database_name)))'

对于 Windows:

sqlplus user_name@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dns_name)(PORT=port))(CONNECT_DATA=(SID=database_name)))

您应该可以看到类似于如下所示的输出内容。

SQL*Plus: Release 12.1.0.2.0 Production on Mon Aug 21 09:42:20 2017

在您输入用户的密码之后,将出现 SQL 提示。

SQL>
注意

较短格式连接字符串 (Easy connect 或 EZCONNECT) (如 sqlplus USER/PASSWORD@LONGER-THAN-63-CHARS-RDS-ENDPOINT-HERE:1521/DATABASE_IDENTIFIER) 可能会遇到最大字符限制,不应用于连接。

安全组注意事项

要连接到数据库实例,它必须与包含必要的 IP 地址和网络配置的安全组关联。您的数据库实例可能使用默认安全组。如果在创建数据库实例时分配了一个默认的未配置安全组,则防火墙将阻止连接。

要创建新的安全组,您创建的安全组取决于 Amazon EC2 数据库实例的平台。要确定您的平台,请参阅 确定您使用的是 EC2-VPC 还是 EC2-Classic 平台。一般而言,如果数据库实例位于 EC2-Classic 平台上,则创建数据库安全组;如果数据库实例位于 VPC 平台上,则创建 VPC 安全组。有关创建新安全组的信息,请参阅 使用安全组控制访问权限

在创建新安全组后,您应修改数据库实例以使其与该安全组关联。有关更多信息,请参阅 修改 Amazon RDS 数据库实例

可通过使用 SSL 加密与数据库实例的连接来增强安全性。有关更多信息,请参阅 Oracle 安全套接字层

进程架构注意事项

服务器进程处理与 Oracle 数据库实例的用户连接。默认情况下,Oracle 数据库实例使用专用服务器进程。使用专用服务器进程,每个服务器进程仅服务一个用户进程。您可以选择配置共享服务器进程。使用共享服务器进程,每个服务器进程可服务多个用户进程。

当大量用户会话占用服务器上的太多内存时,您可以考虑使用共享服务器进程。当会话非常频繁时连接和断开连接,从而导致性能问题时,您也可以考虑使用共享服务器进程。使用共享服务器进程也有缺点。例如,它们可能会耗尽 CPU 资源,并且配置和管理起来更加复杂。

有关专用和共享服务器进程的更多信息,请参阅 Oracle 文档中的关于专用和共享服务器进程。有关在 RDS for Oracle 数据库实例上配置共享服务器进程的更多信息,请参阅知识中心中的如何将 Amazon RDS for Oracle Database 配置为使用共享服务器?

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

下面是您在尝试连接到您的 Oracle 数据库实例时可能遇到的问题。

问题 故障排除建议

无法连接到数据库实例。

对于新创建的数据库实例,数据库实例的状态为 creating,直到该数据库实例可供使用。当状态变为 Available 时,您可以连接到该数据库实例。根据数据库实例类和存储量,新数据库实例可能需要等待 20 分钟时间才可用。

无法连接到数据库实例。

如果您不能通过在创建数据库实例时指定的端口收发消息,您就无法连接到数据库实例。请联系您的网络管理员,核对您为数据库实例指定的端口是否可以进行入站和出站通信。

无法连接到数据库实例。

由本地防火墙强制执行的访问规则与您在数据库实例的安全组中授权用于访问数据库实例的 IP 地址可能不匹配。此问题很可能是由防火墙上的入站或出站规则所致。

您可以在安全组中添加或编辑入站规则。对于 Source,选择 My IP。这允许从浏览器中检测到的 IP 地址访问数据库实例。有关更多信息,请参阅Amazon Virtual Private Cloud VPC 和 Amazon RDS

有关安全组的更多信息,请参阅 使用安全组控制访问权限

要演练为您的安全组设置规则的过程,请参阅教程:创建 Amazon VPC 以用于数据库实例

Connect failed because target host or object does not exist – Oracle, Error: ORA-12545

确保您指定了正确的服务器名称和端口号。对于 Server name (服务器名称),输入来自控制台的 DNS 名称。

有关查找数据库实例的 DNS 名称和端口号的信息,请参阅查找 Oracle 数据库实例的终端节点

无效用户名称/密码;登录失败 – Oracle, 错误: ORA-01017

您可以访问数据库实例,但连接已被拒绝。这通常是提供的用户名或密码不正确导致的。请验证用户名和密码,然后重试。

有关连接问题的更多信息,请参阅无法连接到 Amazon RDS 数据库实例

使用 sqlnet.ora 参数修改连接属性

sqlnet.ora 文件包括在 Oracle 数据库服务器和客户端上配置 Oracle Net 功能的参数。使用 sqlnet.ora 文件中的参数,您可以修改传入和传出数据库的连接的属性。

有关可能需要设置 sqlnet.ora 参数的原因的更多信息,请参阅 Oracle 文档中的对配置文件参数进行配置

设置 sqlnet.ora 参数

Amazon RDS Oracle 参数组包含一个 sqlnet.ora 参数子集。您可以使用与设置其他 Oracle 参数相同的方法来设置它们。sqlnetora. 前缀标识哪些参数是 sqlnet.ora 参数。例如,在 Amazon RDS 的 Oracle 参数组中,default_sdu_size sqlnet.ora 参数为 sqlnetora.default_sdu_size

有关管理参数组和设置参数值的信息,请参阅 使用数据库参数组

支持的 sqlnet.ora 参数

Amazon RDS 支持以下 sqlnet.ora 参数。对动态 sqlnet.ora 参数的更改立即生效。

参数 有效值 静态/动态 说明

sqlnetora.default_sdu_size

Oracle 12c – 5122097152

动态

会话数据单位 (SDU) 大小 (字节)。

SDU 是一次性放入缓冲区并通过网络发送的数据量。

sqlnetora.diag_adr_enabled

ONOFF

动态

一个值,用于启用或禁用自动诊断存储库 (ADR) 跟踪。

ON 指定使用 ADR 文件跟踪。

OFF 指定使用非 ADR 文件跟踪。

sqlnetora.recv_buf_size

8192268435456

动态

用于会话接收操作的缓冲区空间限制,支持 TCP/IP、使用 SSL 的 TCP/IP 以及 SDP 协议。

sqlnetora.send_buf_size

8192268435456

动态

用于会话发送操作的缓冲区空间限制,支持 TCP/IP、使用 SSL 的 TCP/IP 以及 SDP 协议。

sqlnetora.sqlnet.allowed_logon_version_client

8101112

动态

客户端和充当客户端的服务器与 Oracle 数据库实例建立连接所允许的最低身份验证协议版本。

sqlnetora.sqlnet.allowed_logon_version_server

8910111212a

动态

与 Oracle 数据库实例建立连接所允许的最低身份验证协议版本。

sqlnetora.sqlnet.expire_time

01440

动态

发送检查以验证客户端/服务器连接是否活动的时间间隔,以分钟为单位。

sqlnetora.sqlnet.inbound_connect_timeout

0107200

动态

客户端连接到数据库服务器并提供所需身份验证信息的时间,以秒为单位。

sqlnetora.sqlnet.outbound_connect_timeout

0107200

动态

客户端建立与数据库实例的 Oracle Net 连接的时间,以秒为单位。

sqlnetora.sqlnet.recv_timeout

0107200

动态

数据库服务器在建立连接之后等待客户端数据的时间,以秒为单位。

sqlnetora.sqlnet.send_timeout

0107200

动态

数据库服务器在建立连接之后,完成对客户端的发送操作的时间,以秒为单位。

sqlnetora.tcp.connect_timeout

0107200

动态

客户端建立与数据库服务器的 TCP 连接的时间,以秒为单位。

sqlnetora.trace_level_server

041016OFFUSERADMINSUPPORT

动态

对于非 ADR 跟踪,在指定级别启用服务器跟踪或禁用服务器跟踪。

每个支持的 sqlnet.ora 参数的默认值是该版本的 Oracle 默认值。有关 Oracle Database 12c 默认值的信息,请参阅 Oracle Database 12c 文档中的 sqlnet.ora 文件的参数

查看 sqlnet.ora 参数

您可以使用 AWS 管理控制台、AWS CLI 或 SQL 客户端查看 sqlnet.ora 参数及其设置。

使用控制台查看 sqlnet.ora 参数

有关查看参数组中参数的信息,请参阅使用数据库参数组

在 Oracle 参数组中,sqlnetora. 前缀标识哪些参数是 sqlnet.ora 参数。

使用 AWS CLI 查看 sqlnet.ora 参数

要查看在 Oracle 参数组中配置的 sqlnet.ora 参数,请使用 AWS CLI describe-db-parameters 命令。

要查看 Oracle 数据库实例的所有 sqlnet.ora 参数,请调用 AWS CLI download-db-log-file-portion 命令。指定数据库实例标识符、日志文件名和输出的类型。

以下代码列出 mydbinstance 的所有 sqlnet.ora 参数。

对于 Linux、macOS 或 Unix:

aws rds download-db-log-file-portion \ --db-instance-identifier mydbinstance \ --log-file-name trace/sqlnet-parameters \ --output text

对于 Windows:

aws rds download-db-log-file-portion ^ --db-instance-identifier mydbinstance ^ --log-file-name trace/sqlnet-parameters ^ --output text

使用 SQL 客户端查看 sqlnet.ora 参数

在 SQL 客户端中连接到 Oracle 数据库实例之后,以下查询列出 sqlnet.ora 参数。

SELECT * FROM TABLE (rdsadmin.rds_file_util.read_text_file( p_directory => 'BDUMP', p_filename => 'sqlnet-parameters'));

有关在 SQL 客户端中连接到 Oracle 数据库实例的信息,请参阅连接到 Oracle 数据库实例