

# 为 Amazon RDS Custom for Oracle 配置数据库实例
<a name="custom-creating"></a>

您可以创建 RDS Custom 数据库实例，然后使用安全外壳 (SSH) 或 AWS Systems Manager 连接到该实例。

有关连接和登录 RDS Custom for Oracle 数据库实例的更多信息，请参阅以下主题。
+ [使用会话管理器连接到您的 RDS Custom 数据库实例](custom-creating.ssm.md)
+ [使用 SSH 连接到 RDS Custom 数据库实例](#custom-creating.ssh)
+ [以 SYS 身份登录您的 RDS Custom for Oracle 数据库](custom-creating.sysdba.md)

## 创建 RDS Custom for Oracle 数据库实例
<a name="custom-creating.create"></a>

使用 AWS 管理控制台 或 AWS CLI 创建 Amazon RDS Custom for Oracle 数据库实例。该过程与创建 Amazon RDS 数据库实例的过程相似。有关更多信息，请参阅 [创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

如果您在 CEV 清单中包含了安装参数，则您的数据库实例将使用您指定的 Oracle 根目录、Oracle 主目录以及 UNIX/Linux 用户和组的 ID 和名称。`oratab` 文件由 Oracle Database 在安装期间创建，指向实际安装位置，而不是符号链接。当 RDS Custom for Oracle 运行命令时，它以配置的操作系统用户而不是原定设置用户 `rdsdb` 的身份运行。有关更多信息，请参阅 [步骤 5：准备 CEV 清单](custom-cev.preparing.md#custom-cev.preparing.manifest)。

在尝试创建或连接到 RDS Custom 数据库实例之前，请先完成[为 Amazon RDS Custom for Oracle 设置您的环境](custom-setup-orcl.md)中的任务。

### 控制台
<a name="custom-creating.console"></a>

**要创建 RDS Custom for Oracle 数据库实例**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择**创建数据库**。

1. 在 **Choose a database creation method**（选择数据库创建方法）中，选择 **Standard create**（标准创建）。

1. 在**引擎选项**部分中，执行以下操作：

   1. 对于 **Engine type**（引擎类型），选择 **Oracle**。

   1. 对于 **Database management type**（数据库管理类型），选择 **Amazon RDS Custom**。

   1. 对于**架构设置**，执行以下操作之一：
      + 选择**多租户架构**以创建容器数据库（CDB）。创建时，您的 CDB 包含一个 PDB 种子和一个初始 PDB。
**注意**  
只有 Oracle Database 19c 才支持**多租户架构**设置。
      + 清除**多租户架构**以创建非 CDB。非 CDB 不能包含 PDB。

   1. 对于**版本**，请选择 **Oracle Enterprise Edition** 或 **Oracle Standard Edition 2**。

   1. 对于**自定义引擎版本**，选择现有 RDS Custom 自定义引擎版本（CEV）。CEV 采用以下格式：`major-engine-version.customized_string`。一个示例标识符是 `19.cdb_cev1`。

      如果您在上一步中选择了**多租户架构**，则只能指定使用 `custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb` 引擎类型的 CEV。控制台会筛选掉使用不同引擎类型创建的 CEV。

1. 在 **Templates**（模板）中，选择 **Production**（生产）。

1. 在**设置**部分，执行以下操作：

   1. 对于**数据库实例标识符**，请输入数据库实例的唯一名称。

   1. 对于**主用户名**，输入用户名。您可以稍后从控制台检索此值。

      当您连接到非 CDB 时，主用户是非 CDB 的用户。当您连接到 CDB 时，主用户是 PDB 的用户。要连接到 CDB 根目录，请登录主机，启动 SQL 客户端，然后使用 SQL 命令创建管理用户。

   1. 清除**自动生成密码**。

1. 选择**数据库实例类**。

   有关支持的类，请参阅 [RDS Custom for Oracle 的数据库实例类支持](custom-oracle-feature-support.md#custom-reqs-limits.instances)。

1. 在 **Storage**（存储）部分中，执行以下操作：

   1. 对于**存储类型**，选择 SSD 类型：io1、io2、gp2 或 gp3。您还有以下附加选项：
      + 对于 io1、io2 或 gp3，为**预调配 IOPS** 选择费率。io1 和 io2 的默认值为 1000，gp3 的默认值为 12000。
      + 对于 gp3，为**存储吞吐量**选择速率。原定设置值为 500MiBps。

   1. 对于**分配的存储空间**，选择存储大小。原定设置值为 40GiB。

1. 对于**连接**，请指定您的**虚拟私有云（VPC）**、**数据库子网组**和 **VPC 安全组（防火墙）**。

1. 对于 **RDS Custom 安全性**，执行以下操作：

   1. 对于 **IAM instance profile**（IAM 实例配置文件），为 RDS Custom for Oracle 数据库实例选择实例配置文件。

      IAM 实例配置文件必须以 `AWSRDSCustom` 开头，例如，*AWSRDSCustomInstanceProfileForRdsCustomInstance*。

   1. 对于 **Encryption**（加密），选择 **Enter a key ARN**（输入一个密钥 ARN）以列出可用的 AWS KMS 密钥。然后从列表中选择您的密钥。

      RDS Custom 需要 AWS KMS 密钥。有关更多信息，请参阅 [步骤 1：创建或重用对称加密 AWS KMS 密钥](custom-setup-orcl.md#custom-setup-orcl.cmk)。

1. 对于**数据库选项**，执行以下操作：

   1. （可选）对于**系统 ID（SID）**，输入 Oracle SID 的值，该值也是您 CDB 的名称。SID 是管理您数据库文件的 Oracle 数据库实例的名称。在这种情况下，“Oracle 数据库实例”一词仅指系统全局区域（SGA）和 Oracle 后台进程。如果未指定 SID，则该值原定设置为 **RDSCDB**。

   1. （可选）对于**初始数据库名称**，输入名称。默认值为 **ORCL**。在多租户架构中，初始数据库名称是 PDB 名称。
**注意**  
SID 和 PDB 的名称必须不同。

   1. 对于**选项组**，选择一个选项组或接受默认值。
**注意**  
RDS Custom for Oracle 唯一支持的选项是 `Timezone`。有关更多信息，请参阅 [Oracle 时区](custom-managing.timezone.md)。

   1. 对于**备份保留期**，选择一个值。您不能选择 **0 天**。

   1. 对于其余部分，请指定首选的 RDS Custom 数据库实例设置。有关每项设置的信息，请参阅[数据库实例的设置](USER_CreateDBInstance.Settings.md)。以下设置不会显示在控制台中，也不受支持：
      + **处理器功能**
      + **Storage autoscaling (存储自动扩展**
      + **Database authentication**（数据库身份验证）中的 **Password and Kerberos authentication**（密码和 Kerberos 身份验证）选项（仅支持 **Password authentication**（密码身份验证））
      + **性能详情**
      + **日志导出**
      + **启用自动次要版本升级**
      + **删除保护**

1. 选择**创建数据库**。
**重要**  
当您创建 RDS Custom for Oracle 数据库实例时，您可能会收到以下错误：The service-linked role is in the process of being created.（服务相关角色正在创建过程中）。请稍后重试。如果您这样做，请等待几分钟，然后重新尝试创建数据库实例。

   **View credential details**（查看凭证详细信息）按钮显示在 **Databases**（数据库）页面中。

   要查看 RDS Custom 数据库实例的主用户名和密码，请选择 **View credential details**（查看凭证详细信息）。

   要以主用户身份连接到数据库实例，请使用显示的用户名和密码。
**重要**  
您无法再次在控制台中查看主用户密码。如果您不记录它，您可能需要更改它。要在 RDS Custom 数据库实例可用后更改主用户密码，请登录数据库并运行 `ALTER USER` 命令。您可以使用控制台中的**修改**选项重置密码。

1. 选择 **Databases**（数据库）以查看 RDS Custom 数据库实例列表。

1. 选择您刚创建的 RDS Custom 数据库实例。

   在 RDS 控制台上，将显示新 RDS Custom 数据库实例的详细信息。
   + 数据库实例具有 **creating**（正在创建）状态，直到 RDS Custom 数据库实例完成创建并可供使用。当状态变为 **Available (可用)** 时，您可以连接到该数据库实例。根据所分配的实例类和存储的不同，新数据库实例可能需要数分钟时间才能变得可用。
   + **Role**（角色）具有值 **Instance (RDS Custom)**（实例 (RDS Custom)）。
   + **RDS Custom automation mode**（RDS Custom 自动化模式）具有值 **Full automation**（完全自动化）。此设置意味着数据库实例可以提供自动监控和实例恢复。

### AWS CLI
<a name="custom-creating.CLI"></a>

您可以通过使用 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 命令创建 RDS Custom 数据库实例。

以下选项为必填：
+ `--db-instance-identifier`
+ `--db-instance-class`（有关支持的实例类的列表，请参阅 [RDS Custom for Oracle 的数据库实例类支持](custom-oracle-feature-support.md#custom-reqs-limits.instances)）
+ `--engine engine-type`，其中 *engine-type* 为 `custom-oracle-ee`、`custom-oracle-se2`、`custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb`
+ `--engine-version cev`（其中 *`cev`* 是您在 [创建 CEV](custom-cev.create.md) 中指定的自定义引擎版本的名称）
+ `--kms-key-id my-kms-key`
+ `--backup-retention-period days`（其中，*`days`* 值大于 `0`）
+ `--no-auto-minor-version-upgrade`
+ `--custom-iam-instance-profile AWSRDSCustomInstanceProfile-us-east-1`（其中，*`region`* 是您在其中创建数据库实例的 AWS 区域）

以下示例将创建名为 `my-cfo-cdb-instance` 的 RDS Custom 数据库实例。该数据库是一个 CDB，其非原定设置名称为 *MYCDB*。非原定设置 PDB 名称是 *MYPDB*。备份保留期为三天。

**Example**  
对于 Linux、macOS 或 Unix：  

```
 1. aws rds create-db-instance \
 2.     --engine custom-oracle-ee-cdb \
 3.     --db-instance-identifier my-cfo-cdb-instance \
 4.     --engine-version 19.cdb_cev1 \
 5.     --db-name MYPDB \
 6.     --db-system-id MYCDB \
 7.     --allocated-storage 250 \
 8.     --db-instance-class db.m5.xlarge \
 9.     --db-subnet-group mydbsubnetgroup \
10.     --master-username myuser \
11.     --master-user-password mypassword \
12.     --backup-retention-period 3 \
13.     --port 8200 \
14.     --kms-key-id my-kms-key \
15.     --no-auto-minor-version-upgrade \
16.     --custom-iam-instance-profile AWSRDSCustomInstanceProfile-us-east-1
```
对于：Windows  

```
 1. aws rds create-db-instance ^
 2.     --engine custom-oracle-ee-cdb ^
 3.     --db-instance-identifier my-cfo-cdb-instance ^
 4.     --engine-version 19.cdb_cev1 ^
 5.     --db-name MYPDB ^
 6.     --db-system-id MYCDB ^
 7.     --allocated-storage 250 ^
 8.     --db-instance-class db.m5.xlarge ^
 9.     --db-subnet-group mydbsubnetgroup ^
10.     --master-username myuser ^
11.     --master-user-password mypassword ^
12.     --backup-retention-period 3 ^
13.     --port 8200 ^
14.     --kms-key-id my-kms-key ^
15.     --no-auto-minor-version-upgrade ^
16.     --custom-iam-instance-profile AWSRDSCustomInstanceProfile-us-east-1
```
作为安全最佳实践，请指定除此处所示提示以外的密码。

使用 `describe-db-instances` 命令以获取有关您的实例的详细信息。

**Example**  

```
1. aws rds describe-db-instances --db-instance-identifier my-cfo-cdb-instance
```
以下部分输出显示了引擎、参数组和其他信息。  

```
 1.         {   
 2.             "DBInstanceIdentifier": "my-cfo-cdb-instance",
 3.             "DBInstanceClass": "db.m5.xlarge",
 4.             "Engine": "custom-oracle-ee-cdb",
 5.             "DBInstanceStatus": "available",
 6.             "MasterUsername": "admin",
 7.             "DBName": "MYPDB",
 8.             "DBSystemID": "MYCDB",
 9.             "Endpoint": {
10.                 "Address": "my-cfo-cdb-instance.abcdefghijkl.us-east-1.rds.amazonaws.com",
11.                 "Port": 1521,
12.                 "HostedZoneId": "A1B2CDEFGH34IJ"
13.             },
14.             "AllocatedStorage": 100,
15.             "InstanceCreateTime": "2023-04-12T18:52:16.353000+00:00",
16.             "PreferredBackupWindow": "08:46-09:16",
17.             "BackupRetentionPeriod": 7,
18.             "DBSecurityGroups": [],
19.             "VpcSecurityGroups": [
20.                 {
21.                     "VpcSecurityGroupId": "sg-0a1bcd2e",
22.                     "Status": "active"
23.                 }
24.             ],
25.             "DBParameterGroups": [
26.                 {
27.                     "DBParameterGroupName": "default.custom-oracle-ee-cdb-19",
28.                     "ParameterApplyStatus": "in-sync"
29.                 }
30.             ],
31. ...
```

## 多租户架构注意事项
<a name="custom-creating.overview"></a>

如果您使用 Oracle 多租户架构（`custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb` 引擎类型）创建 Amazon RDS Custom for Oracle 数据库实例，则您的数据库是容器数据库（CDB）。如果您未指定 Oracle 多租户架构，则您的数据库是使用 `custom-oracle-ee` 或 `custom-oracle-se2` 引擎类型的传统非 CDB。非 CDB 不能包含可插拔数据库（PDB）。有关更多信息，请参阅 [Amazon RDS Custom for Oracle 的数据库架构](custom-oracle.db-architecture.md)。

创建 RDS Custom for Oracle CDB 实例时，请考虑以下几点：
+ 您只能从 Oracle Database 19c CEV 创建多租户数据库。
+ 仅当 CEV 使用 `custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb` 引擎类型时，您才能创建 CDB 实例。
+ 如果您使用 Standard Edition 2 创建 CDB 实例，则 CDB 最多可以包含 3 个 PDB。
+ 原定设置情况下，您的 CDB 命名为 `RDSCDB`，这也是 Oracle 系统 ID（Oracle SID）的名称。您可以选择其他名称。
+ 您的 CDB 仅包含一个初始 PDB。PDB 名称原定设置为 `ORCL`。您可以为初始 PDB 选择不同的名称，但是 Oracle SID 和 PDB 名称不能相同。
+ RDS Custom for Oracle 不为 PDB 提供 API。要创建其他 PDB，请使用 Oracle SQL 命令 `CREATE PLUGGABLE DATABASE`。RDS Custom for Oracle 不限制您可以创建的 PDB 数量。通常，您负责创建和管理 PDB，就像在本地部署中一样。
+ 您不能使用 RDS API 来创建、修改和删除 PDB：您必须使用 Oracle SQL 语句来执行这些操作。如果您使用 Oracle SQL 创建 PDB，建议您之后拍摄手动快照，以防需要执行时间点故障恢复（PITR）。
+ 您无法使用 Amazon RDS API 重命名现有 PDB。您也无法使用 `modify-db-instance` 命令重命名 CDB。
+ CDB 根目录的打开模式在主数据库上为 `READ WRITE`，在已挂载的备用数据库上为 `MOUNTED`。RDS Custom for Oracle 会在打开 CDB 时尝试打开所有 PDB。如果 RDS Custom for Oracle 无法打开所有 PDB，它会发出事件 `tenant database shutdown`。

## RDS Custom 服务相关角色
<a name="custom-creating.slr"></a>

*服务相关角色* 为 Amazon RDS Custom 提供针对您的 AWS 账户中的资源的访问权限。这样可以让您更轻松地使用 RDS Custom，因为您不必手动添加必要的权限。RDS Custom 定义其服务相关角色的权限，除非另外定义，否则只有 RDS Custom 可以代入该角色。定义的权限包括信任策略和权限策略，以及不能附加到任何其他 IAM 实体的权限策略。

创建 RDS Custom 数据库实例时，将创建并使用 Amazon RDS 和 RDS Custom 服务相关角色（如果它们尚未存在）。有关更多信息，请参阅 [将服务相关角色用于 Amazon RDS](UsingWithRDS.IAM.ServiceLinkedRoles.md)。

首次创建 RDS Custom for Oracle 数据库实例时，您可能会收到以下错误：The service-linked role is in the process of being created.（服务相关角色正在创建过程中）。请稍后重试。如果您这样做，请等待几分钟，然后重新尝试创建数据库实例。

## 在 RDS Custom for Oracle 数据库实例上安装其他软件组件
<a name="custom-install-add-software"></a>

在新创建的数据库实例中，您的数据库环境包括 Oracle 二进制文件、数据库和数据库侦听器。您可能需要在数据库实例的主机操作系统上安装其他软件。例如，您可能需要安装 Oracle Application Express（APEX）、Oracle Enterprise Manager（OEM）代理或 Guardium S-TAP 代理。有关指南和总体说明，请参阅详细的 AWS 博客文章[在 Amazon RDS Custom for Oracle 上安装其他软件组件](https://aws.amazon.com//blogs/database/install-additional-software-components-on-amazon-rds-custom-for-oracle/)。

# 使用会话管理器连接到您的 RDS Custom 数据库实例
<a name="custom-creating.ssm"></a>

创建 RDS Custom 数据库实例后，您可以使用 AWS Systems Manager Session Manager 连接到该实例。当数据库实例无法公开访问时，这是首选技术。

会话管理器可让您通过基于浏览器的 Shell 或通过 AWS CLI 访问 Amazon EC2 实例。有关更多信息，请参阅 [AWS Systems Manager 会话管理器](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)。

## 控制台
<a name="custom-managing.ssm.console"></a>

**使用会话管理器连接到您的数据库实例**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，请选择 **Databases**（数据库），然后选择要连接到的 RDS Custom 数据库实例。

1. 选择**配置**。

1. 请注意您的数据库实例的 **Resource ID**（资源 ID）。例如，资源 ID 可能为 `db-ABCDEFGHIJKLMNOPQRS0123456`。

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**实例**。

1. 查找 EC2 实例的名称，然后单击与其关联的实例 ID。例如，实例 ID 可能为 `i-abcdefghijklm01234`。

1. 选择**连接**。

1. 选择 **Session Manager**（会话管理器）。

1. 选择**连接**。

   系统将为您的会话打开一个窗口。

## AWS CLI
<a name="custom-managing.ssm.CLI"></a>

您可以使用 AWS CLI 连接到 RDS Custom 数据库实例。此方法需要 AWS CLI 的会话管理器插件。要了解如何安装插件，请参阅[安装 AWS CLI 的会话管理器插件](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html)。

要查找 RDS Custom 数据库实例的数据库资源 ID，请使用 `aws rds [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html)`。

```
aws rds describe-db-instances \
    --query 'DBInstances[*].[DBInstanceIdentifier,DbiResourceId]' \
    --output text
```

以下示例输出显示了 RDS Custom 实例的资源 ID。前缀为 `db-`。

```
db-ABCDEFGHIJKLMNOPQRS0123456
```

要查找数据库实例的 EC2 实例 ID，请使用 `aws ec2 describe-instances`。以下示例将 `db-ABCDEFGHIJKLMNOPQRS0123456` 用于资源 ID。

```
aws ec2 describe-instances \
    --filters "Name=tag:Name,Values=db-ABCDEFGHIJKLMNOPQRS0123456" \
    --output text \
    --query 'Reservations[*].Instances[*].InstanceId'
```

以下示例输出显示了 EC2 实例 ID。

```
i-abcdefghijklm01234
```

使用 `aws ssm start-session` 命令，以在 `--target` 参数中提供 EC2 实例 ID。

```
aws ssm start-session --target "i-abcdefghijklm01234"
```

成功的连接如下所示。

```
Starting session with SessionId: yourid-abcdefghijklm1234
[ssm-user@ip-123-45-67-89 bin]$
```

## 使用 SSH 连接到 RDS Custom 数据库实例
<a name="custom-creating.ssh"></a>

Secure Shell 协议（SSH）是一种支持通过不安全网络进行加密通信的网络协议。创建 RDS Custom 数据库实例后，您可以使用 ssh 客户端连接到此实例。有关更多信息，请参阅[使用 SSH 连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)。

您的 SSH 连接技术取决于您的数据库实例是否为私有实例，这意味着它不接受来自公共互联网的连接。在这种情况下，您必须使用 SSH 隧道将 ssh 实用程序连接到您的实例。该技术在现有 SSH 会话内通过专用数据流（隧道）传输数据。您可以使用 AWS Systems Manager 配置 SSH 隧道。

**注意**  
支持各种策略以访问私有实例。要了解如何使用堡垒主机将 ssh 客户端连接到私有实例，请参阅 [AWS 上的 Linux 堡垒机主机](https://aws.amazon.com/solutions/implementations/linux-bastion/)。要了解如何配置端口转发，请参阅[使用 AWS Systems Manager Session Manager 进行端口转发](https://aws.amazon.com/blogs/aws/new-port-forwarding-using-aws-system-manager-sessions-manager/)。

如果您的数据库实例位于公有子网中并且具有公共可用设置，则不需要 SSH 隧道。您可以像连接到公有 Amazon EC2 实例一样使用 SSH 进行连接。

要将 ssh 客户端连接到数据库实例，请完成以下步骤：

1. [步骤 1：配置您的数据库实例以允许 SSH 连接](#custom-managing.ssh.port-22)

1. [步骤 2：检索您的 SSH 私密密钥和 EC2 实例 ID](#custom-managing.ssh.obtaining-key)

1. [步骤 3：使用 ssh 实用程序连接到 EC2 实例](#custom-managing.ssh.connecting)

### 步骤 1：配置您的数据库实例以允许 SSH 连接
<a name="custom-managing.ssh.port-22"></a>

要确保您的数据库实例可接受 SSH 连接，请执行以下操作：
+ 确保数据库实例安全组允许端口 22 上的 TCP 入站连接。

  要了解如何为数据库实例配置安全组，请参阅[使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。
+ 如果您不打算使用 SSH 隧道，请确保数据库实例位于公有子网中并且可供公开访问。

  在控制台中，相关字段是数据库详细信息页面的**连接和安全性**选项卡上的**可公开访问**。要在 CLI 中检查设置，请运行以下命令：

  ```
  aws rds describe-db-instances \
  --query 'DBInstances[*].{DBInstanceIdentifier:DBInstanceIdentifier,PubliclyAccessible:PubliclyAccessible}' \
  --output table
  ```

  要更改数据库实例的可访问性设置，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### 步骤 2：检索您的 SSH 私密密钥和 EC2 实例 ID
<a name="custom-managing.ssh.obtaining-key"></a>

要使用 SSH 连接到数据库实例，您需要与该实例关联的 SSH 密钥对。RDS Custom 代表您使用命名约定 `do-not-delete-rds-custom-ssh-privatekey-resource_id-uuid` 或 `rds-custom!oracle-do-not-delete-resource_id-uuid-ssh-privatekey` 创建 SSH 密钥对。AWS Secrets Manager 将您的 SSH 私有密钥存储为密钥。

使用 AWS 管理控制台或 AWS CLI 检索您的 SSH 私密密钥。如果您的实例有公有 DNS，并且您不打算使用 SSH 隧道，则还会检索 DNS 名称。您指定公有连接的 DNS 名称。

#### 控制台
<a name="custom-managing.ssh.obtaining-key.console"></a>

**检索私密 SSH 密钥**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，请选择 **Databases**（数据库），然后选择要连接到的 RDS Custom 数据库实例。

1. 选择**配置**。

1. 请注意 **Resource ID**（资源 ID）值。例如，数据库实例资源 ID 可能为 `db-ABCDEFGHIJKLMNOPQRS0123456`。

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 查找 EC2 实例的名称，然后选择与其关联的实例 ID。例如，EC2 实例 ID 可能为 `i-abcdefghijklm01234`。

1. 在 **Details**（详细信息）中，查找 **Key pair name**（密钥对名称）。密钥对名称包括数据库实例资源 ID。例如，密钥对名称可能为 `do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c` 或 `rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey`。

1. 如果您的 EC2 实例是公有的，请记下**公有 IPv4 DNS**。例如，公有域名系统 (DNS) 地址可能为 `ec2-12-345-678-901.us-east-2.compute.amazonaws.com`。

1. 打开位于 [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 的 AWS Secrets Manager 控制台。

1. 选择与密钥对同名的密钥。

1. 选择 **Retrieve secret value (检索密钥值)**。

1. 将 SSH 私有密钥复制到文本文件中，然后使用 `.pem` 扩展名保存该文件。例如，将文件另存为 `/tmp/do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem` 或 `/tmp/rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem`。

#### AWS CLI
<a name="custom-managing.ssh.obtaining-key.CLI"></a>

要检索 SSH 私有密钥并将其保存在 .pem 文件中，可以使用 AWS CLI。

1. 使用 `aws rds [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html)` 查找 RDS Custom 数据库实例的数据库资源 ID。

   ```
   aws rds describe-db-instances \
       --query 'DBInstances[*].[DBInstanceIdentifier,DbiResourceId]' \
       --output text
   ```

   以下示例输出显示了 RDS Custom 实例的资源 ID。前缀为 `db-`。

   ```
   db-ABCDEFGHIJKLMNOPQRS0123456
   ```

1. 使用 `aws ec2 describe-instances` 查找数据库实例的 EC2 实例 ID。以下示例将 `db-ABCDEFGHIJKLMNOPQRS0123456` 用于资源 ID。

   ```
   aws ec2 describe-instances \
       --filters "Name=tag:Name,Values=db-ABCDEFGHIJKLMNOPQRS0123456" \
       --output text \
       --query 'Reservations[*].Instances[*].InstanceId'
   ```

   以下示例输出显示了 EC2 实例 ID。

   ```
   i-abcdefghijklm01234
   ```

1. 要查找密钥名称，请指定 EC2 实例 ID。以下示例描述了 EC2 实例 `i-0bdc4219e66944afa`。

   ```
   aws ec2 describe-instances \
       --instance-ids i-0bdc4219e66944afa \
       --output text \
       --query 'Reservations[*].Instances[*].KeyName'
   ```

   以下示例输出显示了使用命名格式 `do-not-delete-rds-custom-ssh-privatekey-resource_id-uuid` 或 `rds-custom!oracle-do-not-delete-resource_id-uuid-ssh-privatekey` 的密钥名称。

   ```
   do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c
   rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey
   ```

1. 使用 `aws secretsmanager` 将私有密钥保存在以密钥命名的 .pem 文件中。

   以下示例将密钥 `do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c` 保存到您的 `/tmp` 目录中的文件。

   ```
   aws secretsmanager get-secret-value \
       --secret-id do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c \
       --query SecretString \
       --output text >/tmp/do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem
   ```

   以下示例将密钥 `rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey` 保存到您的 `/tmp` 目录中的文件。

   ```
   aws secretsmanager get-secret-value \
       --secret-id rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey \
       --query SecretString \
       --output text >/tmp/rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem
   ```

### 步骤 3：使用 ssh 实用程序连接到 EC2 实例
<a name="custom-managing.ssh.connecting"></a>

您的连接技术取决于您是连接到私有数据库实例，还是连接到公有实例。私有连接要求您通过 AWS Systems Manager 配置 SSH 隧道。

**使用 ssh 实用程序连接到 EC2 实例**

1. 对于私有连接，请将您的 SSH 配置文件修改为代理对 AWS Systems Manager Session Manager 发出的命令。对于公有连接，请跳至步骤 2。

   将以下行添加到 `~/.ssh/config`。这些行为名称以 `i-` 或 `mi-` 开头的主机代理 SSH 命令。

   ```
   Host i-* mi-*
       ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
   ```

1. 包含您的 .pem 文件的目录的更改。使用 `chmod`，将权限设置为 `400`。

   以下示例更改为 `/tmp` 目录并设置 .pem 文件 `do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem` 的权限。

   ```
   cd /tmp
   chmod 400 do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem
   ```

   以下示例更改为 `/tmp` 目录并设置 .pem 文件 `rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem` 的权限。

   ```
   cd /tmp
   chmod 400 rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem
   ```

1. 运行 ssh 实用程序，指定 .pem 文件和公有 DNS 名称（用于公有连接）或 EC2 实例 ID（用于私有连接）。以用户 `ec2-user` 身份登录。

   以下示例使用 DNS 名称 `ec2-12-345-678-901.us-east-2.compute.amazonaws.com` 连接到公有实例。

   ```
   # .pem file using naming prefix do-not-delete
   ssh -i \
     "do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem" \
     ec2-user@ec2-12-345-678-901.us-east-2.compute.amazonaws.com
   
   # .pem file using naming prefix rds-custom!oracle-do-not-delete
   ssh -i \
     "rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem" \
     ec2-user@ec2-12-345-678-901.us-east-2.compute.amazonaws.com
   ```

   以下示例使用 EC2 实例 ID `i-0bdc4219e66944afa` 连接到私有实例。

   ```
   # .pem file using naming prefix do-not-delete
   ssh -i \
     "do-not-delete-rds-custom-ssh-privatekey-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c.pem" \
     ec2-user@i-0bdc4219e66944afa
   
   # .pem file using naming prefix rds-custom!oracle-do-not-delete
   ssh -i \
     "rds-custom!oracle-do-not-delete-db-ABCDEFGHIJKLMNOPQRS0123456-0d726c-ssh-privatekey.pem" \
     ec2-user@i-0bdc4219e66944afa
   ```

# 以 SYS 身份登录您的 RDS Custom for Oracle 数据库
<a name="custom-creating.sysdba"></a>

创建 RDS Custom 数据库实例后，您能够以用户 `SYS` 身份登录 Oracle 数据库，这会为您提供 `SYSDBA` 权限。您有以下登录选项：
+ 从 Secrets Manager 获取 `SYS` 密码，然后在 SQL 客户端中指定此密码。
+ 使用操作系统身份验证登录您的数据库。在这种情况下，不需要密码。

## 查找您的 RDS Custom for Oracle 数据库的 SYS 密码
<a name="custom-creating.sysdba.pwd"></a>

您能够以 `SYS` 或 `SYSTEM` 身份或通过在 API 调用中指定主用户名来登录 Oracle 数据库。`SYS` 和 `SYSTEM` 的密码存储在 Secrets Manager 中。

此密钥使用命名格式 `do-not-delete-rds-custom-resource_id-uuid` 或 `rds-custom!oracle-do-not-delete-resource_id-uuid`。您可以使用 AWS 管理控制台找到密码。

### 控制台
<a name="custom-creating.sysdba.pwd.console"></a>

**在 Secrets Manager 中查找数据库的 SYS 密码**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在 RDS 控制台中，完成以下步骤：

   1. 在导航窗格中，选择**数据库**。

   1. 选择您的 RDS Custom for Oracle 数据库实例的名称。

   1. 选择**配置**。

   1. 复制**资源 ID** 下方的值。例如，资源 ID 可能是 **db-ABC12CDE3FGH4I5JKLMNO6PQR7**。

1. 通过 [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 打开 Secrets Manager 控制台。

1. 在 Secrets Manager 控制台中，完成以下步骤：

   1. 在左侧导航窗格中，选择**密钥**。

   1. 按您在步骤 2.d 中复制的资源 ID 筛选密钥。

   1. 选择使用以下命名格式的密钥：**do-not-delete-rds-custom-*resource\$1id*-*uuid*** 或 **rds-custom\$1oracle-do-not-delete-*resource\$1id*-*uuid***。*resource\$1id* 是您在步骤 2.d 中复制的资源 ID。

      例如，如果资源 ID 为 **db-ABC12CDE3FGH4I5JKLMNO6PQR7** 并且 UUID 为 **1234ab**，则您的密钥命名为 **do-not-delete-rds-custom-db-ABC12CDE3FGH4I5JKLMNO6PQR7-1234ab** 或 **rds-custom\$1oracle-do-not-delete-db-ABC12CDE3FGH4I5JKLMNO6PQR7-1234ab**。

   1. 在**密钥值**中，选择**检索密钥值**。

   1. 在**键/值**中，复制**密码**的值。

1. 在数据库实例上安装 SQL\$1Plus 并以 `SYS` 身份登录数据库。有关更多信息，请参阅 [步骤 3：将 SQL 客户端连接到 Oracle 数据库实例](CHAP_GettingStarted.CreatingConnecting.Oracle.md#CHAP_GettingStarted.Connecting.Oracle)。

## 使用操作系统身份验证登录您的 RDS Custom for Oracle 数据库
<a name="custom-creating.sysdba.pwd"></a>

操作系统用户 `rdsdb` 拥有 Oracle 数据库二进制文件。您可以切换到 `rdsdb` 用户，无需密码即可登录 RDS Custom for Oracle 数据库。

1. 使用 AWS Systems Manager 连接到您的数据库实例。有关更多信息，请参阅 [使用会话管理器连接到您的 RDS Custom 数据库实例](custom-creating.ssm.md)。

1. 切换到 `rdsdb` 用户。

   ```
   sudo su - rdsdb
   ```

1. 使用操作系统身份验证登录数据库。可以使用 `sqlplus / as sysdba` 或 `sql` 别名。

   ```
   $ sqlplus / as sysdba
   
   SQL*Plus: Release 21.0.0.0.0 - Production on Wed Apr 12 20:11:08 2023
   Version 21.9.0.0.0
   
   Copyright (c) 1982, 2020, Oracle.  All rights reserved.
   
   
   Connected to:
   Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
   Version 19.10.0.0.0
   ```

   或者，可以使用 `sql` 别名：

   ```
   $ sql
   ```