

# Amazon RDS Custom
<a name="rds-custom"></a>

Amazon RDS Custom 自动执行数据库管理任务和操作。Amazon RDS Custom 使您能够作为数据库管理员访问和自定义数据库环境和操作系统。使用 RDS Custom，您可以进行自定义以满足传统、自定义和打包应用程序的要求。

有关 RDS Custom 的最新网络研讨会和博客，请参阅 [Amazon RDS Custom 资源](https://aws.amazon.com/rds/custom/resources/)。

**Topics**
+ [解决数据库自定义的挑战](#custom-intro.challenge)
+ [Amazon RDS Custom 的管理模式和益处](#custom-intro.solution)
+ [Amazon RDS Custom 架构](custom-concept.md)
+ [Amazon RDS Custom 中的安全性](custom-security.md)
+ [使用 RDS Custom for Oracle](working-with-custom-oracle.md)
+ [使用 RDS Custom for SQL Server](working-with-custom-sqlserver.md)

## 解决数据库自定义的挑战
<a name="custom-intro.challenge"></a>

由于第三方应用程序需要进行自定义，Amazon RDS Custom 将 Amazon RDS 的优势带到一个无法轻易转向完全托管式服务的市场。Amazon RDS Custom 可以节省管理时间、具有耐久性，并且可以随着您的业务扩缩。

如果您需要整个数据库和操作系统由 AWS 完全托管，我们建议使用 Amazon RDS。如果您需要对数据库和底层操作系统的管理权限才能使相关应用程序可用，Amazon RDS Custom 是更好的选择。如果您想要全面的管理责任并且只需要托管式计算服务，那么最好的选择是在 Amazon EC2 上自行管理您的商业数据库。

为了提供托管式服务体验，Amazon RDS 不允许您访问底层主机。并且 Amazon RDS 还限制了对需要高级权限的某些程序和对象的访问。但是，对于某些应用程序，您可能需要以特权操作系统 (OS) 用户身份执行操作。

例如，您可能需要执行以下操作：
+ 安装自定义数据库以及操作系统补丁和程序包。
+ 配置特定的数据库设置。
+ 将文件系统配置为直接与其应用程序共享文件。

以前，如果您需要自定义应用程序，则必须在本地或 Amazon EC2 上部署数据库。在这种情况下，您承担数据库管理的大部分或全部责任，如下表所述。


|  特征  |  本地责任  |  Amazon EC2 责任  |  Amazon RDS 责任  | 
| --- | --- | --- | --- | 
|  应用程序优化  |  客户  |  客户  |  客户  | 
|  扩展  |  客户  |  客户  |  AWS  | 
|  高可用性  |  客户  |  客户  |  AWS  | 
|  数据库备份  |  客户  |  客户  |  AWS  | 
|  数据库软件修补  |  客户  |  客户  |  AWS  | 
|  数据库软件安装  |  客户  |  客户  |  AWS  | 
|  操作系统修补  |  客户  |  客户  |  AWS  | 
|  操作系统安装  |  客户  |  客户  |  AWS  | 
|  服务器维护  |  客户  |  AWS  |  AWS  | 
|  硬件生命周期  |  客户  |  AWS  |  AWS  | 
|  电源、网络和冷却  |  客户  |  AWS  |  AWS  | 

当您自行管理数据库软件时，您可以获得更多的控制权，但也更容易出现用户错误。例如，当您进行手动更改时，可能会意外导致应用程序停机。您可能会花几个小时来检查每一项更改，以识别和修复问题。理想情况下，您需要一种托管式数据库服务，该服务可自动执行常见的数据管理员任务，但也支持对数据库和底层操作系统的特权访问。

## Amazon RDS Custom 的管理模式和益处
<a name="custom-intro.solution"></a>

Amazon RDS Custom 是一种托管式数据库服务，适用于需要访问底层操作系统和数据库环境的旧版、自定义和打包应用程序。RDS Custom 可在 AWS 云中自动执行数据库的设置、操作和扩展，同时授予您对数据库和底层操作系统的访问权限。通过此访问权限，您可以配置设置、安装补丁和启用本机特征以满足相关应用程序的要求。使用 RDS Custom，您可以使用 AWS 管理控制台 或 AWS CLI 运行数据库工作负载。

RDS Custom 只支持 Oracle Database 引擎和 Microsoft SQL Server 引擎。

**Topics**
+ [RDS Custom 中的责任共担模式](#custom-intro.solution.shared)
+ [RDS Custom 中的支持外围和不受支持的配置](#custom-intro.solution.support-perimeter)
+ [RDS Custom 的主要益处](#custom-intro.solution.benefits)

### RDS Custom 中的责任共担模式
<a name="custom-intro.solution.shared"></a>

借助 RDS Custom，您可以使用 Amazon RDS 的托管式特征，但您可以像在 Amazon EC2 中一样管理主机和自定义操作系统。除了在 Amazon RDS 中执行的任务之外，您还可以承担更多的数据库管理责任。结果是，与在 Amazon RDS 中相比，您可以更好地控制数据库和数据库实例管理，同时还能从 RDS 自动化中受益。

责任共担意味着以下几点：

1. 使用 RDS Custom 特征时，您拥有该过程的一部分。

   例如，在 RDS Custom for Oracle 中，您可以控制要使用哪些 Oracle 数据库补丁以及何时将其应用于您的数据库实例。

1. 您有责任确保对 RDS Custom 特征的任何自定义都能正确工作。

   为了防止无效的自定义，RDS Custom 提供了在数据库实例之外运行的自动化软件。如果您的底层 Amazon EC2 实例受损，RDS Custom 会尝试通过重启或更换 EC2 实例来自动解决这些问题。用户可见的唯一变化是新的 IP 地址。有关更多信息，请参阅 [Amazon RDS Custom 主机替换](custom-concept.md#custom-troubleshooting.host-problems)。

下表详细介绍 RDS Custom 的不同特征的责任共担模式。


|  特征  |  Amazon EC2 责任  |  Amazon RDS 责任  |  RDS Custom for Oracle 责任  |  RDS Custom for SQL Server 责任  | 
| --- | --- | --- | --- | --- | 
|  应用程序优化  |  客户  |  客户  |  客户  |  客户  | 
|  扩展  |  客户  |  AWS  |  共享  |  共享  | 
|  高可用性  |  客户  |  AWS  | AWS |  AWS  | 
|  数据库备份  |  客户  |  AWS  |  共享  |  AWS  | 
|  数据库软件修补   |  客户  |  AWS  |  共享  | AWS for RPEV、Customer for CEV1 | 
|  数据库软件安装  |  客户  |  AWS  |  共享  | AWS for RPEV、Customer for CEV1 | 
|  操作系统修补  |  客户  |  AWS  |  客户  | AWS for RPEV、Customer for CEV1 | 
|  操作系统安装  |  客户  |  AWS  |  共享  | AWS | 
|  服务器维护  |  AWS  |  AWS  |  AWS  | AWS | 
|  硬件生命周期  |  AWS  |  AWS  |  AWS  | AWS | 
|  电源、网络和冷却  |  AWS  |  AWS  |  AWS  | AWS | 

1 客户引擎版本（CEV）是数据库版本和 Amazon Machine Image（AMI）的二进制卷快照。RDS 提供的引擎版本（RPEV）是默认 Amazon Machine Image（AMI）和 Microsoft SQL Server 安装。

您可以使用 Microsoft SQL Server 创建 RDS Custom 数据库实例。在本例中：
+ 您可以从两种许可模式中进行选择：附带许可证（LI）和自带媒体（BYOM）。
+ 使用 LI，您无需单独购买 SQL Server 许可证。AWS 持有 SQL Server 数据库软件的许可证。
+ 使用 BYOM，您可以提供并安装自己的 Microsoft SQL Server 二进制文件和许可。

您可以使用 Oracle 数据库创建 RDS Custom 数据库实例。在此情况下，您可以执行以下操作：
+ 管理自己的媒体。

  使用 RDS Custom 时，您可以上载自己的数据库安装文件和补丁。您可以从这些文件中创建自定义引擎版本 (CEV)。然后，您可以通过使用此 CEV 创建 RDS Custom 数据库实例。
+ 管理自己的许可证。

  您可以自带 Oracle 数据库许可证并自行管理许可证。

### RDS Custom 中的支持外围和不受支持的配置
<a name="custom-intro.solution.support-perimeter"></a>

RDS Custom 提供了一个名为*支持外围* 的监控功能。此特征可确保您的主机和数据库环境得以正确配置。如果您所做的更改导致数据库实例超出支持外围，则 RDS Custom 会将实例状态更改为 `unsupported-configuration`，直到您手动修复配置问题。有关更多信息，请参阅 [RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。

### RDS Custom 的主要益处
<a name="custom-intro.solution.benefits"></a>

利用 RDS Custom，您可以执行以下操作：
+ 自动执行许多与 Amazon RDS 相同的管理任务，包括以下任务：
  + 数据库生命周期管理
  + 自动备份和时间点恢复 (PITR)
  + 监控 RDS Custom 数据库实例的运行状况并观察对基础设施、操作系统和数据库进程的更改。
  + 根据数据库实例的中断情况，通知或采取措施以修复问题
+ 安装第三方应用程序。

  您可以安装软件来运行自定义应用程序和代理。由于您拥有对主机的特权访问权限，因此可以修改文件系统以支持旧版应用程序。
+ 安装自定义补丁。

  您可以在 RDS Custom 数据库实例上应用自定义数据库补丁或修改操作系统包。
+ 在将本地数据库移动到完全托管式服务之前，将其暂存。

  如果您管理自己的本地数据库，则可以按原样将数据库暂存到 RDS Custom。熟悉云环境后，您可以将数据库迁移到完全托管式 Amazon RDS 数据库实例。
+ 创建您自己的自动化。

  您可以为报告、管理或诊断工具创建、计划和运行自定义自动化脚本。

# Amazon RDS Custom 架构
<a name="custom-concept"></a>

Amazon RDS Custom 架构基于 Amazon RDS，且具有重要的区别。下图显示 RDS Custom 架构的主要组件。

![\[RDS Custom 架构组件\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/RDS_Custom_gen_architecture.png)


**Topics**
+ [VPC](#custom-concept.components.VPC)
+ [RDS Custom 自动化和监控](#custom-concept.workflow.automation)
+ [Amazon S3](#custom-concept.components.S3)
+ [AWS CloudTrail](#custom-concept.components.CloudTrail)

## VPC
<a name="custom-concept.components.VPC"></a>

与在 Amazon RDS 中一样，RDS Custom 数据库实例驻留在 Virtual Private Cloud（VPC）中。

![\[RDS Custom 数据库实例组件\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/RDS_Custom_instance.png)


RDS Custom 数据库实例包含以下主要组件：
+ Amazon EC2 实例
+ 实例端点
+ Amazon EC2 实例上安装的操作系统
+ Amazon EBS 存储，其中包含任何其他文件系统

## RDS Custom 自动化和监控
<a name="custom-concept.workflow.automation"></a>

RDS Custom 具有在数据库实例之外运行的自动化软件。该软件与数据库实例上的代理以及整个 RDS Custom 环境中的其他组件通信。

RDS Custom 监控和恢复特征提供与 Amazon RDS 类似的功能。预设情况下，RDS Custom 处于完全自动化模式。自动化软件负有以下主要责任：
+ 收集指标并发送通知
+ 执行自动实例恢复

RDS Custom 自动化的一项重要责任是响应 Amazon EC2 实例的问题。由于各种原因，主机可能会受损或无法访问。RDS Custom 可以通过重新启动或替换 Amazon EC2 实例来解决这些问题。

**Topics**
+ [Amazon RDS Custom 主机替换](#custom-troubleshooting.host-problems)
+ [RDS Custom 支持外围](#custom-troubleshooting.support-perimeter)

### Amazon RDS Custom 主机替换
<a name="custom-troubleshooting.host-problems"></a>

如果 Amazon EC2 主机受损，RDS Custom 会尝试重新启动它。如果重新启动失败，RDS Custom 将使用 Amazon EC2 中包含的相同停止和开启特征。更换主机时，客户唯一可见的更改是新的公有 IP 地址。

**Topics**
+ [停止并启动主机。](#custom-troubleshooting.host-problems.replacement.stop-start)
+ [主机更换的影响](#custom-troubleshooting.host-problems.replacement.host-state)
+ [Amazon EC2 主机的最佳实践](#custom-troubleshooting.host-problems.best-practices)

#### 停止并启动主机。
<a name="custom-troubleshooting.host-problems.replacement.stop-start"></a>

RDS Custom 会自动执行以下步骤，无需用户干预：

1. 停止 Amazon EC2 主机。

   EC2 实例将正常关闭并停止运行。所有 Amazon EBS 卷保持连接至实例，而且其数据将保留下来。存储在实例存储卷（RDS Custom 上不支持）或主机 RAM 中的所有数据都将不复存在。

   有关更多信息，请参阅 *Amazon EC2 用户指南*中的[停止和启动您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)。

1. 启动 Amazon EC2 主机。

   EC2 实例将迁移到新的底层主机硬件。在某些情况下，RDS Custom 数据库实例将仍保留在原始主机上。

#### 主机更换的影响
<a name="custom-troubleshooting.host-problems.replacement.host-state"></a>

在 RDS Custom 中，您可以完全控制根设备卷和 Amazon EBS 存储卷。根卷可能包含您不想丢失的重要数据和配置。

RDS Custom for Oracle 会在操作后保留所有数据库和客户数据，包括根卷数据。无需用户干预。在 RDS Custom for SQL Server 上，数据库数据将会保留，但 `C:` 盘上的所有数据（包括操作系统和客户数据）都将丢失。

在完成主机替换过程之后，Amazon EC2 主机将拥有一个新的公有 IP 地址。新主机将保留下表中所示的数据和元数据。


| 元数据或数据 | RDS Custom for Oracle 保留 | RDS Custom for SQL Server 保留 | 
| --- | --- | --- | 
| EC2 实例 ID | 是 | 否 | 
| EC2 实例元数据 | 支持 | 是 | 
| 数据存储卷数据 | 支持 | 是 | 
| 根卷数据 | 是 | 否 | 
| 私有 IP 地址 | 支持 | 是 | 
| 弹性 IP 地址 | 支持 | 是 | 

#### Amazon EC2 主机的最佳实践
<a name="custom-troubleshooting.host-problems.best-practices"></a>

Amazon EC2 主机更换特征涵盖了大多数 Amazon EC2 受损情况。我们建议您遵循以下最佳实践：
+ 在更改配置或操作系统之前，请备份数据。如果根卷或操作系统受到损坏，那么主机更换将无法修复这一问题。您唯一的选择是从数据库快照还原或采用时间点恢复。
+ 不要手动停止或终止物理 Amazon EC2 主机。这两种操作都会导致实例被置于 RDS Custom 支持外围之外。
+ (RDS Custom for SQL Server) 如果您将其他卷附加到 Amazon EC2 主机，请将其配置为在重新启动时重新装载。如果主机受损，RDS Custom 可能会自动停止和开启主机。

### RDS Custom 支持外围
<a name="custom-troubleshooting.support-perimeter"></a>

RDS Custom 提供了名为*支持外围*的额外监控功能。这项额外的监控功能可确保您的 RDS Custom 数据库实例使用受支持的 AWS 基础设施、操作系统和数据库。

支持外围检查您的数据库实例是否符合[修复 RDS Custom for Oracle 中不支持的配置](custom-troubleshooting.md#custom-troubleshooting.fix-unsupported)和[修复 RDS Custom for SQL Server 中不支持的配置](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.fix-unsupported)中列出的要求。如果其中的任何要求未得到满足，则 RDS Custom 会认为数据库实例位于支持外围之外。

**Topics**
+ [RDS Custom 不支持的配置](#custom-concept.support-perimeter.unsupported-config)
+ [对不支持的配置进行故障排除](#custom-concept.support-perimeter.fix-unsupported-config)

#### RDS Custom 不支持的配置
<a name="custom-concept.support-perimeter.unsupported-config"></a>

当您的数据库实例在支持外围之外时，RDS Custom 会将数据库实例状态更改为 `unsupported-configuration` 并发送事件通知。修复配置问题后，RDS Custom 会将数据库实例状态更改回 `available`。

当数据库实例处于 `unsupported-configuration` 状态时，会出现如下情况：
+ 您的数据库可供访问。一种例外情况是当数据库实例处于 `unsupported-configuration` 时，因为数据库正在意外关闭。
+ 您无法修改数据库实例。
+ 您将无法生成数据库快照。
+ 不会创建自动备份。
+ 仅限 RDS Custom for SQL Server 数据库实例，如果底层 Amazon EC2 实例受损，RDS Custom 不会替换该实例。有关主机替换的更多信息，请参阅[Amazon RDS Custom 主机替换](#custom-troubleshooting.host-problems)。
+ 您可以删除数据库实例，但大多数其他 RDS Custom API 操作都不可用。
+ 通过归档重做日志文件并将其上传到 Amazon S3，RDS Custom 可继续支持时间点故障恢复（PITR）。`unsupported-configuration` 状态下的 PITR 在以下方面有所不同：
  + PITR 可能需要花费较长时间，才能完全还原为新的 RDS Custom 数据库实例。发生这种情况，是因为当实例处于 `unsupported-configuration` 状态时，您不能自动或手动生成快照。
  + 在实例进入 `unsupported-configuration` 状态前，PITR 必须从最近生成的快照开始重播更多重做日志。
  + 在某些情况下，数据库实例处于 `unsupported-configuration` 状态，因为您所做的更改阻止了上传归档的重做日志文件。示例包括停止 EC2 实例、停止 RDS Custom 代理和分离 EBS 卷。在此类情况下，PITR 无法将数据库实例恢复到最近的可还原时间点。

#### 对不支持的配置进行故障排除
<a name="custom-concept.support-perimeter.fix-unsupported-config"></a>

RDS Custom 为 `unsupported-configuration` 状态提供故障排除指南。虽然有些指南同时适用于 RDS Custom for Oracle 和 RDS Custom for SQL Server，但其他指南取决于您的数据库引擎。有关特定于引擎的故障排除信息，请参阅以下主题：
+ [修复 RDS Custom for Oracle 中不支持的配置](custom-troubleshooting.md#custom-troubleshooting.fix-unsupported)
+ [修复 RDS Custom for SQL Server 中不支持的配置](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.fix-unsupported)

## Amazon S3
<a name="custom-concept.components.S3"></a>

如果您使用 RDS Custom for Oracle，可以将安装媒体上传到用户创建的 Amazon S3 存储桶。RDS Custom for Oracle 使用此存储桶中的媒体创建自定义引擎版本 (CEV)。*CEV* 是数据库版本和 Amazon Machine Image (AMI) 的二进制卷快照。您可以从 CEV 中创建 RDS Custom 数据库实例。有关更多信息，请参阅 [使用 Amazon RDS Custom for Oracle 的自定义引擎版本](custom-cev.md)。

RDS Custom for Oracle 和 RDS Custom for SQL Server 都会自动创建一个带有字符串 `do-not-delete-rds-custom-` 作为前缀的 Amazon S3 存储桶。RDS Custom 使用 `do-not-delete-rds-custom-` S3 存储桶存储以下类型的文件：
+ AWS CloudTrailRDS Custom 创建的跟踪记录的 日志
+ 支持外围构件（请参阅[RDS Custom 支持外围](#custom-troubleshooting.support-perimeter)）
+ 数据库恢复日志文件（仅 RDS Custom for Oracle）
+ 事务日志（仅 RDS Custom for SQL Server）
+ Custom 引擎版本构件（仅 RDS Custom for Oracle）

当您创建以下任一资源时，RDS Custom 会创建 `do-not-delete-rds-custom-` S3 存储桶：
+ 您的第一个适用于 RDS Custom for Oracle 的 CEV
+ 您的第一个适用于 RDS Custom for SQL Server 的数据库实例

RDS Custom 可为以下各项的每个组合创建一个存储桶：
+ AWS 账户 ID
+ 引擎类型（RDS Custom for Oracle 或 RDS Custom for SQL Server）
+ AWS 区域

例如，如果您在单个 AWS 区域中创建 RDS Custom for Oracle CEV，需要存在一个 `do-not-delete-rds-custom-` 存储桶。如果您创建多个 DS Custom for SQL Server 实例，并且它们驻留在不同的 AWS 区域中，需要每个 AWS 区域存在一个 `do-not-delete-rds-custom-` 存储桶。如果您在一个 AWS 区域中创建一个 RDS Custom for Oracle 实例和两个 RDS Custom for SQL Server 实例，需要存在两个 `do-not-delete-rds-custom-` 存储桶。

## AWS CloudTrail
<a name="custom-concept.components.CloudTrail"></a>

RDS Custom 会自动创建名称以 `do-not-delete-rds-custom-` 开头的 AWS CloudTrail 跟踪记录。RDS Custom 支持外围依赖于来自 CloudTrail 的事件来确定您的操作是否影响 RDS Custom 自动化。有关更多信息，请参阅 [对不支持的配置进行故障排除](#custom-concept.support-perimeter.fix-unsupported-config)。

RDS Custom 会在您创建第一个数据库实例时创建跟踪记录。RDS Custom 会为以下各项的每个组合创建一条跟踪记录：
+ AWS 账户 ID
+ 引擎类型（RDS Custom for Oracle 或 RDS Custom for SQL Server）
+ AWS 区域

当您删除 RDS Custom 数据库实例时，不会自动删除此实例的 CloudTrail。在这种情况下，您的 AWS 账户继续为未删除的 CloudTrail 计费。RDS Custom 不负责删除此资源。要了解如何手动删除 CloudTrail，请参阅《AWS CloudTrail 用户指南》**中的[删除跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-delete-trails-console.html)。

# Amazon RDS Custom 中的安全性
<a name="custom-security"></a>

自行熟悉 RDS Custom 的安全注意事项。

有关 RDS Custom 的安全性的更多信息，请参阅以下主题。
+ [保护 Amazon S3 桶免受混淆代理人问题影响](custom-security.confused-deputy.md)
+ [轮换 RDS Custom for Oracle 凭证以遵循合规性计划](custom-security.cred-rotation.md)

## RDS Custom 如何代表您安全地管理任务
<a name="custom-security.security-tools"></a>

RDS Custom 使用以下工具和方法来代表您安全地运行操作：

**AWSServiceRoleForRDSCustom 服务相关角色**  
*服务相关角色*是由服务预定义的，包含该服务代表您调用其他 AWS 服务所需的所有权限。对于 RDS Custom，`AWSServiceRoleForRDSCustom` 是根据最低权限原则定义的服务相关角色。RDS Custom 使用 `AmazonRDSCustomServiceRolePolicy` 中的权限（即附加到此角色的策略）来执行大多数预置和所有脱离主机的管理任务。有关更多信息，请参阅 [AmazonRDSCustomServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSCustomServiceRolePolicy.html)。  
在主机上执行任务时，RDS Custom 自动化通过 AWS Systems Manager 使用来自服务相关角色的凭证来运行命令。您可以通过 Systems Manager 命令历史记录和 AWS CloudTrail 来审计命令历史记录。Systems Manager 使用您的网络设置连接到您的 RDS Custom 数据库实例。有关更多信息，请参阅 [步骤 4：为 RDS Custom for Oracle 配置 IAM](custom-setup-orcl.md#custom-setup-orcl.iam-vpc)。

**临时 IAM 凭证**  
在预置或删除资源时，RDS Custom 有时会使用从发出调用的 IAM 主体的凭证中派生的临时凭证。这些 IAM 凭证受附加到该主体的 IAM policy 限制，并在操作完成后过期。要了解使用 RDS Custom 的 IAM 主体所需的权限，请参阅[步骤 5：为您的 IAM 用户或角色授予所需的权限](custom-setup-orcl.md#custom-setup-orcl.iam-user)。

**Amazon EC2 实例配置文件**  
EC2 实例配置文件是 IAM 角色的容器，可用来将角色信息传递给 EC2 实例。EC2 实例是 RDS Custom 数据库实例的基础。创建 RDS Custom 数据库实例时，您需要提供实例配置文件。RDS Custom 在执行基于主机的管理任务（例如备份）时，使用 EC2 实例配置文件凭证。有关更多信息，请参阅 [手动创建您的 IAM 角色和实例配置文件](custom-setup-orcl.md#custom-setup-orcl.iam)。

**SSH 密钥对**  
当 RDS Custom 创建作为数据库实例基础的 EC2 实例时，它会代表您创建 SSH 密钥对。密钥使用命名前缀 `do-not-delete-rds-custom-ssh-privatekey-db-` 或 `rds-custom!oracle-do-not-delete-db_resource_id-uuid-ssh-privatekey`。AWS Secrets Manager 将此 SSH 私有密钥存储为您的 AWS 账户中的密钥。Amazon RDS 不存储、访问或使用这些凭证。有关更多信息，请参阅 [Amazon EC2 密钥对和 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

## SSL 证书
<a name="custom-security.ssl"></a>

RDS Custom 数据库实例不支持托管式 SSL 证书。如果要部署 SSL，则可以在自己的钱包中自行管理 SSL 证书，并创建 SSL 侦听器来保护客户端数据库之间的连接或进行数据库复制。有关更多信息，请参阅 Oracle 数据库文档中的[配置传输层安全性协议身份验证](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-secure-sockets-layer-authentication.html#GUID-6AD89576-526F-4D6B-A539-ADF4B840819F)。

# 保护 Amazon S3 桶免受混淆代理人问题影响
<a name="custom-security.confused-deputy"></a>

创建 Amazon RDS Custom for Oracle 自定义引擎版本（CEV）或 RDS Custom for SQL Server 数据库实例时，RDS Custom 会创建一个 Amazon S3 桶。S3 桶存储相关文件，例如 CEV 构件、重做（事务）日志、支持外围的配置项目以及 AWS CloudTrail 日志。

您可以通过使用全局条件上下文键来防止*混淆代理人问题*，从而使这些 S3 桶更加安全。有关更多信息，请参阅 [防范跨服务混淆代理问题](cross-service-confused-deputy-prevention.md)。

以下 RDS Custom for Oracle 示例显示了如何在 S3 桶策略中使用 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键。对于 RDS Custom for Oracle，请确保包含 CEV 和数据库实例的 Amazon 资源名称（ARN）。对于 RDS Custom for SQL Server，确请保包含数据库实例的 ARN。

```
...
{
  "Sid": "AWSRDSCustomForOracleInstancesObjectLevelAccess",
  "Effect": "Allow",
  "Principal": {
     "Service": "custom.rds.amazonaws.com"
  },
  "Action": [
     "s3:GetObject",
     "s3:GetObjectVersion",
     "s3:DeleteObject",
     "s3:DeleteObjectVersion",
     "s3:GetObjectRetention",
     "s3:BypassGovernanceRetention"
  ],
  "Resource": "arn:aws:s3:::do-not-delete-rds-custom-123456789012-us-east-2-c8a6f7/RDSCustomForOracle/Instances/*",
  "Condition": {
     "ArnLike": {
        "aws:SourceArn": [
            "arn:aws:rds:us-east-2:123456789012:db:*",
            "arn:aws:rds:us-east-2:123456789012:cev:*/*"
        ]
     },
     "StringEquals": {
        "aws:SourceAccount": "123456789012"
    }
  }
},
...
```

# 轮换 RDS Custom for Oracle 凭证以遵循合规性计划
<a name="custom-security.cred-rotation"></a>

一些合规性计划要求定期更改数据库用户凭证，例如每 90 天更改一次。RDS Custom for Oracle 会自动轮换某些预定义数据库用户的凭证。

**Topics**
+ [自动轮换预定义用户的凭证](#custom-security.cred-rotation.auto)
+ [轮换用户凭证的指南](#custom-security.cred-rotation.guidelines)
+ [手动轮换用户凭证](#custom-security.cred-rotation.manual)

## 自动轮换预定义用户的凭证
<a name="custom-security.cred-rotation.auto"></a>

如果 RDS Custom for Oracle 数据库实例托管在 Amazon RDS 中，则以下预定义 Oracle 用户的凭证每 30 天自动轮换一次。之前用户的凭证位于 AWS Secrets Manager 中。


| 数据库用户 | 创建者 | 支持的引擎版本 | 备注 | 
| --- | --- | --- | --- | 
|  `SYS`  |  Oracle  |  custom-oracle-ee custom-oracle-ee-cdb custom-oracle-se2 custom-oracle-se2-cdb  |  | 
|  `SYSTEM`  |  Oracle  |  custom-oracle-ee custom-oracle-ee-cdb custom-oracle-se2 custom-oracle-se2-cdb  |  | 
|  `RDSADMIN`  |  RDS  |  custom-oracle-ee custom-oracle-se2  |  | 
|  `C##RDSADMIN`  |  RDS  |  custom-oracle-ee-cdb custom-oracle-se2-cdb  | 带有 C\$1\$1 前缀的用户名仅存在于 CDB 中。有关 CDB 的更多信息，请参阅 [Amazon RDS Custom for Oracle 架构概述](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-creating.html#custom-creating.overview)。 | 
|  `RDS_DATAGUARD`  |  RDS  |  custom-oracle-ee  | 此用户仅存在于只读副本、只读副本的源数据库以及您已使用 Oracle Data Guard 物理迁移到 RDS Custom 的数据库中。 | 
|  `C##RDS_DATAGUARD`  |  RDS  |  custom-oracle-ee-cdb  | 此用户仅存在于只读副本、只读副本的源数据库以及您已使用 Oracle Data Guard 物理迁移到 RDS Custom 的数据库中。带有 C\$1\$1 前缀的用户名仅存在于 CDB 中。有关 CDB 的更多信息，请参阅 [Amazon RDS Custom for Oracle 架构概述](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-creating.html#custom-creating.overview)。 | 

自动凭证轮换的一个例外是您手动配置为备用数据库的 RDS Custom for Oracle 数据库实例。RDS 仅轮换您已使用 `create-db-instance-read-replica` CLI 命令或 `CreateDBInstanceReadReplica` API 创建的只读副本的凭证。

## 轮换用户凭证的指南
<a name="custom-security.cred-rotation.guidelines"></a>

为确保您的凭证根据您的合规性计划进行轮换，请注意以下指南：
+ 如果您的数据库实例自动轮换凭证，请不要手动更改或删除[预定义 Oracle 用户](#auto-rotation)中列出的用户的密钥、密码文件或密码。否则，RDS Custom 可能会将您的数据库实例置于支持边界之外，这会暂停自动轮换。
+ RDS 主用户不是预定义的，因此您负责手动更改密码或在 Secrets Manager 中设置自动轮换。有关更多信息，请参阅[轮换 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)。

## 手动轮换用户凭证
<a name="custom-security.cred-rotation.manual"></a>

对于以下类别的数据库，RDS 不会自动轮换在[预定义 Oracle 用户](#auto-rotation)中列出的用户的凭证：
+ 您手动配置为用作备用数据库的数据库。
+ 本地数据库。
+ 位于支持边界之外或处于 RDS Custom 自动化无法运行的状态的数据库实例。在这种情况下，RDS Custom 也不会轮换密钥。

如果您的数据库属于上述任何类别，则必须手动轮换用户凭证。

**手动轮换数据库实例的用户凭证**

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

1. 在**数据库**中，确保 RDS 当前未备份您的数据库实例或执行配置高可用性等操作。

1. 在数据库详细信息页面中，选择**配置**并记下数据库实例的资源 ID。或者，您可以使用 AWS CLI 命令 `describe-db-instances`。

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

1. 在搜索框中，输入数据库的资源 ID，然后使用以下任一命名约定搜索密钥：

   ```
   do-not-delete-rds-custom-resource_id-uuid
   rds-custom!oracle-do-not-delete-resource_id-uuid
   ```

   此密钥存储 `RDSADMIN`、`SYS` 和 `SYSTEM` 的密码。以下示例密钥适用于资源 ID 为 `db-ABCDEFG12HIJKLNMNOPQRS3TUVWX` 和 UUID 为 `123456` 的数据库实例：

   ```
   do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
   rds-custom!oracle-do-not-delete-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
   ```
**重要**  
如果您的数据库实例是只读副本并使用 `custom-oracle-ee-cdb` 引擎，则存在两个带有后缀 `db-resource_id-uuid` 的密钥，一个用于主用户，另一个用于 `RDSADMIN`、`SYS` 和 `SYSTEM`。要找到正确的密钥，请在主机上运行以下命令：  

   ```
   cat /opt/aws/rdscustomagent/config/database_metadata.json | python3 -c "import sys,json; print(json.load(sys.stdin)['dbMonitoringUserPassword'])"
   ```
`dbMonitoringUserPassword` 属性表示 `RDSADMIN`、`SYS` 和 `SYSTEM` 的密钥。

1. 如果您的数据库实例存在于 Oracle Data Guard 配置中，请使用以下任一命名约定搜索密钥：

   ```
   do-not-delete-rds-custom-resource_id-uuid-dg
   rds-custom!oracle-do-not-delete-resource_id-uuid-dg
   ```

   此密钥存储了 `RDS_DATAGUARD` 的密码。以下示例密钥适用于数据库资源 ID 为 `db-ABCDEFG12HIJKLNMNOPQRS3TUVWX` 和 UUID 为 **789012** 的数据库实例：

   ```
   do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-789012-dg
   rds-custom!oracle-do-not-delete-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-789012-dg
   ```

1. 对于[预定义 Oracle 用户](#auto-rotation)中列出的所有数据库用户，按照[修改 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html)中的说明更新密码。

1. 如果您的数据库是独立数据库或 Oracle Data Guard 配置中的源数据库：

   1. 启动 Oracle SQL 客户端并以 `SYS` 身份登录。

   1. 为[预定义 Oracle 用户](#auto-rotation)中列出的每个数据库用户运行以下形式的 SQL 语句：

      ```
      ALTER USER user-name IDENTIFIED BY pwd-from-secrets-manager ACCOUNT UNLOCK;
      ```

      例如，如果存储在 Secrets Manager 中的 `RDSADMIN` 的新密码为 `pwd-123`，请运行以下语句：

      ```
      ALTER USER RDSADMIN IDENTIFIED BY pwd-123 ACCOUNT UNLOCK;
      ```

1. 如果您的数据库实例运行 Oracle Database 12c 版本 1（12.1）并由 Oracle Data Guard 管理，请手动将密码文件（`orapw`）从主数据库实例复制到每个备用数据库实例。

   如果您的数据库实例托管在 Amazon RDS 中，则密码文件位置为 `/rdsdbdata/config/orapw`。对于不在 Amazon RDS 中托管的数据库，在 Linux 和 UNIX 上的原定设置位置为 `$ORACLE_HOME/dbs/orapw$ORACLE_SID`，在 Windows 上的原定设置位置为 `%ORACLE_HOME%\database\PWD%ORACLE_SID%.ora`。

# 使用 RDS Custom for Oracle
<a name="working-with-custom-oracle"></a>

您可在以下内容中找到有关管理和维护 RDS Custom for Oracle 数据库实例的说明。

**Topics**
+ [RDS Custom for Oracle 工作流](custom-concept.workflow.md)
+ [Amazon RDS Custom for Oracle 的数据库架构](custom-oracle.db-architecture.md)
+ [RDS Custom for Oracle 的功能可用性和支持](custom-oracle-feature-support.md)
+ [RDS Custom for Oracle 的要求和限制](custom-reqs-limits.md)
+ [为 Amazon RDS Custom for Oracle 设置您的环境](custom-setup-orcl.md)
+ [使用 Amazon RDS Custom for Oracle 的自定义引擎版本](custom-cev.md)
+ [为 Amazon RDS Custom for Oracle 配置数据库实例](custom-creating.md)
+ [管理 Amazon RDS Custom for Oracle 数据库实例](custom-managing.md)
+ [管理 RDS Custom for Oracle 的多可用区部署](custom-oracle-multiaz.md)
+ [使用适用于 RDS Custom for Oracle 的 Oracle 副本](custom-rr.md)
+ [备份和还原 Amazon RDS Custom for Oracle 数据库实例](custom-backup.md)
+ [使用 RDS Custom for Oracle 中的选项组](custom-oracle-option-groups.md)
+ [将本地数据库迁移到 RDS Custom for Oracle](custom-migrating-oracle.md)
+ [为 Amazon RDS Custom for Oracle 升级数据库实例](custom-upgrading.md)
+ [针对 Amazon RDS Custom for Oracle 排查数据库问题](custom-troubleshooting.md)
+ [Amazon RDS Custom for Oracle 的已知问题](custom-known-issues.md)

# RDS Custom for Oracle 工作流
<a name="custom-concept.workflow"></a>

下图显示了适用于 RDS Custom for Oracle 的典型工作流。

![\[RDS Custom for Oracle 架构组件\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/RDS_Custom_architecture_v2.png)


步骤如下所示：

1. 将数据库软件上载到 Amazon S3 存储桶。

   有关更多信息，请参阅 [步骤 3：将安装文件上传到 Amazon S3](custom-cev.preparing.md#custom-cev.preparing.s3)。

1. 从您的媒体创建 RDS Custom for Oracle 自定义引擎版本（CEV）。

   选择 CDB 架构或传统的非 CDB 架构。有关更多信息，请参阅 [创建 CEV](custom-cev.create.md)。

1. 从 CEV 中创建 RDS Custom for Oracle 数据库实例。

   有关更多信息，请参阅 [创建 RDS Custom for Oracle 数据库实例](custom-creating.md#custom-creating.create)。

1. 将应用程序连接到数据库实例端点。

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

1. （可选）访问主机以自定义您的软件。

1. 监控 RDS Custom 自动化生成的通知和消息。

## 数据库安装文件
<a name="custom-concept.workflow.db-files"></a>

您对媒体的责任是 Amazon RDS 和 RDS Custom 之间的关键区别。Amazon RDS 是一项完全托管式服务，提供亚马逊机器映像（AMI）和数据库软件。Amazon RDS 数据库软件已预安装，因此您只需选择数据库引擎和版本，然后创建数据库。

对于 RDS Custom，您需要提供自己的媒体。创建自定义引擎版本时，RDS Custom 会安装您提供的媒体。RDS Custom 媒体包含数据库安装文件和补丁。这种服务模型被称为自带媒体 (BYOM)。

## RDS Custom for Oracle 的自定义引擎版本
<a name="custom-concept.workflow.cev"></a>

RDS Custom for Oracle 自定义引擎版本（CEV）是数据库版本和 AMI 的二进制卷快照。原定设置情况下，RDS Custom for Oracle 使用 Amazon EC2 提供的最新 AMI。也可以选择重用现有 IAM。

### CEV 清单
<a name="custom-concept.workflow.cev.install"></a>

从 Oracle 下载 Oracle 数据库安装文件后，将这些文件上传到 Amazon S3 桶。创建 CEV 时，您可以在名为 CEV 清单的 JSON 文档中指定文件名。RDS Custom for Oracle 使用指定的文件和 AMI 来创建您的 CEV。

RDS Custom for Oracle 为每个受支持的 Oracle Database 版本提供 JSON 清单模板以及我们推荐的 .zip 文件。例如，以下模板适用于 19.17.0.0.0 RU。

```
{
    "mediaImportTemplateVersion": "2020-08-14",
    "databaseInstallationFileNames": [
        "V982063-01.zip"
    ],
    "opatchFileNames": [
        "p6880880_190000_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames": [
        "p34419443_190000_Linux-x86-64.zip",
        "p34411846_190000_Linux-x86-64.zip"
    ],
    "otherPatchFileNames": [
        "p28852325_190000_Linux-x86-64.zip",
        "p29997937_190000_Linux-x86-64.zip",
        "p31335037_190000_Linux-x86-64.zip",
        "p32327201_190000_Linux-x86-64.zip",
        "p33613829_190000_Linux-x86-64.zip",
        "p34006614_190000_Linux-x86-64.zip",
        "p34533061_190000_Linux-x86-64.zip",
        "p34533150_190000_Generic.zip",
        "p28730253_190000_Linux-x86-64.zip",
        "p29213893_1917000DBRU_Generic.zip",
        "p33125873_1917000DBRU_Linux-x86-64.zip",
        "p34446152_1917000DBRU_Linux-x86-64.zip"
    ]
}
```

您也可以在 JSON 清单中指定安装参数。例如，您可以为 Oracle 根目录、Oracle 主目录以及 UNIX/Linux 用户和组的 ID 和名称设置非原定设置值。有关更多信息，请参阅 [CEV 清单中的 JSON 字段](custom-cev.preparing.md#custom-cev.preparing.manifest.fields)。

### CEV 命名格式
<a name="custom-concept.workflow.cev.name"></a>

使用客户指定的字符串命名您的 RDS Custom for Oracle CEV。名称格式如下，具体视您的 Oracle Database 版本而定：
+ `19.customized_string`
+ `18.customized_string`
+ `12.2.customized_string`
+ `12.1.customized_string`

您可以使用 1–50 位字母数字字符、下划线、短划线和句点。例如，您可以将 CEV 命名为 `19.my_cev1`。

### RDS Custom for Oracle 中的 Oracle 多租户架构
<a name="custom-concept.workflow.cev.multitenant"></a>

Oracle 多租户架构使 Oracle 数据库能够作为容器数据库（CDB）使用。CDB 包括零个、一个或多个客户创建的可插拔数据库（PDB）。PDB 是模式和对象的可移植集合，在应用程序看来为传统非 CDB。

创建 RDS Custom for Oracle CEV，您需要指定 CDB 或非 CDB 架构。只有当您用来创建 RDS Custom for Oracle CDB 的 CEV 使用 Oracle 多租户架构时，您才能创建此 CDB。有关更多信息，请参阅 [使用 Amazon RDS Custom for Oracle 的自定义引擎版本](custom-cev.md)。

## 为 RDS Custom for Oracle 创建数据库实例
<a name="custom-concept.workflow.instance"></a>

当您创建 CEV 后，CEV 可供使用。您可以创建多个 CEV，并可以从任何 CEV 中创建多个 RDS Custom for Oracle 数据库实例。您还可以更改 CEV 的状态以使其可用或处于非活动状态。

您可以使用 Oracle 多租户架构（`custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb` 引擎类型）或传统的非 CDB 架构（`custom-oracle-ee` 或 `custom-oracle-se2` 引擎类型）创建 RDS Custom for Oracle 数据库实例。创建容器数据库（CDB）时，它包含一个可插拔数据库（PDB）和一个 PDB 种子。您可以使用 Oracle SQL 手动创建其他 PDB。

要创建 RDS Custom for Oracle 数据库实例，请使用 `create-db-instance` 命令。在此命令中，指定要使用哪个 CEV。该过程与创建 Amazon RDS 数据库实例类似。但是，有些参数是不同的。有关更多信息，请参阅 [为 Amazon RDS Custom for Oracle 配置数据库实例](custom-creating.md)。

## 数据库连接
<a name="custom-concept.workflow.db-connection"></a>

与 Amazon RDS 数据库实例一样，RDS Custom 数据库实例驻留在虚拟私有云（VPC）中。您的应用程序使用 Oracle 侦听器连接到 Oracle 数据库。

如果您的数据库是 CDB，则可以使用侦听器 `L_RDSCDB_001` 连接到 CDB 根目录和 PDB。如果您将非 CDB 插入 CDB，请务必设置 `USE_SID_AS_SERVICE_LISTENER = ON`，以便迁移的应用程序保持相同的设置。

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

## RDS Custom 自定义
<a name="custom-concept.workflow.db-customization"></a>

您可以访问 RDS Custom 主机来安装或自定义软件。为避免更改与 RDS Custom 自动化之间发生冲突，您可以在指定的时间内暂停自动化。在此期间，RDS Custom 不执行监控或实例恢复。在此时期结束时，RDS Custom 将恢复完全自动化。有关更多信息，请参阅 [暂停和恢复 RDS Custom 数据库实例](custom-managing.customizing-env.md#custom-managing.pausing)。

# Amazon RDS Custom for Oracle 的数据库架构
<a name="custom-oracle.db-architecture"></a>

RDS Custom for Oracle 同时支持 Oracle 多租户和非多租户架构。

**Topics**
+ [支持的 Oracle 数据库架构](#custom-oracle.db-architecture.types)
+ [支持的引擎类型](#custom-oracle.db-architecture.engine-types)
+ [Oracle 多租户架构中支持的特征](#custom-oracle.db-architecture.features)

## 支持的 Oracle 数据库架构
<a name="custom-oracle.db-architecture.types"></a>

Oracle 多租户架构（也称为 CDB 架构）使 Oracle 数据库能够作为容器数据库（CDB）使用。CDB 包括可插拔数据库（PDB）。PDB 是模式和对象的集合，在应用程序看来是传统的 Oracle 数据库。有关更多信息，请参阅《Oracle 多租户管理员指南》**中的[多租户架构简介](https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/introduction-to-the-multitenant-architecture.html)。

CDB 架构和非 CDB 架构是互斥的。如果数据库不是 CDB，则是非 CDB，因此不能包含 PDB。在 RDS Custom for Oracle 中，只有 Oracle Database 19c 支持 CDB 架构。因此，如果您使用以前的 Oracle 数据库版本创建数据库实例，则只能创建非 CDB。有关更多信息，请参阅 [多租户架构注意事项](custom-creating.md#custom-creating.overview)。

## 支持的引擎类型
<a name="custom-oracle.db-architecture.engine-types"></a>

当您创建 Amazon RDS Custom for Oracle CEV 或数据库实例时，请选择 CDB 引擎类型或非 CDB 引擎类型：
+ `custom-oracle-ee-cdb`和`custom-oracle-se2-cdb`

  这些引擎类型指定了 Oracle 多租户架构。此选项仅适用于 Oracle Database 19c。当您使用多租户架构创建 RDS for Oracle 数据库实例时，您的 CDB 包含以下容器：
  + CDB 根目录（`CDB$ROOT`）
  + PDB 种子（`PDB$SEED`）
  + 初始 PDB

  您可以使用 Oracle SQL 命令 `CREATE PLUGGABLE DATABASE` 创建更多 PDB。您不能使用 RDS API 创建或删除 PDB。
+ `custom-oracle-ee`和`custom-oracle-se2`

  这些引擎类型指定了传统的非 CDB 架构。非 CDB 不能包含可插拔数据库（PDB）。

有关更多信息，请参阅 [多租户架构注意事项](custom-creating.md#custom-creating.overview)。

## Oracle 多租户架构中支持的特征
<a name="custom-oracle.db-architecture.features"></a>

RDS Custom for Oracle CDB 实例支持以下功能：
+ 备份
+ 从备份中还原和时间点还原（PITR）
+ 只读副本
+ 次要版本升级

# RDS Custom for Oracle 的功能可用性和支持
<a name="custom-oracle-feature-support"></a>

在本主题中，您可以查找 RDS Custom for Oracle 功能可用性和支持的摘要以便快速参考。

**Topics**
+ [RDS Custom for Oracle 的 AWS 区域和数据库版本支持](#custom-reqs-limits.RegionVersionAvailability)
+ [RDS Custom for Oracle 的数据库版本支持](#custom-reqs-limits.db-version)
+ [RDS Custom for Oracle 的版本和许可支持](#custom-oracle-feature-support.editions)
+ [RDS Custom for Oracle 的数据库实例类支持](#custom-reqs-limits.instances)
+ [RDS Custom for Oracle 的选项组支持](#custom-oracle-feature-support.option-groups)

## RDS Custom for Oracle 的 AWS 区域和数据库版本支持
<a name="custom-reqs-limits.RegionVersionAvailability"></a>

功能可用性和支持因每个数据库引擎的特定版本以及 AWS 区域而异。有关 RDS Custom for Oracle 的版本和区域可用性的更多信息，请参阅[支持 RDS Custom 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md)。

## RDS Custom for Oracle 的数据库版本支持
<a name="custom-reqs-limits.db-version"></a>

RDS Custom for Oracle 支持以下 Oracle 数据库版本：
+ Oracle Database 19c
+ Oracle Database 18c
+ Oracle Database 12c 第 2 版 (12.2)
+ Oracle Database 12c 第 1 版 (12.1)

## RDS Custom for Oracle 的版本和许可支持
<a name="custom-oracle-feature-support.editions"></a>

RDS Custom for Oracle 在 BYOL 模型上支持 Enterprise Edition（EE）和 Standard Edition 2（SE2）。

请注意 Standard Edition 2 的以下限制：
+ 不支持 Oracle Data Guard。因此，您无法创建 Oracle 只读副本。
+ 您只能使用具有 16 个或更少 vCPU 的数据库实例类（最多 4 倍大小）。
+ Standard Edition 2 上的 CDB 实例最多支持 3 个租户数据库。
+ 您无法在 Enterprise Edition 和 Standard Edition 2 之间迁移数据。

## RDS Custom for Oracle 的数据库实例类支持
<a name="custom-reqs-limits.instances"></a>

RDS Custom for Oracle 支持以下数据库实例类。如果您在 Standard Edition 2 上创建数据库实例，则只能使用具有 16 个或更少 vCPU 的实例类（最多 4 倍大小）。


| 类型 | 大小 | 
| --- | --- | 
| db.m7i | db.m7i.large \$1 db.m7i.xlarge \$1 db.m7i.2xlarge \$1 db.m7i.4xlarge \$1 db.m7i.8xlarge \$1 db.m7i.12xlarge \$1 db.m7i.16xlarge \$1 db.m7i.24xlarge \$1 db.m7i.48xlarge \$1 db.m7i.metal-24xl \$1 db.m7i.metal-48xl | 
| db.m6i | db.m6i.large \$1 db.m6i.xlarge \$1 db.m6i.2xlarge \$1 db.m6i.4xlarge \$1 db.m6i.8xlarge \$1 db.m6i.12xlarge \$1 db.m6i.16xlarge \$1 db.m6i.24xlarge \$1 db.m6i.32xlarge \$1 db.m6i.metal | 
| db.m6id | db.m6id.metal | 
| db.m6in | db.m6in.metal | 
| db.m5 | db.m5.large \$1 db.m5.xlarge \$1 db.m5.2xlarge \$1 db.m5.4xlarge \$1 db.m5.8xlarge \$1 db.m5.12xlarge \$1 db.m5.16xlarge \$1 db.m5.24xlarge | 
| db.r7i | db.r7i.large \$1 db.r7i.xlarge \$1 db.r7i.2xlarge \$1 db.r7i.4xlarge \$1 db.r7i.8xlarge \$1 db.r7i.12xlarge \$1 db.r7i.16xlarge \$1 db.r7i.24xlarge \$1 db.r7i.48xlarge \$1 db.r7i.metal-24xl \$1 db.r7i.metal-48xl | 
| db.r6i | db.r6i.large \$1 db.r6i.xlarge \$1 db.r6i.2xlarge \$1 db.r6i.4xlarge \$1 db.r6i.8xlarge \$1 db.r6i.12xlarge \$1 db.r6i.16xlarge \$1 db.r6i.24xlarge \$1 db.r6i.32xlarge \$1 db.r6i.metal | 
| db.r6id | db.r6id.metal | 
| db.r6in | db.r6in.metal | 
| db.r5b | db.r5b.large \$1 db.r5b.xlarge \$1 db.r5b.2xlarge \$1 db.r5b.4xlarge \$1 db.r5b.8xlarge \$1 db.r5b.12xlarge \$1 db.r5b.16xlarge \$1 db.r5b.24xlarge | 
| db.r5 | db.r5.large \$1 db.r5.xlarge \$1 db.r5.2xlarge \$1 db.r5.4xlarge \$1 db.r5.8xlarge \$1 db.r5.12xlarge \$1 db.r5.16xlarge \$1 db.r5.24xlarge | 
| db.x2iedn | db.x2iedn.xlarge \$1 db.x2iedn.2xlarge \$1 db.x2iedn.4xlarge \$1 db.x2iedn.8xlarge \$1 db.x2iedn.16xlarge \$1 db.x2iedn.24xlarge \$1 db.x2iedn.32xlarge \$1 db.x2iedn.metal | 
| db.x2idn | db.x2idn.metal | 
| db.x2iezn | db.x2iezn.2xlarge \$1 db.x2iezn.4xlarge \$1 db.x2iezn.6xlarge \$1 db.x2iezn.8xlarge \$1 db.x2iezn.12xlarge \$1 db.x2iezn.metal | 
| db.t3 | db.t3.medium \$1 db.t3.large \$1 db.t3.xlarge \$1 db.t3.2xlarge | 

## RDS Custom for Oracle 的选项组支持
<a name="custom-oracle-feature-support.option-groups"></a>

您可以在创建或修改 RDS Custom for Oracle 数据库实例时指定选项组。有关更多信息，请参阅 [使用 RDS Custom for Oracle 中的选项组](custom-oracle-option-groups.md)。

# RDS Custom for Oracle 的要求和限制
<a name="custom-reqs-limits"></a>

在本主题中，您可以查找 Amazon RDS Custom for Oracle 功能可用性和要求的摘要以便快速参考。

**Topics**
+ [RDS Custom for Oracle 的一般要求](#custom-reqs-limits.reqs)
+ [RDS Custom for Oracle 的一般限制](#custom-reqs-limits.limits)
+ [RDS Custom for Oracle 的 CEV 和 AMI 限制](#custom-reqs-limits.cev-limits)
+ [创建和修改工作流程的不受支持的设置](#custom-reqs-limits.unsupported-settings)
+ [您的 AWS 账户的数据库实例限额](#custom-reqs-limits.quotas)

## RDS Custom for Oracle 的一般要求
<a name="custom-reqs-limits.reqs"></a>

确保符合 Amazon RDS Custom for Oracle 的以下要求：
+ 您应有权访问[我的 Oracle 支持](https://support.oracle.com/portal/)和 [Oracle 软件传输云](https://edelivery.oracle.com/osdc/faces/Home.jspx)以下载 RDS Custom for Oracle 支持的安装文件和补丁列表。如果您使用未知的补丁程序，则自定义引擎版本 (CEV) 将创建失败。在这种情况下，请联系 RDS Custom 支持团队并要求添加缺少的补丁程序。有关更多信息，请参阅 [步骤 2：从 Oracle 软件传输云下载数据库安装文件和补丁](custom-cev.preparing.md#custom-cev.preparing.download)。
+ 您对 Amazon S3 具有访问权限。您需要此服务的原因如下：
  + 您将 Oracle 安装文件上传到 S3 桶。您可以使用上传的安装文件创建 RDS Custom CEV。
  + RDS Custom for Oracle 使用从内部定义的 S3 桶下载的脚本对数据库实例执行操作。这些脚本是入门和 RDS Custom 自动化所必需的。
  + RDS Custom for Oracle 将某些文件上传到位于您的客户账户中的 S3 存储桶。这些存储桶使用以下命名格式：`do-not-delete-rds-custom-`*account\$1id*-*region*-*uuid*。例如，您可能有一个名为 `do-not-delete-rds-custom-123456789012-us-east-1-12a3b4` 的存储桶。

  有关更多信息，请参阅[步骤 3：将安装文件上传到 Amazon S3](custom-cev.preparing.md#custom-cev.preparing.s3)和[创建 CEV](custom-cev.create.md)。
+ 您可以使用[RDS Custom for Oracle 的数据库实例类支持](custom-oracle-feature-support.md#custom-reqs-limits.instances)中列出的数据库实例类创建 RDS Custom for Oracle 数据库实例。
+ 您的 RDS Custom for Oracle 数据库实例运行 Oracle Linux 8（建议）或 Oracle Linux 7。如果您需要 Oracle Linux 7，请联系 支持。有关更多信息，请参阅 [RDS Custom for Oracle 数据库升级注意事项](custom-upgrading-considerations.md)。
+ 您指定使用 gp2、gp3 或 io1 固态驱动器进行 Amazon EBS 存储。最大存储大小为 64TiB。
+ 您拥有创建 RDS Custom for Oracle 数据库实例的 AWS KMS 密钥。有关更多信息，请参阅 [步骤 1：创建或重用对称加密 AWS KMS 密钥](custom-setup-orcl.md#custom-setup-orcl.cmk)。
+ 您拥有创建 RDS Custom for Oracle 数据库实例所需的 AWS Identity and Access Management（IAM）角色和实例配置文件。有关更多信息，请参阅 [步骤 4：为 RDS Custom for Oracle 配置 IAM](custom-setup-orcl.md#custom-setup-orcl.iam-vpc)。
+ 创建 CEV 或 RDS Custom 数据库实例的 AWS Identity and Access Management (IAM) 用户具有 IAM、CloudTrail 和 Amazon S3 所需的权限。

  有关更多信息，请参阅 [步骤 5：为您的 IAM 用户或角色授予所需的权限](custom-setup-orcl.md#custom-setup-orcl.iam-user)。
+ 您可以提供自己的 Virtual Private Cloud (VPC) 和安全组配置。有关更多信息，请参阅 [步骤 6：为 RDS Custom for Oracle 配置 VPC](custom-setup-orcl.md#custom-setup-orc.vpc-config)。
+ 您提供 RDS Custom for Oracle 可用于访问其它 AWS 服务的网络配置。有关特定要求，请参阅 [步骤 4：为 RDS Custom for Oracle 配置 IAM](custom-setup-orcl.md#custom-setup-orcl.iam-vpc)。

## RDS Custom for Oracle 的一般限制
<a name="custom-reqs-limits.limits"></a>

以下限制适用于 RDS Custom for Oracle：
+ 您无法修改现有 RDS Custom for Oracle 数据库实例的数据库实例标识符。
+ 您无法为 Oracle Database 19c 以外的任何版本指定 Oracle 多租户架构。
+ 您无法在单个 RDS Custom for Oracle 数据库实例上创建多个 Oracle 数据库。
+ 您无法停止 RDS Custom for Oracle 数据库实例或其底层 Amazon EC2 实例。无法停止 RDS Custom for Oracle 数据库实例的计费。
+ 您无法使用自动共享内存管理功能，因为 RDS Custom for Oracle 仅支持自动内存管理。有关更多信息，请参阅《Oracle 数据库管理员指南》**中的[自动内存管理](https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-memory.html#GUID-04EFED7D-D1F1-43C3-B78F-0FF9AFAC02B0)。
+ 确保不要更改主数据库实例的 `DB_UNIQUE_NAME`。更改名称会导致任何还原操作卡住。
+ 在同一区域内，不能同时制作超过 20 个快照副本。
+ 您无法将 `describe-reserved-db-instances` API 用于 RDS Custom for Oracle 数据库实例。

有关修改 RDS Custom for Oracle 数据库实例的具体限制，请参阅[修改 RDS Custom for Oracle 数据库实例](custom-managing.modifying.md)。有关复制限制，请参阅[RDS Custom for Oracle 复制的一般限制](custom-rr.reqs-limitations.md#custom-rr.limitations)。

## RDS Custom for Oracle 的 CEV 和 AMI 限制
<a name="custom-reqs-limits.cev-limits"></a>

以下限制适用于 RDS Custom for Oracle CEV 和 AMI：
+ 您不能提供自己的 AMI 以在 RDS Custom for Oracle CEV 中使用。您可以指定使用 Oracle Linux 8 的默认 AMI，也可以指定 RDS Custom for Oracle CEV 以前使用过的 AMI。
**注意**  
当发现常见漏洞时，RDS Custom for Oracle 会发布新的默认 AMI。没有固定的时间表可用或提供保证。RDS Custom for Oracle 通常每 30 天发布一次新的默认 AMI。
+ 您无法修改 CEV 以使用其他 AMI。
+ 您无法从使用 `custom-oracle-ee` 或 `custom-oracle-se2` 引擎类型的 CEV 创建 CDB 实例。CEV 必须使用 `custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb`。
+ RDS Custom for Oracle 目前不允许您通过 RDS API 调用升级 RDS Custom for Oracle 数据库实例的操作系统。作为一种解决方法，您可以使用以下命令手动更新操作系统：`sudo yum update --security`。

## 创建和修改工作流程的不受支持的设置
<a name="custom-reqs-limits.unsupported-settings"></a>

当您创建或修改 RDS Custom for Oracle 数据库实例时，您无法执行以下操作：
+ 更改数据库实例类中的 CPU 内核数和每个内核的线程数。
+ 启用存储弹性伸缩。
+ 将备份保留期设置为 `0`。
+ 配置 Kerberos 身份验证。
+ 指定自己的数据库参数组或选项组。
+ 开启性能详情。
+ 开启自动次要版本升级。

## 您的 AWS 账户的数据库实例限额
<a name="custom-reqs-limits.quotas"></a>

确保 RDS Custom 和 Amazon RDS 数据库实例的总数不超过您的配额限制。例如，如果您的 Amazon RDS 配额为 40 个数据库实例，则可以有 20 个 RDS Custom for Oracle 数据库实例和 20 个 Amazon RDS 数据库实例。

# 为 Amazon RDS Custom for Oracle 设置您的环境
<a name="custom-setup-orcl"></a>

在创建 Amazon RDS Custom for Oracle 数据库实例之前，请执行以下任务。

**Topics**
+ [步骤 1：创建或重用对称加密 AWS KMS 密钥](#custom-setup-orcl.cmk)
+ [步骤 2：下载并安装 AWS CLI](#custom-setup-orcl.cli)
+ [步骤 3：提取 RDS Custom for Oracle 的 CloudFormation 模板](#custom-setup-orcl.cf.downloading)
+ [步骤 4：为 RDS Custom for Oracle 配置 IAM](#custom-setup-orcl.iam-vpc)
+ [步骤 5：为您的 IAM 用户或角色授予所需的权限](#custom-setup-orcl.iam-user)
+ [步骤 6：为 RDS Custom for Oracle 配置 VPC](#custom-setup-orc.vpc-config)

## 步骤 1：创建或重用对称加密 AWS KMS 密钥
<a name="custom-setup-orcl.cmk"></a>

*客户托管密钥*是您的 AWS 账户中由您创建、拥有和管理的 AWS KMS keys。RDS Custom 需要客户自主管理型对称加密 KMS 密钥。创建 RDS Custom for Oracle 数据库实例时，您需要提供 KMS 密钥标识符。有关更多信息，请参阅 [为 Amazon RDS Custom for Oracle 配置数据库实例](custom-creating.md)。

您有以下选项：
+ 如果您的 AWS 账户中有现有的客户自主管理型 KMS 密钥，则可以将其与 RDS Custom 一起使用。无需进一步操作。
+ 如果您已经为不同的 RDS Custom 引擎创建了客户自主管理型对称加密 KMS 密钥，可以重用相同的 KMS 密钥。无需进一步操作。
+ 如果您的账户中没有现有的客户自主管理型对称加密 KMS 密钥，请按照《AWS Key Management Service 开发人员指南》**的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)中的说明创建一个 KMS 密钥。
+ 如果您正在创建 CEV 或 RDS Custom 数据库实例，而您的 KMS 密钥位于其他 AWS 账户 中，请务必使用 AWS CLI。您不能将 AWS 控制台与跨账户 KMS 密钥一起使用。

**重要**  
RDS Custom 不支持 AWS 托管式 KMS 密钥。

确保您的对称加密密钥为 IAM 实例配置文件中的 `kms:Decrypt`（IAM）角色授予对 `kms:GenerateDataKey` 和 AWS Identity and Access Management 操作的访问权限。如果您的账户中有一个新的对称加密密钥，不需要进行任何更改。否则，请确保对称加密密钥的策略授予对这些操作的访问权限。

有关更多信息，请参阅 [步骤 4：为 RDS Custom for Oracle 配置 IAM](#custom-setup-orcl.iam-vpc)。

有关为 RDS Custom for Oracle 配置 IAM 的更多信息，请参阅[步骤 4：为 RDS Custom for Oracle 配置 IAM](#custom-setup-orcl.iam-vpc)。

## 步骤 2：下载并安装 AWS CLI
<a name="custom-setup-orcl.cli"></a>

AWS 为您提供了命令行界面以使用 RDS Custom 功能。您可以使用 AWS CLI 的版本 1 或版本 2。

有关下载和安装 AWS CLI 的信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

如果满足以下任一条件，请跳过此步骤：
+ 您计划仅从 AWS 管理控制台访问 RDS Custom。
+ 您已为 Amazon RDS 或其他 RDS Custom 数据库引擎下载了 AWS CLI。

## 步骤 3：提取 RDS Custom for Oracle 的 CloudFormation 模板
<a name="custom-setup-orcl.cf.downloading"></a>

为了简化设置，我们强烈建议您使用 CloudFormation 模板创建 CloudFormation 堆栈。如果您计划手动配置 IAM 和 VPC，请跳过此步骤。

**Topics**
+ [步骤 3a：下载 CloudFormation 模板文件](#custom-setup-orcl.cf.dl-templates)
+ [步骤 3b：提取 custom-oracle-iam.json](#custom-setup-orcl.cf.downloading.ca-role)
+ [步骤 3c：提取 custom-vpc.json](#custom-setup-orcl.cf.downloading.ca-pn)

### 步骤 3a：下载 CloudFormation 模板文件
<a name="custom-setup-orcl.cf.dl-templates"></a>

CloudFormation 模板是对构成堆栈的 AWS 资源的声明。此模板存储为 JSON 文件。

**下载 CloudFormation 模板文件**

1. 打开链接 [custom-oracle-iam.zip](samples/custom-oracle-iam.zip) 的上下文（右键单击）菜单，然后选择 **Save Link As**（将链接另存为）。

1. 将该文件保存到您的计算机。

1. 对于链接 [custom-vpc.zip](samples/custom-vpc.zip) 重复之前的步骤。

   如果您已经配置了适用于 RDS Custom 的 VPC，请跳过此步骤。

### 步骤 3b：提取 custom-oracle-iam.json
<a name="custom-setup-orcl.cf.downloading.ca-role"></a>

打开您下载的 `custom-oracle-iam.zip` 文件，然后解压缩文件 `custom-oracle-iam.json`。文件的开头如下所示。

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "EncryptionKey": {
      "Type": "String",
      "Default": "*",
      "Description": "KMS Key ARN for encryption of data managed by RDS Custom and by DB Instances."
    }
  },
  "Resources": {
    "RDSCustomInstanceServiceRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": { "Fn::Sub": "AWSRDSCustomInstanceRole-${AWS::Region}" },
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "ec2.amazonaws.com"
              }
            }
          ]
        },...
```

### 步骤 3c：提取 custom-vpc.json
<a name="custom-setup-orcl.cf.downloading.ca-pn"></a>

**注意**  
如果您为 RDS Custom for Oracle 配置了现有 VPC，则跳过此步骤。有关更多信息，请参阅 [为 RDS Custom for Oracle 手动配置 VPC](#custom-setup-orcl.vpc)。

打开您下载的 `custom-vpc.zip` 文件，然后解压缩文件 `custom-vpc.json`。文件的开头如下所示。

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "PrivateVpc": {
      "Type": "AWS::EC2::VPC::Id",
      "Description": "Private VPC Id to use for RDS Custom DB Instances"
    },
    "PrivateSubnets": {
      "Type": "List<AWS::EC2::Subnet::Id>",
      "Description": "Private Subnets to use for RDS Custom DB Instances"
    },
    "RouteTable": {
      "Type": "String",
      "Description": "Route Table that must be associated with the PrivateSubnets and used by S3 VPC Endpoint",
      "AllowedPattern": "rtb-[0-9a-z]+"
    }
  },
  "Resources": {
    "DBSubnetGroup": {
      "Type": "AWS::RDS::DBSubnetGroup",
      "Properties": {
        "DBSubnetGroupName": "rds-custom-private",
        "DBSubnetGroupDescription": "RDS Custom Private Network",
        "SubnetIds": {
          "Ref": "PrivateSubnets"
        }
      }
    },...
```

## 步骤 4：为 RDS Custom for Oracle 配置 IAM
<a name="custom-setup-orcl.iam-vpc"></a>

您使用 IAM 角色或 IAM 用户（称为 IAM 实体），通过控制台或 AWS CLI 创建 RDS Custom 数据库实例。此 IAM 实体必须具有创建实例所需的权限。

您可以使用 CloudFormation 或手动步骤配置 IAM。

**重要**  
强烈建议您使用 CloudFormation 配置您的 RDS Custom for Oracle 环境。这种技术最简单，最不容易出错。

**Topics**
+ [使用 CloudFormation 配置 IAM](#custom-setup-orcl.cf.config-iam)
+ [手动创建您的 IAM 角色和实例配置文件](#custom-setup-orcl.iam)

### 使用 CloudFormation 配置 IAM
<a name="custom-setup-orcl.cf.config-iam"></a>

当您对 IAM 使用 CloudFormation 模板时，该模板会创建以下必需的资源：
+ 名为 `AWSRDSCustomInstanceProfile-region` 的实例配置文件
+ 一个名为 `AWSRDSCustomInstanceRole-region` 的服务角色
+ 附加到服务角色的名为 `AWSRDSCustomIamRolePolicy` 的访问策略

**要采用 CloudFormation 配置 IAM**

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

1. 开启 Create Stack（创建堆栈）向导，然后选择 **Create Stack**（创建堆栈）。

1. 在 **Create stack**（创建堆栈）页面上，执行以下操作：

   1. 对于 **Prepare template**（准备模板），选择 **Template is ready**（模板就绪）。

   1. 对于 **Template source**(模板来源)，选择 **Upload a template file**(上载模板文件)。

   1. 对于**选择文件**，请导航到 **custom-oracle-iam.json** 并选择此文件。

   1. 选择**下一步**。

1. 在 **Specify stack details**（指定堆栈详细信息）页面中，请执行以下操作：

   1. 对于**堆栈名称**，输入 **custom-oracle-iam**。

   1. 选择 **Next**(下一步)。

1. 在**配置堆栈选项**页面上，请选择**下一步**。

1. 在 **Review custom-oracle-iam**（查看 custom-oracle-iam）页面上，请执行以下操作：

   1. 选中****我确认 CloudFormation 可能使用自定义名称创建 IAM 资源****复选框。

   1. 选择**提交**。

   CloudFormation 创建 RDS Custom for Oracle 所需的 IAM 角色。在左侧面板中，当 **custom-oracle-iam** 显示 **CREATE\$1COMPLETE** 时，继续执行下一步。

1. 在左侧面板中，选择 **custom-oracle-iam**。在右侧面板中，执行以下操作：

   1. 选择**堆栈信息**。堆栈的 ID 格式为：**arn:aws:cloudformation:*region*:*account-no*:stack/custom-oracle-iam/*identifier***。

   1. 选择**资源**。您将看到以下内容：
      + 名为 **AWSRDSCustomInstanceProfile-*region*** 的实例配置文件
      + 名为 **AWSRDSCustomInstanceRole-*region*** 的服务角色

      创建 RDS Custom 数据库实例时，您需要提供实例配置文件 ID。

### 手动创建您的 IAM 角色和实例配置文件
<a name="custom-setup-orcl.iam"></a>

使用 CloudFormation 时，配置是最简单的。但是，您还可以手动配置 IAM。对于手动设置，请执行以下操作：
+ [步骤 1：创建 IAM 角色 AWSRDSCustomInstanceRoleForRdsCustomInstance](#custom-setup-orcl.iam.create-role).
+ [步骤 2：将访问策略添加到 AWSRDSCustomInstanceRoleForRdsCustomInstance 中](#custom-setup-orcl.iam.add-policy).
+ [步骤 2：将访问策略添加到 AWSRDSCustomInstanceRoleForRdsCustomInstance 中](#custom-setup-orcl.iam.create-profile).
+ [步骤 4：将 AWSRDSCustomInstanceRoleForRdsCustomInstance 添加到 AWSRDSCustomInstanceProfile](#custom-setup-orcl.iam.add-profile).

#### 步骤 1：创建 IAM 角色 AWSRDSCustomInstanceRoleForRdsCustomInstance
<a name="custom-setup-orcl.iam.create-role"></a>

在此步骤中，您将使用命名格式 `AWSRDSCustomInstanceRole-region` 创建角色。使用信任策略，以便 Amazon EC2 可以代入该角色。以下示例假设您已将环境变量 `$REGION` 设置为要在其中创建数据库实例的 AWS 区域。

```
aws iam create-role \
  --role-name AWSRDSCustomInstanceRole-$REGION \
  --assume-role-policy-document '{
    "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
              "Service": "ec2.amazonaws.com"
          }
        }
      ]
    }'
```

#### 步骤 2：将访问策略添加到 AWSRDSCustomInstanceRoleForRdsCustomInstance 中
<a name="custom-setup-orcl.iam.add-policy"></a>

在将内联策略嵌入 IAM 角色中时，内联策略将用作角色的访问（权限）策略的一部分。您将创建 `AWSRDSCustomIamRolePolicy` 策略，以允许 Amazon EC2 发送和接收消息，以及执行各种操作。

以下示例创建 `AWSRDSCustomIamRolePolicy` 名为的访问策略，然后将其添加到 IAM 角色 `AWSRDSCustomInstanceRole-region`。此示例假定您已设置以下环境变量：

`$REGION`  
将此变量设置为您计划在其中创建数据库实例的 AWS 区域。

`$ACCOUNT_ID`  
将此变量设置为您的 AWS 账户号码。

`$KMS_KEY`  
将此变量设置为您要用于 RDS Custom 数据库实例的 AWS KMS key 的 Amazon 资源名称（ARN）。要指定多个 KMS 密钥，请将其添加到语句 ID (Sid) 11 的 `Resources` 部分。

```
aws iam put-role-policy \
  --role-name AWSRDSCustomInstanceRole-$REGION \
  --policy-name AWSRDSCustomIamRolePolicy \
  --policy-document '{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeAssociation",
                "ssm:GetDeployablePatchSnapshotForInstance",
                "ssm:GetDocument",
                "ssm:DescribeDocument",
                "ssm:GetManifest",
                "ssm:GetParameter",
                "ssm:GetParameters",
                "ssm:ListAssociations",
                "ssm:ListInstanceAssociations",
                "ssm:PutInventory",
                "ssm:PutComplianceItems",
                "ssm:PutConfigurePackageResult",
                "ssm:UpdateAssociationStatus",
                "ssm:UpdateInstanceAssociationStatus",
                "ssm:UpdateInstanceInformation",
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceInformation",
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "2",
            "Effect": "Allow",
            "Action": [
                "ec2messages:AcknowledgeMessage",
                "ec2messages:DeleteMessage",
                "ec2messages:FailMessage",
                "ec2messages:GetEndpoint",
                "ec2messages:GetMessages",
                "ec2messages:SendReply"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "3",
            "Effect": "Allow",
            "Action": [
                "logs:PutRetentionPolicy",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams",
                "logs:DescribeLogGroups",
                "logs:CreateLogStream",
                "logs:CreateLogGroup"
            ],
            "Resource": [
                "arn:aws:logs:'$REGION':'$ACCOUNT_ID':log-group:rds-custom-instance*"
            ]
        },
        {
            "Sid": "4",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::do-not-delete-rds-custom-*/*"
            ]
        },
        {
            "Sid": "5",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": [
                        "RDSCustomForOracle/Agent"
                    ]
                }
            }
        },
        {
            "Sid": "6",
            "Effect": "Allow",
            "Action": [
                "events:PutEvents"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "7",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": [
                "arn:aws:secretsmanager:'$REGION':'$ACCOUNT_ID':secret:do-not-delete-rds-custom-*",
                "arn:aws:secretsmanager:'$REGION':'$ACCOUNT_ID':secret:rds-custom!oracle-do-not-delete-*"
            ]
        },
        {
           "Sid": "8",
           "Effect": "Allow",
           "Action": [
             "s3:ListBucketVersions"
           ],
           "Resource": [
             "arn:aws:s3:::do-not-delete-rds-custom-*"
           ]
         },
         {
            "Sid": "9",
            "Effect": "Allow",
            "Action": "ec2:CreateSnapshots",
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/AWSRDSCustom": "custom-oracle"
                }
            }
          },
          {
            "Sid": "10",
            "Effect": "Allow",
            "Action": "ec2:CreateSnapshots",
            "Resource": [
                "arn:aws:ec2:*::snapshot/*"
            ]
          },
          {
            "Sid": "11",
            "Effect": "Allow",
            "Action": [
              "kms:Decrypt",
              "kms:GenerateDataKey"
            ],
            "Resource": [
              "arn:aws:kms:'$REGION':'$ACCOUNT_ID':key/'$KMS_KEY'"
            ]
          },
          {
            "Sid": "12",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "ec2:CreateAction": [
                        "CreateSnapshots"
                    ]
                }
            }
        },
        {
            "Sid": "13",
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessage",
                "sqs:ReceiveMessage",
                "sqs:DeleteMessage",
                "sqs:GetQueueUrl"
            ],
            "Resource": "arn:aws:sqs:'$REGION':'$ACCOUNT_Id':do-not-delete-rds-custom-*",
            "Condition": {
                "StringLike": {
                    "aws:ResourceTag/AWSRDSCustom": "custom-oracle"
                }
            }
        }
    ]
}'
```

#### 步骤 3：创建 RDS Custom 实例配置文件 AWSRDSCustomInstanceProfile
<a name="custom-setup-orcl.iam.create-profile"></a>

实例配置文件是包含单个 IAM 角色的容器。RDS Custom 使用实例配置文件将角色传递给实例。

如果您使用 CLI 创建角色，则是以单独操作的形式创建角色和实例配置文件，可以为它们提供不同的名称。按如下方式创建您的 IAM 实例配置文件，并使用格式 `AWSRDSCustomInstanceProfile-region` 对该配置文件命名。以下示例假设您已将环境变量 `$REGION` 设置为要在其中创建数据库实例的 AWS 区域。

```
aws iam create-instance-profile \
    --instance-profile-name AWSRDSCustomInstanceProfile-$REGION
```

#### 步骤 4：将 AWSRDSCustomInstanceRoleForRdsCustomInstance 添加到 AWSRDSCustomInstanceProfile
<a name="custom-setup-orcl.iam.add-profile"></a>

将您的 IAM 角色添加到您之前创建的实例配置文件。以下示例假设您已将环境变量 `$REGION` 设置为要在其中创建数据库实例的 AWS 区域。

```
aws iam add-role-to-instance-profile \
    --instance-profile-name AWSRDSCustomInstanceProfile-$REGION \
    --role-name AWSRDSCustomInstanceRole-$REGION
```

## 步骤 5：为您的 IAM 用户或角色授予所需的权限
<a name="custom-setup-orcl.iam-user"></a>

确保创建 CEV 或 RDS Custom 数据库实例的 IAM 主体（用户或角色）具有以下任一策略：
+ `AdministratorAccess` 策略
+ 具有 Amazon S3 和 AWS KMS、CEV 创建和数据库实例创建所需权限的 `AmazonRDSFullAccess` 策略

**Topics**
+ [Amazon S3 和 AWS KMS 所需的 IAM 权限](#custom-setup-orcl.s3-kms)
+ [创建 CEV 所需的 IAM 权限](#custom-setup-orcl.cev)
+ [从 CEV 创建数据库实例所需的 IAM 权限](#custom-setup-orcl.db)

### Amazon S3 和 AWS KMS 所需的 IAM 权限
<a name="custom-setup-orcl.s3-kms"></a>

要创建 CEV 或 RDS Custom for Oracle 数据库实例，IAM 主体需要访问 Amazon S3 和 AWS KMS。以下示例 JSON 策略授予所需的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateS3Bucket",
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:PutBucketPolicy",
                "s3:PutBucketObjectLockConfiguration",
                "s3:PutBucketVersioning"
            ],
            "Resource": "arn:aws:s3:::do-not-delete-rds-custom-*"
        },
        {
            "Sid": "CreateKmsGrant",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        }
    ]
}
```

------

有关 `kms:CreateGrant` 权限的更多信息，请参阅 [AWS KMS key 管理](Overview.Encryption.Keys.md)。

### 创建 CEV 所需的 IAM 权限
<a name="custom-setup-orcl.cev"></a>

要创建 CEV，IAM 主体需要以下额外权限：

```
s3:GetObjectAcl
s3:GetObject
s3:GetObjectTagging
s3:ListBucket
mediaimport:CreateDatabaseBinarySnapshot
```

以下示例 JSON 策略授予访问桶 *my-custom-installation-files* 及其内容所需的额外权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessToS3MediaBucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectAcl",
                "s3:GetObject",
                "s3:GetObjectTagging",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::my-custom-installation-files",
                "arn:aws:s3:::my-custom-installation-files/*"
            ]
        },
        {
            "Sid": "PermissionForByom",
            "Effect": "Allow",
            "Action": [
                "mediaimport:CreateDatabaseBinarySnapshot"
            ],
            "Resource": "*"
        }
    ]
}
```

------

您可以使用 S3 存储桶策略向调用者的账户授予 Amazon S3 的类似权限。

### 从 CEV 创建数据库实例所需的 IAM 权限
<a name="custom-setup-orcl.db"></a>

要从现有的 CEV 创建 RDS Custom for Oracle 数据库实例，IAM 主体需要以下额外权限。

```
iam:SimulatePrincipalPolicy
cloudtrail:CreateTrail
cloudtrail:StartLogging
```

以下示例 JSON 策略授予验证 IAM 角色和将信息记录到 AWS CloudTrail 所需的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ValidateIamRole",
            "Effect": "Allow",
            "Action": "iam:SimulatePrincipalPolicy",
            "Resource": "*"
        },
        {
            "Sid": "CreateCloudTrail",
            "Effect": "Allow",
            "Action": [
                "cloudtrail:CreateTrail",
                "cloudtrail:StartLogging"
            ],
            "Resource": "arn:aws:cloudtrail:*:*:trail/do-not-delete-rds-custom-*"
        }
    ]
}
```

------

## 步骤 6：为 RDS Custom for Oracle 配置 VPC
<a name="custom-setup-orc.vpc-config"></a>

就像 Amazon EC2 实例或 Amazon RDS 实例一样，您的 RDS Custom 数据库实例位于基于 Amazon VPC 服务的虚拟私有云 (VPC) 中。您将提供并配置自己的 VPC。与 RDS Custom for SQL Server 不同，RDS Custom for Oracle 不创建访问控制列表或安全组。您必须附加自己的安全组、子网和路由表。

您可以使用 CloudFormation 或手动流程配置您的虚拟私有云（VPC）。

**重要**  
强烈建议您使用 CloudFormation 配置您的 RDS Custom for Oracle 环境。这种技术最简单，最不容易出错。

**Topics**
+ [使用 CloudFormation 配置 VPC（建议）](#custom-setup-orcl.cf.config-vpc)
+ [为 RDS Custom for Oracle 手动配置 VPC](#custom-setup-orcl.vpc)

### 使用 CloudFormation 配置 VPC（建议）
<a name="custom-setup-orcl.cf.config-vpc"></a>

如果您已经为其他 RDS Custom 引擎配置了 VPC 并且想要重用现有的 VPC，请跳过此步骤。此部分假设如下：
+ 您已使用 CloudFormation 创建 IAM 实例配置文件和角色。
+ 您知道路由表 ID。

  要使数据库实例成为私有实例，该实例必须位于私有子网中。要使子网成为私有子网，该子网不得与具有原定设置互联网网关的路由表关联。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[配置路由表](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)。

当您对 VPC 使用 CloudFormation 模板时，该模板会创建以下资源：
+ 私有 VPC
+ 名为 `rds-custom-private` 的子网组
+ 以下 VPC 端点，您的数据库实例使用这些端点与从属 AWS 服务进行通信：
  + `com.amazonaws.region.ec2messages`
  + `com.amazonaws.region.events`
  + `com.amazonaws.region.logs`
  + `com.amazonaws.region.monitoring`
  + `com.amazonaws.region.s3`
  + `com.amazonaws.region.secretsmanager`
  + `com.amazonaws.region.ssm`
  + `com.amazonaws.region.ssmmessages`

  如果您要创建多可用区部署：
  + `com.amazonaws.region.sqs`
**注意**  
对于使用现有账户的复杂网络设置，如果访问权限尚不存在，建议您手动配置对从属服务的访问权限。有关更多信息，请参阅 [确保您的 VPC 可以访问从属 AWS 服务](#custom-setup-orcl.vpc.endpoints)。

**要采用 CloudFormation 配置 VPC**

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

1. 启动“创建堆栈”向导，选择**创建堆栈**，然后选择**使用新资源（标准）**。

1. 在 **Create stack**（创建堆栈）页面上，执行以下操作：

   1. 对于 **Prepare template**（准备模板），选择 **Template is ready**（模板就绪）。

   1. 在 **Template source**（模板来源）项下，选择 **Upload a template file**（上载模板文件）。

   1. 对于 **Choose file**（选择文件），请导航到 `custom-vpc.json` 并选择。

   1. 选择**下一步**。

1. 在 **Specify stack details**（指定堆栈详细信息）页面中，请执行以下操作：

   1. 对于**堆栈名称**，输入 **custom-vpc**。

   1. 对于 **Parameters**（参数），请选择要用于 RDS Custom 数据库实例的私有子网。

   1. 选择要用于 RDS Custom 数据库实例的私有 VPC ID。

   1. 输入与私有子网关联的路由表。

   1. 选择 **Next**(下一步)。

1. 在**配置堆栈选项**页面上，请选择**下一步**。

1. 在**审核 custom-vpc** 页面上，选择**提交**。

   CloudFormation 会配置您的私有 VPC。在左侧面板中，当 **custom-vpc** 显示 **CREATE\$1COMPLETE** 时，继续执行下一步。

1. （可选）查看您的 VPC 的详细信息。在**堆栈**窗格中，选择 **custom-vpc**。在右窗格中，执行以下操作：

   1. 选择**堆栈信息**。堆栈的 ID 格式为：**arn:aws:cloudformation:*region*:*account-no*:stack/custom-vpc/*identifier***。

   1. 选择**资源**。您应该看到一个名为 **rds-custom-private** 的子网组和若干使用命名格式 **vpce-*string*** 的 VPC 端点。每个端点对应于 RDS Custom 需要与之通信的一项 AWS 服务。有关更多信息，请参阅 [确保您的 VPC 可以访问从属 AWS 服务](#custom-setup-orcl.vpc.endpoints)。

   1. 选择**参数**。您应该看到私有子网、私有 VPC 和您在创建堆栈时指定的路由表。在创建数据库实例时，您需要提供 VPC ID 和子网组。

### 为 RDS Custom for Oracle 手动配置 VPC
<a name="custom-setup-orcl.vpc"></a>

除了使用 CloudFormation 自动创建 VPC 之外，您还可以手动配置 VPC。当您具有使用现有资源的复杂网络设置时，此选项可能是最好的。

**Topics**
+ [确保您的 VPC 可以访问从属 AWS 服务](#custom-setup-orcl.vpc.endpoints)
+ [配置实例元数据服务](#custom-setup-orcl.vpc.imds)

#### 确保您的 VPC 可以访问从属 AWS 服务
<a name="custom-setup-orcl.vpc.endpoints"></a>

RDS Custom 将通信从数据库实例发送到其他 AWS 服务。确保可以从您在其中创建 RDS Custom 数据库实例的子网访问以下服务：
+ Amazon CloudWatch (`com.amazonaws.region.monitoring`)
+ Amazon CloudWatch Logs (`com.amazonaws.region.logs`)
+ Amazon CloudWatch Events (`com.amazonaws.region.events`)
+ Amazon EC2（`com.amazonaws.region.ec2` 和 `com.amazonaws.region.ec2messages`）
+ Amazon S3 (`com.amazonaws.region.s3`)
+ AWS Secrets Manager (`com.amazonaws.region.secretsmanager`)
+ AWS Systems Manager（`com.amazonaws.region.ssm` 和 `com.amazonaws.region.ssmmessages`）

如果创建多可用区部署
+ Amazon Simple Queue Service (`com.amazonaws.region.sqs`)

如果 RDS Custom 无法与必需的服务通信，它会发布以下事件：

```
Database instance in incompatible-network. SSM Agent connection not available. Amazon RDS can't connect to the dependent AWS services.
```

```
Database instance in incompatible-network. Amazon RDS can't connect to dependent AWS services. Make sure port 443 (HTTPS) allows outbound connections, and try again. "Failed to connect to the following services: s3 events"
```

为避免 `incompatible-network` 错误，请确保您的 RDS Custom 数据库实例与 AWS 服务之间通信所涉及的 VPC 组件满足以下要求：
+ 数据库实例可以在端口 443 上建立到其他 AWS 服务的出站连接。
+ VPC 允许对源自 RDS Custom 数据库实例的请求进行传入响应。
+ RDS Custom 可以正确解析每个 AWS 服务的端点的域名。

如果您已经为其他 RDS Custom 数据库引擎配置了 VPC，可以重用该 VPC 并跳过此过程。

#### 配置实例元数据服务
<a name="custom-setup-orcl.vpc.imds"></a>

请确保您的实例可以执行以下操作：
+ 可使用 Instance Metadata Service Version 2 (IMDSv2) 来访问实例元数据服务。
+ 允许通过端口 80 (HTTP) 到 IMDS 链接 IP 地址的出站通信。
+ 从 `http://169.254.169.254` IMDSv2 链接请求实例元数据。

有关更多信息，请参阅《Amazon EC2 用户指南》**中的[使用 IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)。

RDS Custom for Oracle 自动化程序预设情况下使用 IMDSv2，方法是在底层 Amazon EC2 实例上设置 `HttpTokens=enabled`。但是，您也可以根据需要使用 IMDSv1。有关更多信息，请参阅《Amazon EC2 用户指南》[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)中的*配置实例元数据选项*。

# 使用 Amazon RDS Custom for Oracle 的自定义引擎版本
<a name="custom-cev"></a>

Amazon RDS Custom for Oracle 的一个*自定义引擎版本 (CEV)*是数据库引擎和特定 Amazon Machine Image (AMI) 的二进制卷快照。默认情况下，RDS Custom for Oracle 使用 RDS Custom 管理的最新可用 AMI，但您可以指定在先前 CEV 中使用的 AMI。您将数据库安装文件存储在 Amazon S3 中。RDS Custom 将使用安装文件和 AMI 为您创建 CEV。

**Topics**
+ [为创建 CEV 做准备](custom-cev.preparing.md)
+ [创建 CEV](custom-cev.create.md)
+ [修改 CEV 状态](custom-cev.modify.md)
+ [查看 Amazon RDS Custom for Oracle 的 CEV 详细信息](custom-cev.view.md)
+ [删除 CEV](custom-cev.delete.md)

# 为创建 CEV 做准备
<a name="custom-cev.preparing"></a>

要创建 CEV，请访问存储在 Amazon S3 桶中的以下任意版本的安装文件和补丁：
+ Oracle Database 19c
+ Oracle Database 18c
+ Oracle Database 12c 第 2 版 (12.2)
+ Oracle Database 12c 第 1 版 (12.1)

例如，您可以将 2021 年 4 月的 RU/RUR 用于 Oracle Database 19c，也可以使用安装文件和补丁的任何有效组合。有关 RDS Custom for Oracle 支持的版本和区域的更多信息，请参阅[适用于 RDS for Oracle 的 RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.html#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.ora)。

**Topics**
+ [步骤 1（可选）：下载清单模板](#custom-cev.preparing.templates)
+ [步骤 2：从 Oracle 软件传输云下载数据库安装文件和补丁](#custom-cev.preparing.download)
+ [步骤 3：将安装文件上传到 Amazon S3](#custom-cev.preparing.s3)
+ [步骤 4（可选)：在 S3 中跨 AWS 账户共享您的安装媒体](#custom-cev.preparing.accounts)
+ [步骤 5：准备 CEV 清单](#custom-cev.preparing.manifest)
+ [步骤 6（可选）：验证 CEV 清单](#custom-cev.preparing.validating)
+ [步骤 7：添加必要的 IAM 权限](#custom-cev.preparing.iam)

## 步骤 1（可选）：下载清单模板
<a name="custom-cev.preparing.templates"></a>

*CEV 清单*是一个 JSON 文档，其中包含 CEV 的数据库安装 .zip 文件的列表。要创建 CEV，请执行以下操作：

1. 确定要包含在 CEV 中的 Oracle 数据库安装文件。

1. 下载安装文件。

1. 创建列出安装文件的 JSON 清单。

RDS Custom for Oracle 为每个受支持的 Oracle Database 版本提供 JSON 清单模板以及我们推荐的 .zip 文件。例如，以下模板适用于 19.17.0.0.0 RU。

```
{
    "mediaImportTemplateVersion": "2020-08-14",
    "databaseInstallationFileNames": [
        "V982063-01.zip"
    ],
    "opatchFileNames": [
        "p6880880_190000_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames": [
        "p34419443_190000_Linux-x86-64.zip",
        "p34411846_190000_Linux-x86-64.zip"
    ],
    "otherPatchFileNames": [
        "p28852325_190000_Linux-x86-64.zip",
        "p29997937_190000_Linux-x86-64.zip",
        "p31335037_190000_Linux-x86-64.zip",
        "p32327201_190000_Linux-x86-64.zip",
        "p33613829_190000_Linux-x86-64.zip",
        "p34006614_190000_Linux-x86-64.zip",
        "p34533061_190000_Linux-x86-64.zip",
        "p34533150_190000_Generic.zip",
        "p28730253_190000_Linux-x86-64.zip",
        "p29213893_1917000DBRU_Generic.zip",
        "p33125873_1917000DBRU_Linux-x86-64.zip",
        "p34446152_1917000DBRU_Linux-x86-64.zip"
    ]
}
```

每个模板都有关联的自述文件，其中包括有关下载补丁、.zip 文件的 URL 和文件校验和的说明。您可以按原样使用这些模板，也可以使用自己的补丁对这些模板进行修改。要查看模板，请将 [custom-oracle-manifest.zip](samples/custom-oracle-manifest.zip) 下载到本地磁盘，然后使用文件存档应用程序将其打开。有关更多信息，请参阅 [步骤 5：准备 CEV 清单](#custom-cev.preparing.manifest)。

## 步骤 2：从 Oracle 软件传输云下载数据库安装文件和补丁
<a name="custom-cev.preparing.download"></a>

确定了要用于 CEV 的安装文件后，将这些文件下载到本地系统。Oracle 数据库安装文件和补丁托管在 Oracle 软件传输云上。每个 CEV 都需要一个基础版本 [例如 Oracle Database 19c 或 Oracle Database 12c 第 2 版（12.2）] 以及可选补丁列表。

**下载 Oracle Database 的数据库安装文件**

1. 请转到 [https://edelivery.oracle.com/](https://edelivery.oracle.com/) 然后登录。

1. 在搜索框中，输入 **Oracle Database Enterprise Edition** 或 **Oracle Database Standard Edition 2**，然后选择**搜索**。

1. 请选择以下基础版本之一：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-cev.preparing.html)

1. 选择**继续**。

1. 清除 **Download Queue**（下载队列）复选框。

1. 选择与基础版本相对应的选项：
   + **Oracle Database 19.3.0.0.0 - 长期版本**。
   + **Oracle Database 18.0.0.0.0**
   + **Oracle Database 12.2.0.1.0**。
   + **Oracle Database 12.1.0.2.0**。

1. 在 **Platform/Languages**（平台/语言）中选择 **Linux x86-64**。

1. 选择**继续**，然后签署 Oracle 许可协议。

1. 选择与您的数据库版本对应的 .zip 文件：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-cev.preparing.html)

1. 将所需的 Oracle 补丁从 `updates.oracle.com` 或 `support.oracle.com` 下载到本地系统。您可以在以下位置找到补丁的 URL：
   + 您在[步骤 1（可选）：下载清单模板](#custom-cev.preparing.templates)中下载的 .zip 文件中的自述文件
   + [适用于 Oracle 的 Amazon Relational Database Service（Amazon RDS）发布说明](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes)的每个版本更新（RU）中列出的补丁

## 步骤 3：将安装文件上传到 Amazon S3
<a name="custom-cev.preparing.s3"></a>

使用 AWS CLI 将您的 Oracle 安装和补丁文件上载到 Amazon S3。包含安装文件的 S3 存储桶必须与您的 CEV 在同一个 AWS 区域。

本节中的示例使用以下占位符：
+ `install-or-patch-file.zip` – Oracle 安装媒体文件。例如，p32126828\$1190000\$1Linux-x86-64.zip 是一个补丁。
+ `amzn-s3-demo-destination-bucket` – 您为上载的安装文件指定的 Amazon S3 存储桶。
+ `123456789012/cev1` – Amazon S3 存储桶中的可选前缀。
+ `amzn-s3-demo-source-bucket` – 您可以选择将文件暂存到的 Amazon S3 存储桶。

**Topics**
+ [步骤 3a：验证您的 S3 桶是否位于正确的 AWS 区域](#custom-cev.preparing.s3.verify-region)
+ [步骤 3b：确保您的 S3 桶策略具有正确的权限](#custom-cev.preparing.s3.verify-policy)
+ [步骤 3c：使用 cp 或同步命令上传文件](#custom-cev.preparing.s3.upload)
+ [步骤 3d：列出 S3 桶中的文件](#custom-cev.preparing.s3.list)

### 步骤 3a：验证您的 S3 桶是否位于正确的 AWS 区域
<a name="custom-cev.preparing.s3.verify-region"></a>

验证 S3 存储桶是否位于您计划运行 `create-custom-db-engine-version` 命令所在的 AWS 区域。

```
aws s3api get-bucket-location --bucket amzn-s3-demo-destination-bucket
```

### 步骤 3b：确保您的 S3 桶策略具有正确的权限
<a name="custom-cev.preparing.s3.verify-policy"></a>

您可以从头开始或者从源 CEV 创建 CEV。如果您计划从源 CEV 创建新的 CEV，请确保您的 S3 桶策略具有正确的权限：

1. 标识 RDS Custom 预留的 S3 桶。桶名称的格式为 `do-not-delete-rds-custom-account-region-string`。例如，桶名称可能为 `do-not-delete-rds-custom-123456789012-us-east-1-abc123EXAMPLE`。

1. 确保将以下权限附加到您的 S3 桶策略中。将 `do-not-delete-rds-custom-123456789012-us-east-1-abc123EXAMPLE` 替换为您的存储桶的名称。

   ```
   {
       "Sid": "AWSRDSCustomForOracleCustomEngineVersionGetObject",
       "Effect": "Allow",
       "Principal": {
           "Service": "custom.rds.amazonaws.com"
       },
       "Action": [
           "s3:GetObject",
           "s3:GetObjectTagging"
       ],
       "Resource": "arn:aws:s3:::do-not-delete-rds-custom-123456789012-us-east-1-abc123EXAMPLE/CustomEngineVersions/*"
   }, ...
   ```

### 步骤 3c：使用 cp 或同步命令上传文件
<a name="custom-cev.preparing.s3.upload"></a>

请选择以下任一选项：
+ 使用 `aws s3 cp` 上载单个 .zip 文件。

  分别上载每个安装 .zip 文件。不要将 .zip 文件合并为单个 .zip 文件。
+ 使用 `aws s3 sync` 上传目录。

**Example**  
以下示例将 `install-or-patch-file.zip` 上传到 RDS Custom Amazon S3 存储桶中的 `123456789012/cev1` 文件夹。为您想要上传的每个 .zip 运行单独的 `aws s3` 命令。  
对于 Linux、macOS 或 Unix：  

```
1. aws s3 cp install-or-patch-file.zip \
2.     s3://amzn-s3-demo-destination-bucket/123456789012/cev1/
```
对于：Windows  

```
1. aws s3 cp install-or-patch-file.zip ^
2.     s3://amzn-s3-demo-destination-bucket/123456789012/cev1/
```

**Example**  
以下示例将您本地 *cev1* 文件中的文件上传到您的 Amazon S3 存储桶中的 *123456789012/cev1* 文件夹。  
对于 Linux、macOS 或 Unix：  

```
aws s3 sync cev1 \
    s3://amzn-s3-demo-destination-bucket/123456789012/cev1/
```
对于：Windows  

```
aws s3 sync cev1 ^
    s3://amzn-s3-demo-destination-bucket/123456789012/cev1/
```

**Example**  
以下示例将 `amzn-s3-demo-source-bucket` 中的所有文件上传到您的 Amazon S3 存储桶中的 **`123456789012/cev1`** 文件夹。  
对于 Linux、macOS 或 Unix：  

```
aws s3 sync s3://amzn-s3-demo-source-bucket/ \
    s3://amzn-s3-demo-destination-bucket/123456789012/cev1/
```
对于：Windows  

```
aws s3 sync s3://amzn-s3-demo-source-bucket/ ^
    s3://amzn-s3-demo-destination-bucket/123456789012/cev1/
```

### 步骤 3d：列出 S3 桶中的文件
<a name="custom-cev.preparing.s3.list"></a>

以下示例使用 `s3 ls` 命令列出 RDS Custom Amazon S3 桶中的文件。

```
aws s3 ls \
    s3://amzn-s3-demo-destination-bucket/123456789012/cev1/
```

## 步骤 4（可选)：在 S3 中跨 AWS 账户共享您的安装媒体
<a name="custom-cev.preparing.accounts"></a>

就本部分的目的而言，包含您上载的 Oracle 安装文件的 Amazon S3 桶是您的*媒体桶*。您的组织可能会在 AWS 区域中使用多个 AWS 账户。如果是这样，您可能需要使用一个 AWS 账户来填充媒体桶，并使用另一个 AWS 账户来创建 CEV。如果您不打算共享媒体桶，请跳至下一部分。

此部分假设如下：
+ 您可以访问创建媒体桶的账户和您打算在其中创建 CEV 的另一个账户。
+ 您打算只在一个 AWS 区域中创建 CEV。如果您打算使用多个区域，请在每个区域中创建一个媒体桶。
+ 您使用的是 CLI。如果您使用 Amazon S3 控制台，请调整以下步骤。

**将您的媒体桶配置为跨 AWS 账户进行共享**

1. 登录到 AWS 账户，其中包含您上载了安装媒体的 S3 桶。

1. 从空白 JSON 策略模板或您可以调整的现有策略开始。

   以下命令检索现有策略并将其另存为 *my-policy.json*。在此示例中，包含安装文件的 S3 存储桶命名为 *amzn-s3-demo-bucket*。

   ```
   aws s3api get-bucket-policy \ 
       --bucket amzn-s3-demo-bucket \
       --query Policy \
       --output text > my-policy.json
   ```

1. 按如下方式编辑媒体桶权限：
   + 在模板的 `Resource` 元素中，指定您将 Oracle 数据库安装文件上载到的 S3 桶。
   + 在 `Principal` 元素中，指定您打算用于创建 CEV 的所有 AWS 账户的 ARN。您可以将根、用户或角色添加到 S3 桶允许列表中。有关更多信息，请参阅 *AWS Identity and Access Management 用户指南* 中的 [IAM 标识符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "GrantAccountsAccess",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:root",
                       "arn:aws:iam::444455556666:user/user-name-with-path",
                       "arn:aws:iam::123456789012:role/role-name-with-path"
                   ]
               },
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectAcl",
                   "s3:GetObjectTagging",
                   "s3:ListBucket",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket",
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           }
       ]
   }
   ```

------

1. 将此策略附加到您的媒体桶。

   在以下示例中，*amzn-s3-demo-bucket* 是包含安装文件的 S3 存储桶的名称，而 *my-policy.json* 是 JSON 文件的名称。

   ```
   aws s3api put-bucket-policy \
       --bucket amzn-s3-demo-bucket \
       --policy file://my-policy.json
   ```

1. 登录到您打算在其中创建 CEV 的 AWS 账户。

1. 验证此账户是否可以访问 AWS 账户（此账户创建了媒体桶）中的媒体桶。

   ```
   aws s3 ls --query "Buckets[].Name"
   ```

   有关更多信息，请参阅《AWS CLI 命令参考》**中的 [aws s3 ls](https://docs.aws.amazon.com/cli/latest/reference/s3/ls.html)。

1. 请按照[创建 CEV](custom-cev.create.md)中的步骤创建 CEV。

## 步骤 5：准备 CEV 清单
<a name="custom-cev.preparing.manifest"></a>

CEV 清单是包含以下内容的 JSON 文档：
+ （必需）您上载到 Amazon S3 的安装 .zip 文件的列表。RDS Custom 将按它们在清单中列出的顺序应用补丁。
+ （可选）为 Oracle 根目录、Oracle 主目录以及 UNIX/Linux 用户和组的 ID 和名称设置非原定设置值的安装参数。请注意，您无法修改现有 CEV 或现有数据库实例的安装参数。当安装参数具有不同的设置时，您也无法从一个 CEV 升级到另一个 CEV。

有关示例 CEV 清单，请参阅您在[步骤 1（可选）：下载清单模板](#custom-cev.preparing.templates)中下载的 JSON 模板。此外，您还可以在[CEV 清单示例](#custom-cev.preparing.manifest.examples)中查看示例。

**Topics**
+ [CEV 清单中的 JSON 字段](#custom-cev.preparing.manifest.fields)
+ [创建 CEV 清单](#custom-cev.preparing.manifest.creating)
+ [CEV 清单示例](#custom-cev.preparing.manifest.examples)

### CEV 清单中的 JSON 字段
<a name="custom-cev.preparing.manifest.fields"></a>

下表介绍了清单中的 JSON 字段。


| JSON 字段 | 说明 | 
| --- | --- | 
|  `MediaImportTemplateVersion`  |  CEV 清单的版本。日期的格式为 `YYYY-MM-DD`。  | 
|  `databaseInstallationFileNames`  |  数据库安装文件的有序列表。  | 
|  `opatchFileNames`  |  用于 Oracle 数据库引擎的 OPatch 安装程序的有序列表。只有一个值有效。`opatchFileNames` 的值必须以 `p6880880_` 开头。  | 
|  `psuRuPatchFileNames`  |  此数据库的 PSU 和 RU 补丁程序。  如果包含 `psuRuPatchFileNames`，则 `opatchFileNames` 为必需的。`opatchFileNames` 的值必须以 `p6880880_` 开头。   | 
|  `OtherPatchFileNames`  |  不在 PSU 和 RU 补丁列表中的补丁。RDS Custom 在应用 PSU 和 RU 补丁后应用这些补丁。  如果包含 `OtherPatchFileNames`，则 `opatchFileNames` 为必需的。`opatchFileNames` 的值必须以 `p6880880_` 开头。   | 
|  `installationParameters`  |  Oracle 根目录、Oracle 主目录以及 UNIX/Linux 用户和组的 ID 和名称的非原定设置。您可以设置以下参数： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-cev.preparing.html)  | 

每个 Oracle 数据库版本都有不同的受支持安装文件的列表。在创建 CEV 清单时，请确保仅指定 RDS Custom for Oracle 支持的文件。否则，CEV 创建将失败并出现错误。支持[适用于 Oracle 的 Amazon Relational Database Service（Amazon RDS）发布说明](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes)中列出的所有补丁。

### 创建 CEV 清单
<a name="custom-cev.preparing.manifest.creating"></a>

**创建 CEV 清单**

1. 按您计划应用安装文件的顺序，列出您计划应用的所有安装文件。

1. 将安装文件与[CEV 清单中的 JSON 字段](#custom-cev.preparing.manifest.fields)中描述的 JSON 字段关联起来。

1. 请执行以下任一操作：
   + 将 CEV 清单创建为 JSON 文本文件。
   + 在控制台中创建 CEV 时编辑 CEV 清单模板。有关更多信息，请参阅 [创建 CEV](custom-cev.create.md)。

### CEV 清单示例
<a name="custom-cev.preparing.manifest.examples"></a>

以下示例显示了不同 Oracle Database 版本的 CEV 清单文件。如果您在清单中包含 JSON 字段，请确保该字段不为空。例如，以下 CEV 清单无效，因为 `otherPatchFileNames` 为空。

```
{
    "mediaImportTemplateVersion": "2020-08-14",
    "databaseInstallationFileNames": [
        "V982063-01.zip"
    ],
    "opatchFileNames": [
        "p6880880_190000_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames": [
        "p32126828_190000_Linux-x86-64.zip"
    ],
    "otherPatchFileNames": [
    ]
}
```

**主题**
+ [Sample CEV manifest for Oracle Database 12c Release 1 (12.1)](#oracle-cev-manifest-12.1)
+ [Sample CEV manifest for Oracle Database 12c Release 2 (12.2)](#oracle-cev-manifest-12.2)
+ [Sample CEV manifest for Oracle Database 18c](#oracle-cev-manifest-18c)
+ [Sample CEV manifest for Oracle Database 19c](#oracle-cev-manifest-19c)

**Example Oracle Database 12c 第 1 版（12.1）的 CEV 清单示例**  
在以下示例中，对用于 Oracle Database 12c 第 1 版（12.1）的 2021 年 7 月 PSU，RDS Custom 将按指定的顺序应用补丁。因此，RDS Custom 依次应用 p32768233、p32876425、p18759211，以此类推。该示例为 UNIX 用户和组以及 Oracle 主目录和 Oracle 根目录设置新值。  

```
{
    "mediaImportTemplateVersion":"2020-08-14",
    "databaseInstallationFileNames":[
        "V46095-01_1of2.zip",
        "V46095-01_2of2.zip"
    ],
    "opatchFileNames":[
        "p6880880_121010_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames":[
        "p32768233_121020_Linux-x86-64.zip"
    ],
    "otherPatchFileNames":[
        "p32876425_121020_Linux-x86-64.zip",
        "p18759211_121020_Linux-x86-64.zip",
        "p19396455_121020_Linux-x86-64.zip",
        "p20875898_121020_Linux-x86-64.zip",
        "p22037014_121020_Linux-x86-64.zip",
        "p22873635_121020_Linux-x86-64.zip",
        "p23614158_121020_Linux-x86-64.zip",
        "p24701840_121020_Linux-x86-64.zip",
        "p25881255_121020_Linux-x86-64.zip",
        "p27015449_121020_Linux-x86-64.zip",
        "p28125601_121020_Linux-x86-64.zip",
        "p28852325_121020_Linux-x86-64.zip",
        "p29997937_121020_Linux-x86-64.zip",
        "p31335037_121020_Linux-x86-64.zip",
        "p32327201_121020_Linux-x86-64.zip",
        "p32327208_121020_Generic.zip",
        "p17969866_12102210119_Linux-x86-64.zip",
        "p20394750_12102210119_Linux-x86-64.zip",
        "p24835919_121020_Linux-x86-64.zip",
        "p23262847_12102201020_Linux-x86-64.zip",
        "p21171382_12102201020_Generic.zip",
        "p21091901_12102210720_Linux-x86-64.zip",
        "p33013352_12102210720_Linux-x86-64.zip",
        "p25031502_12102210720_Linux-x86-64.zip",
        "p23711335_12102191015_Generic.zip",
        "p19504946_121020_Linux-x86-64.zip"
    ],
    "installationParameters": {
        "unixGroupName": "dba",
        "unixGroupId": 12345,
        "unixUname": "oracle",
        "unixUid": 12345,
        "oracleHome": "/home/oracle/oracle.12.1.0.2",
        "oracleBase": "/home/oracle"
    }
}
```

**Example Oracle Database 12c 第 2 版（12.2）的 CEV 清单示例**  
在以下示例中，对用于 Oracle Database 12c 第 2 版（12.2）的 2021 年 10 月 PSU，RDS Custom 将依次应用 p33261817、p33192662、p29213893，以此类推。该示例为 UNIX 用户和组以及 Oracle 主目录和 Oracle 根目录设置新值。  

```
{
    "mediaImportTemplateVersion":"2020-08-14",
    "databaseInstallationFileNames":[
        "V839960-01.zip"
    ],
    "opatchFileNames":[
        "p6880880_122010_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames":[
        "p33261817_122010_Linux-x86-64.zip"
    ],
    "otherPatchFileNames":[
        "p33192662_122010_Linux-x86-64.zip",
        "p29213893_122010_Generic.zip",
        "p28730253_122010_Linux-x86-64.zip",
        "p26352615_12201211019DBOCT2021RU_Linux-x86-64.zip",
        "p23614158_122010_Linux-x86-64.zip",
        "p24701840_122010_Linux-x86-64.zip",
        "p25173124_122010_Linux-x86-64.zip",
        "p25881255_122010_Linux-x86-64.zip",
        "p27015449_122010_Linux-x86-64.zip",
        "p28125601_122010_Linux-x86-64.zip",
        "p28852325_122010_Linux-x86-64.zip",
        "p29997937_122010_Linux-x86-64.zip",
        "p31335037_122010_Linux-x86-64.zip",
        "p32327201_122010_Linux-x86-64.zip",
        "p32327208_122010_Generic.zip"
    ],
    "installationParameters": {
        "unixGroupName": "dba",
        "unixGroupId": 12345,
        "unixUname": "oracle",
        "unixUid": 12345,
        "oracleHome": "/home/oracle/oracle.12.2.0.1",
        "oracleBase": "/home/oracle"
    }
}
```

**Example Oracle Database 18c 的 CEV 清单示例**  
在以下示例中，对用于 Oracle Database 18c 的 2021 年 10 月 PSU，RDS Custom 将依次应用 p32126855、p28730253、p27539475，以此类推。该示例为 UNIX 用户和组以及 Oracle 主目录和 Oracle 根目录设置新值。  

```
{
    "mediaImportTemplateVersion":"2020-08-14",
    "databaseInstallationFileNames":[
        "V978967-01.zip"
    ],
    "opatchFileNames":[
        "p6880880_180000_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames":[
        "p32126855_180000_Linux-x86-64.zip"
    ],
    "otherPatchFileNames":[
        "p28730253_180000_Linux-x86-64.zip",
        "p27539475_1813000DBRU_Linux-x86-64.zip",
        "p29213893_180000_Generic.zip",
        "p29374604_1813000DBRU_Linux-x86-64.zip",
        "p29782284_180000_Generic.zip",
        "p28125601_180000_Linux-x86-64.zip",
        "p28852325_180000_Linux-x86-64.zip",
        "p29997937_180000_Linux-x86-64.zip",
        "p31335037_180000_Linux-x86-64.zip",
        "p31335142_180000_Generic.zip"
    ]
    "installationParameters": {
        "unixGroupName": "dba",
        "unixGroupId": 12345,
        "unixUname": "oracle",
        "unixUid": 12345,
        "oracleHome": "/home/oracle/18.0.0.0.ru-2020-10.rur-2020-10.r1",
        "oracleBase": "/home/oracle/"
    }
}
```

**Example Oracle Database 19c 的 CEV 清单示例**  
在以下示例中，对 Oracle Database 19c，RDS Custom 依次应用 p32126828、p29213893、p29782284，以此类推。该示例为 UNIX 用户和组以及 Oracle 主目录和 Oracle 根目录设置新值。  

```
{
    "mediaImportTemplateVersion": "2020-08-14",
    "databaseInstallationFileNames": [
        "V982063-01.zip"
    ],
    "opatchFileNames": [
        "p6880880_190000_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames": [
        "p32126828_190000_Linux-x86-64.zip"
    ],
    "otherPatchFileNames": [
        "p29213893_1910000DBRU_Generic.zip",
        "p29782284_1910000DBRU_Generic.zip",
        "p28730253_190000_Linux-x86-64.zip",
        "p29374604_1910000DBRU_Linux-x86-64.zip",
        "p28852325_190000_Linux-x86-64.zip",
        "p29997937_190000_Linux-x86-64.zip",
        "p31335037_190000_Linux-x86-64.zip",
        "p31335142_190000_Generic.zip"
    ],
    "installationParameters": {
        "unixGroupName": "dba",
        "unixGroupId": 12345,
        "unixUname": "oracle",
        "unixUid": 12345,
        "oracleHome": "/home/oracle/oracle.19.0.0.0.ru-2020-04.rur-2020-04.r1.EE.1",
        "oracleBase": "/home/oracle"
    }
}
```

## 步骤 6（可选）：验证 CEV 清单
<a name="custom-cev.preparing.validating"></a>

或者，通过运行 `json.tool` Python 脚本验证清单是有效的 JSON 文件。例如，如果您更改到包含名为 `manifest.json` 的 CEV 清单的目录，请运行以下命令。

```
python -m json.tool < manifest.json
```

## 步骤 7：添加必要的 IAM 权限
<a name="custom-cev.preparing.iam"></a>

确保创建 CEV 的 IAM 主体具有中所述的必要策略 [步骤 5：为您的 IAM 用户或角色授予所需的权限](custom-setup-orcl.md#custom-setup-orcl.iam-user)。

# 创建 CEV
<a name="custom-cev.create"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 创建 CEV。指定多租户或非多租户架构。有关更多信息，请参阅 [多租户架构注意事项](custom-creating.md#custom-creating.overview)。

通常，创建 CEV 需要大约两个小时。创建 CEV 后，您可以使用它来创建或更新 RDS Custom 数据库实例。有关更多信息，请参阅[创建 RDS Custom for Oracle 数据库实例](custom-creating.md#custom-creating.create) 和[升级 RDS Custom for Oracle 数据库实例](custom-upgrading-modify.md)。

**注意**  
如果您的数据库实例当前使用 Oracle Linux 7.9，请创建一个使用最新 AMI（使用 Oracle Linux 8）的新 CEV。然后修改该实例以使用新的 CEV。

请注意创建 CEV 的以下要求和限制：
+ 包含安装文件的 Amazon S3 存储桶必须与您的 CEV 在同一个 AWS 区域。否则，创建过程将失败。
+ CEV 名称的格式必须为 `major-engine-version.customized_string`，如 `19.cdb_cev1` 所示。
+ CEV 名称必须包含 1–50 个字母数字字符、下划线、短划线或句点。
+ CEV 名称不能包含连续的句点，如 `19..cdb_cev1` 所示。

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

**要创建 CEV**

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

1. 在导航窗格中，选择 **Custom engine versions**（自定义引擎版本）。

   **Custom engine versions**（自定义引擎版本）页面显示了当前存在的所有 CEV。如果您尚未创建任何 CEV，则该页面为空。

1. 选择 **Create custom engine version**（创建自定义引擎版本）。

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

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

   1. 对于**架构设置**，（可选）选择**多租户架构**来创建使用引擎 `custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb` 的 Oracle 多租户 CEV。您只能使用多租户 CEV 创建 RDS Custom for Oracle CDB。如果您不选择此选项，CEV 将为非 CDB，它使用引擎 `custom-oracle-ee` 或 `custom-oracle-se2`。
**注意**  
您选择的架构是 CEV 的永久特征。您以后无法修改您的 CEV 以使用其他架构。

   1. 请选择以下任一选项：
      + **创建新的 CEV** – 从头开始创建 CEV。在这种情况下，必须指定 JSON 清单，其中指定了数据库二进制文件。
      + **从源创建 CEV** – 在**指定要复制的 CEV** 中，选择要用作源 CEV 的现有 CEV。在这种情况下，您可以指定新的亚马逊机器映像（AMI），但不能指定不同的数据库二进制文件。

   1. 对于**引擎版本**，选择主要引擎版本。

1. 在**版本详细信息**中，执行以下操作：

   1. 在**自定义引擎版本名称**中输入有效的名称。例如，您可以输入名称 **19.cdb\$1cev1**。

   1. （可选）为 CEV 输入描述。

1. 在**安装媒体**中，执行以下操作：

   1. （可选）对于 **AMI ID**，将该字段留空，以使用提供最新服务的 AMI，或者输入您之前用于创建 CEV 的 AMI。要获取有效的 AMI ID，请使用下面的任一种方法：
      + 在控制台中，选择左侧导航窗格中的**自定义引擎版本**，然后选择 CEV 的名称。CEV 使用的 AMI ID 显示在**配置**选项卡中。
      + 在 AWS CLI 中，使用 `describe-db-engine-versions` 命令。在输出中搜索 `ImageID`。

   1. 对于 **S3 location of manifest files**（清单文件的 S3 位置），输入您在 [步骤 3：将安装文件上传到 Amazon S3](custom-cev.preparing.md#custom-cev.preparing.s3) 中指定的 Amazon S3 存储桶的位置。例如，输入 **s3://my-custom-installation-files/123456789012/cev1/**。
**注意**  
您创建 CEV 的 AWS 区域必须与 S3 桶位于相同的区域。

   1. （仅限创建新 CEV）对于 **CEV 清单**，请输入您在[创建 CEV 清单](custom-cev.preparing.md#custom-cev.preparing.manifest.creating)中创建的 JSON 清单。

1. 在 **KMS 密钥**部分，选择**输入密钥 ARN**以列出可用的 AWS KMS 密钥。然后从列表中选择您的 KMS 密钥。

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

1. （可选）选择**添加新标签**以便为您的 CEV 创建键值对。

1. 选择 **Create custom engine version**（创建自定义引擎版本）。

   如果 JSON 清单格式无效，则控制台将显示**验证 CEV 清单时出错**。修复问题并重试。

**Custom engine versions**（自定义引擎版本）页面显示。您的 CEV 显示状态 **Creating**（正在创建）。创建 CEV 的过程需要大约两个小时。

## AWS CLI
<a name="custom-cev.create.CEV"></a>

要使用 AWS CLI 创建 CEV，请运行 [create-custom-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/create-custom-db-engine-version.html) 命令。

以下选项为必填：
+ `--engine` – 指定引擎类型。对于 CDB，请指定 `custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb`。对于非 CDB，请指定 `custom-oracle-ee` 或 `custom-oracle-se2`。您只能从使用 `custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb` 创建的 CEV 创建 CDB。您只能从使用 `custom-oracle-ee` 或 `custom-oracle-se2` 创建的 CEV 创建非 CDB。
+ `--engine-version` – 指定引擎版本。格式为 *major-engine-version*.*customized\$1string*。CEV 名称必须包含 1–50 个字母数字字符、下划线、短划线或句点。CEV 名称不能包含连续的句点，如 `19..cdb_cev1` 所示。
+ `--kms-key-id` – 指定一个 AWS KMS key。
+ `--manifest` – 指定 `manifest_json_string` 或 `--manifest file:file_name`。`manifest_json_string` 中不允许使用换行符。确保在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

  以下示例展示来自 [步骤 5：准备 CEV 清单](custom-cev.preparing.md#custom-cev.preparing.manifest) 的 19c 的 `manifest_json_string`。该示例为 Oracle 根目录、Oracle 主目录以及 UNIX/Linux 用户和组的 ID 和名称设置了新值。如果您复制此字符串，请先移除所有换行符，然后再将其粘贴到命令中。

  `"{\"mediaImportTemplateVersion\": \"2020-08-14\",\"databaseInstallationFileNames\": [\"V982063-01.zip\"],\"opatchFileNames\": [\"p6880880_190000_Linux-x86-64.zip\"],\"psuRuPatchFileNames\": [\"p32126828_190000_Linux-x86-64.zip\"],\"otherPatchFileNames\": [\"p29213893_1910000DBRU_Generic.zip\",\"p29782284_1910000DBRU_Generic.zip\",\"p28730253_190000_Linux-x86-64.zip\",\"p29374604_1910000DBRU_Linux-x86-64.zip\",\"p28852325_190000_Linux-x86-64.zip\",\"p29997937_190000_Linux-x86-64.zip\",\"p31335037_190000_Linux-x86-64.zip\",\"p31335142_190000_Generic.zip\"]\"installationParameters\":{ \"unixGroupName\":\"dba\", \ \"unixUname\":\"oracle\", \ \"oracleHome\":\"/home/oracle/oracle.19.0.0.0.ru-2020-04.rur-2020-04.r1.EE.1\", \ \"oracleBase\":\"/home/oracle/\"}}"`
+ `--database-installation-files-s3-bucket-name` – 指定您在[步骤 3：将安装文件上传到 Amazon S3](custom-cev.preparing.md#custom-cev.preparing.s3)中指定的桶名称。您运行 `create-custom-db-engine-version` 所在的 AWS 区域必须与 Amazon S3 桶位于相同的区域。

您还可以指定以下选项：
+ `--description` – 指定您的 CEV 的描述。
+ `--database-installation-files-s3-prefix` – 指定您在[步骤 3：将安装文件上传到 Amazon S3](custom-cev.preparing.md#custom-cev.preparing.s3)中指定的文件夹名称。
+ `--image-id` – 指定要重复使用的 AMI ID。要查找有效的 ID，请运行 `describe-db-engine-versions` 命令，然后在输出中搜索 `ImageID`。默认情况下，RDS Custom for Oracle 使用最新的可用 AMI。

下面的示例创建一个名为 `19.cdb_cev1` 的 Oracle 多租户 CEV。该示例重用现有 AMI，而不是使用最新的可用 AMI。确保 CEV 的名称以主要引擎版本号开头。

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

```
1. aws rds create-custom-db-engine-version \
2.     --engine custom-oracle-se2-cdb \
3.     --engine-version 19.cdb_cev1 \
4.     --database-installation-files-s3-bucket-name us-east-1-123456789012-custom-installation-files \
5.     --database-installation-files-s3-prefix 123456789012/cev1 \
6.     --kms-key-id my-kms-key \
7.     --description "test cev" \
8.     --manifest manifest_string \
9.     --image-id ami-012a345678901bcde
```
对于 Windows：  

```
1. aws rds create-custom-db-engine-version ^
2.     --engine custom-oracle-se2-cdb ^
3.     --engine-version 19.cdb_cev1 ^
4.     --database-installation-files-s3-bucket-name us-east-1-123456789012-custom-installation-files ^
5.     --database-installation-files-s3-prefix 123456789012/cev1 ^
6.     --kms-key-id my-kms-key ^
7.     --description "test cev" ^
8.     --manifest manifest_string ^
9.     --image-id ami-012a345678901bcde
```

**Example**  
使用 `describe-db-engine-versions` 命令以获取有关您的 CEV 的详细信息。  

```
1. aws rds describe-db-engine-versions \
2.     --engine custom-oracle-se2-cdb \
3.     --include-all
```
以下不完整的示例输出显示了引擎、参数组、清单和其他信息。  

```
 1. {
 2.     "DBEngineVersions": [
 3.         {
 4.             "Engine": "custom-oracle-se2-cdb",
 5.             "EngineVersion": "19.cdb_cev1",
 6.             "DBParameterGroupFamily": "custom-oracle-se2-cdb-19",
 7.             "DBEngineDescription": "Containerized Database for Oracle Custom SE2",
 8.             "DBEngineVersionDescription": "test cev",
 9.             "Image": {
10.                 "ImageId": "ami-012a345678901bcde",
11.                 "Status": "active"
12.             },
13.             "ValidUpgradeTarget": [],
14.             "SupportsLogExportsToCloudwatchLogs": false,
15.             "SupportsReadReplica": true,
16.             "SupportedFeatureNames": [],
17.             "Status": "available",
18.             "SupportsParallelQuery": false,
19.             "SupportsGlobalDatabases": false,
20.             "MajorEngineVersion": "19",
21.             "DatabaseInstallationFilesS3BucketName": "us-east-1-123456789012-custom-installation-files",
22.             "DatabaseInstallationFilesS3Prefix": "123456789012/cev1",
23.             "DBEngineVersionArn": "arn:aws:rds:us-east-1:123456789012:cev:custom-oracle-se2-cdb/19.cdb_cev1/abcd12e3-4f5g-67h8-i9j0-k1234l56m789",
24.             "KMSKeyId": "arn:aws:kms:us-east-1:732027699161:key/1ab2345c-6d78-9ef0-1gh2-3456i7j89k01",
25.             "CreateTime": "2023-03-07T19:47:58.131000+00:00",
26.             "TagList": [],
27.             "SupportsBabelfish": false,
28. ...
```

## 创建 CEV 失败
<a name="custom-cev.create.failure"></a>

如果创建 CEV 的过程失败，RDS Custom 将发布带有消息 `Creation failed for custom engine version major-engine-version.cev_name` 的 `RDS-EVENT-0198`，并包含有关失败的详细信息。例如，事件会打印丢失的文件。

您无法修改失败的 CEV。您只能删除它，然后在修复失败的原因之后再次尝试创建 CEV。有关排查 CEV 创建失败原因的信息，请参阅[为 RDS Custom for Oracle 排除自定义引擎版本创建的故障](custom-troubleshooting.md#custom-troubleshooting.cev)。

# 修改 CEV 状态
<a name="custom-cev.modify"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 修改 CEV。您可以修改 CEV 描述或其可用性状态。您的 CEV 具有以下状态值之一：
+ `available` – 您可以使用此 CEV 创建新的 RDS Custom 数据库实例或升级数据库实例。这是新创建的 CEV 的原定设置状态。
+ `inactive` – 您无法使用此 CEV 创建或升级 RDS Custom 实例。使用此 CEV，您无法还原数据库快照以创建新的 RDS Custom 数据库实例。

您可以将 CEV 从任何受支持状态更改为任何其他受支持状态。您可以更改状态以防止意外使用 CEV 或使已停止的 CEV 有资格再次使用。例如，您可以将 CEV 的状态从 `available` 更改为 `inactive`，并从 `inactive` 更改回 `available`。

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

**要修改 CEV**

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

1. 在导航窗格中，选择 **Custom engine versions**（自定义引擎版本）。

1. 选择要修改其描述或状态的 CEV。

1. 对于 **Actions**（操作），选择 **Modify**（修改）。

1. 进行以下任何更改：
   + 对于 **CEV status settings**（CEV 状态设置），选择新的可用状态。
   + 对于 **Version description**（版本描述），输入新的描述。

1. 选择 **Modify CEV**（修改 CEV）。

   如果 CEV 正在使用中，控制台将显示 **You can't modify the CEV status**（您不能修改 CEV 状态）。修复问题并重试。

**Custom engine versions**（自定义引擎版本）页面显示。

## AWS CLI
<a name="custom-cev.modify.cli"></a>

要通过使用 AWS CLI 修改 CEV，请运行 [modify-custom-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-custom-db-engine-version.html) 命令。您可以通过运行 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 命令查找要修改的 CEV。

以下选项为必填：
+ `--engine engine-type`，其中 *engine-type* 为 `custom-oracle-ee`、`custom-oracle-se2`、`custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb`
+ `--engine-version cev`，其中 *`cev`* 是要修改的自定义引擎版本的名称
+ `--status`` status`，其中 *`status`* 是您希望分配给 CEV 的可用状态。

以下示例将名为 `19.my_cev1` 的 CEV 从当前状态更改为 `inactive`。

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

```
1. aws rds modify-custom-db-engine-version \
2.     --engine custom-oracle-se2 \ 
3.     --engine-version 19.my_cev1 \
4.     --status inactive
```
对于 Windows：  

```
1. aws rds modify-custom-db-engine-version ^
2.     --engine custom-oracle-se2 ^
3.     --engine-version 19.my_cev1 ^
4.     --status inactive
```

# 查看 Amazon RDS Custom for Oracle 的 CEV 详细信息
<a name="custom-cev.view"></a>

您可以使用 AWS 管理控制台或 AWS CLI 查看有关 CEV 清单和用于创建 CEV 的命令的详细信息。

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

**查看 CEV 详细信息**

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

1. 在导航窗格中，选择 **Custom engine versions**（自定义引擎版本）。

   **Custom engine versions**（自定义引擎版本）页面显示了当前存在的所有 CEV。如果您尚未创建任何 CEV，则该页面为空。

1. 选择要查看的 CEV 的名称。

1. 选择 **Configuration**（配置）以查看在清单中指定的安装参数。  
![\[查看 CEV 的安装参数。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/cev-configuration-tab.png)

1. 选择 **Manifest**（清单）以查看在 `create-custom-db-engine-version` 命令的 `--manifest` 选项中指定的安装参数。您可以复制此文本，根据需要替换值，然后在新命令中使用它们。  
![\[查看用于创建 CEV 的命令。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/cev-manifest-tab.png)

## AWS CLI
<a name="custom-cev.view.CEV"></a>

要通过使用 AWS CLI 查看有关 CEV 的详细信息，请运行 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 命令。

以下选项为必填：
+ `--engine engine-type`，其中 *engine-type* 为 `custom-oracle-ee`、`custom-oracle-se2`、`custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb`
+ `--engine-version major-engine-version.customized_string`

以下示例创建一个使用 Enterprise Edition 的非 CDB CEV。CEV 名称 `19.my_cev1` 以主要引擎版本号开头，这是必需项。

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

```
1. aws rds describe-db-engine-versions \
2.     --engine custom-oracle-ee \
3.     --engine-version 19.my_cev1
```
对于 Windows：  

```
1. aws rds describe-db-engine-versions ^
2.     --engine custom-oracle-ee ^
3.     --engine-version 19.my_cev1
```
以下不完整的示例输出显示了引擎、参数组、清单和其他信息。  

```
 1. "DBEngineVersions": [
 2.     {
 3.         "Engine": "custom-oracle-ee",
 4.         "MajorEngineVersion": "19",
 5.         "EngineVersion": "19.my_cev1",
 6.         "DatabaseInstallationFilesS3BucketName": "us-east-1-123456789012-cev-customer-installation-files",
 7.         "DatabaseInstallationFilesS3Prefix": "123456789012/cev1",
 8.         "CustomDBEngineVersionManifest": "{\n\"mediaImportTemplateVersion\": \"2020-08-14\",\n\"databaseInstallationFileNames\": [\n\"V982063-01.zip\"\n],\n\"installationParameters\": {\n\"oracleBase\":\"/tmp\",\n\"oracleHome\":\"/tmp/Oracle\"\n},\n\"opatchFileNames\": [\n\"p6880880_190000_Linux-x86-64.zip\"\n],\n\"psuRuPatchFileNames\": [\n\"p32126828_190000_Linux-x86-64.zip\"\n],\n\"otherPatchFileNames\": [\n\"p29213893_1910000DBRU_Generic.zip\",\n\"p29782284_1910000DBRU_Generic.zip\",\n\"p28730253_190000_Linux-x86-64.zip\",\n\"p29374604_1910000DBRU_Linux-x86-64.zip\",\n\"p28852325_190000_Linux-x86-64.zip\",\n\"p29997937_190000_Linux-x86-64.zip\",\n\"p31335037_190000_Linux-x86-64.zip\",\n\"p31335142_190000_Generic.zip\"\n]\n}\n",
 9.         "DBParameterGroupFamily": "custom-oracle-ee-19",
10.         "DBEngineDescription": "Oracle Database server EE for RDS Custom",
11.         "DBEngineVersionArn": "arn:aws:rds:us-west-2:123456789012:cev:custom-oracle-ee/19.my_cev1/0a123b45-6c78-901d-23e4-5678f901fg23",
12.         "DBEngineVersionDescription": "test",
13.         "KMSKeyId": "arn:aws:kms:us-east-1:123456789012:key/ab1c2de3-f4g5-6789-h012-h3ijk4567l89",
14.         "CreateTime": "2022-11-18T09:17:07.693000+00:00",
15.         "ValidUpgradeTarget": [
16.         {
17.             "Engine": "custom-oracle-ee",
18.             "EngineVersion": "19.cev.2021-01.09",
19.             "Description": "test",
20.             "AutoUpgrade": false,
21.             "IsMajorVersionUpgrade": false
22.         }
23. ]
```

# 删除 CEV
<a name="custom-cev.delete"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 删除 CEV。删除通常需要花费几分钟的时间。

要删除 CEV，它不能被以下任何一项使用：
+ RDS Custom 数据库实例
+ RDS Custom 数据库实例的快照
+ RDS Custom 数据库实例的自动备份

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

**要删除 CEV**

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

1. 在导航窗格中，选择 **Custom engine versions**（自定义引擎版本）。

1. 选择要删除其描述或状态的 CEV。

1. 对于**操作**，选择**删除**。

   **Delete *cev\$1name*?**（删除 cev\$1name？）对话框显示。

1. 输入 **delete me**，然后选择**删除**。

   在 **Custom engine versions**（自定义引擎版本）页面中，横幅显示您的 CEV 正在被删除。

## AWS CLI
<a name="custom-cev.create.console.cli"></a>

要通过使用 AWS CLI 删除 CEV，请运行 [delete-custom-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-custom-db-engine-version.html) 命令。

以下选项为必填：
+ `--engine engine-type`，其中 *engine-type* 为 `custom-oracle-ee`、`custom-oracle-se2`、`custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb`
+ `--engine-version cev` ，其中 *cev* 是要删除的自定义引擎版本的名称

以下示例会删除名为 `19.my_cev1` 的 CEV。

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

```
1. aws rds delete-custom-db-engine-version \
2.     --engine custom-oracle-ee \
3.     --engine-version 19.my_cev1
```
对于 Windows：  

```
1. aws rds delete-custom-db-engine-version ^
2.     --engine custom-oracle-ee ^
3.     --engine-version 19.my_cev1
```

# 为 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
   ```

# 管理 Amazon RDS Custom for Oracle 数据库实例
<a name="custom-managing"></a>

Amazon RDS Custom 支持 Amazon RDS 数据库实例的常见管理任务子集。在下文中，您可以找到使用 AWS 管理控制台和 AWS CLI 的受支持的 RDS Custom for Oracle 管理任务的说明。

**Topics**
+ [在 RDS Custom for Oracle 中使用容器数据库（CDB）](custom-managing.multitenant.md)
+ [使用 RDS Custom for Oracle 的高可用性特征](custom-managing.ha.md)
+ [自定义 RDS Custom 环境](custom-managing.customizing-env.md)
+ [修改 RDS Custom for Oracle 数据库实例](custom-managing.modifying.md)
+ [更改 RDS Custom for Oracle 数据库实例的字符集](custom-managing.character-set.md)
+ [在 RDS Custom for Oracle 中设置 NLS\$1LANG 值](custom-managing.nlslang.md)
+ [支持透明数据加密](#custom-managing.tde)
+ [为 RDS Custom for Oracle 资源添加标签](custom-managing.tagging.md)
+ [删除 RDS Custom for Oracle 数据库实例](custom-managing.deleting.md)

# 在 RDS Custom for Oracle 中使用容器数据库（CDB）
<a name="custom-managing.multitenant"></a>

您可以使用 Oracle 多租户架构（`custom-oracle-ee-cdb` 或 `custom-oracle-se2-cdb` 引擎类型）或传统的非 CDB 架构（`custom-oracle-ee` 或 `custom-oracle-se2` 引擎类型）创建 RDS Custom for Oracle 数据库实例。创建容器数据库（CDB）时，它包含一个可插拔数据库（PDB）和一个 PDB 种子。您可以使用 Oracle SQL 手动创建其他 PDB。

## PDB 和 CDB 名称
<a name="custom-managing.pdb-names"></a>

创建 RDS Custom for Oracle CDB 实例时，您需要为初始 PDB 指定名称。默认情况下，初始 PDB 命名为 `ORCL`。您可以选择其他名称。

默认情况下，您的 CDB 命名为 `RDSCDB`。您可以选择其他名称。CDB 名称也是您的 Oracle 系统标识符（SID）的名称，它唯一标识管理 CDB 的内存和进程。有关 Oracle SID 的更多信息，请参阅《Oracle 数据库概念》**中的 [Oracle 系统标识符（SID）](https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/oracle-database-instance.html#GUID-8BB8140D-63ED-454E-AAC3-1964F80D102D)。

您无法使用 Amazon RDS API 重命名现有 PDB。您也无法使用 `modify-db-instance` 命令重命名 CDB。

## PDB 管理
<a name="custom-managing.pdb-creation"></a>

在 RDS Custom for Oracle 责任共担模式下，您负责管理 PDB 和创建任何其他 PDB。RDS Custom 不限制 PDB 的数量。您可以通过连接到 CDB 根目录并运行 SQL 语句来手动创建、修改和删除 PDB。在 Amazon EBS 数据卷上创建 PDB，以防止数据库实例超出支持边界。

要修改 CDB 或 PDB，请完成以下步骤：

1. 暂停自动化以防止干扰 RDS Custom 操作。

1. 修改您的 CDB 或 PDB。

1. 备份任何修改过的 PDB。

1. 恢复 RDS Custom 自动化。

## CDB 根目录的自动恢复
<a name="custom-managing.cdb-root"></a>

RDS Custom 保持 CDB 根目录处于打开状态的方式与保持非 CDB 打开的方式相同。如果 CDB 根目录的状态发生变化，监控和恢复自动化会尝试将 CDB 根目录恢复到所需状态。与非 CDB 架构类似，当根 CDB 关闭（`RDS-EVENT-0004`）或重新启动（`RDS-EVENT-0006`）时，您会收到 RDS 事件通知。RDS Custom 尝试在数据库实例启动时以 `READ WRITE` 模式打开所有 PDB。如果某些 PDB 无法打开，RDS Custom 会发布以下事件：`tenant database shutdown`。

# 使用 RDS Custom for Oracle 的高可用性特征
<a name="custom-managing.ha"></a>

RDS Custom for Oracle 通过多可用区部署提供内置的高可用性。或者，您可以根据自己的使用案例将 Oracle Data Guard 用作客户自主管理型选项。

## 多可用区部署（完全托管式）
<a name="rds-custom-oracle-multiaz-deployments"></a>

借助 RDS Custom for Oracle 的多可用区部署，Amazon RDS 自动在不同的可用区（AZ）中预置和维护一个同步备用副本。主数据库实例可以跨可用区同步复制到备用副本，以实现数据冗余。企业版和标准版 2 都支持多可用区部署。有关详细信息，请参阅 [管理 RDS Custom for Oracle 的多可用区部署](custom-oracle-multiaz.md)。

## Oracle Data Guard（客户自主管理型）
<a name="rds-custom-oracle-data-guard"></a>

或者，您可以通过手动配置 Oracle Data Guard 以便在 RDS Custom for Oracle 数据库实例之间复制数据，从而实现高可用性。主数据库实例会自动将数据同步到备用实例。Oracle Data Guard 仅在企业版中受支持。

您可以通过以下方式配置高可用性环境：
+ 在不同可用区中配置备用实例，以应对可用区故障。
+ 将备用数据库置于挂载模式或只读模式。只读模式需要 Oracle Active Data Guard 许可证。
+ 故障转移或从主数据库切换到备用数据库，而不会丢失数据。
+ 通过为本地实例配置高可用性，然后失效转移或切换到 RDS Custom for Oracle 备用数据库来迁移数据。

要了解如何配置 Oracle Data Guard 来实现高可用性，请参阅 AWS 博客 [Build high availability for RDS Custom for Oracle using read replicas](https://aws.amazon.com/blogs/database/build-high-availability-for-amazon-rds-custom-for-oracle-using-read-replicas/)。您可以执行以下任务：
+ 使用虚拟专用网络 (VPN) 隧道为您的高可用性实例进行传输中的数据加密。RDS Custom for Oracle 不会自动配置传输中加密。
+ 配置 Oracle 快速故障转移观察器 (FSFO) 以监控您的高可用性实例。
+ 在满足必要条件时，允许观察期执行自动故障转移。

# 自定义 RDS Custom 环境
<a name="custom-managing.customizing-env"></a>

RDS Custom for Oracle 包含内置特征，允许您在不暂停自动化的情况下自定义数据库实例环境。例如，您可以使用 RDS API 自定义您的环境，如下所示：
+ 创建和还原数据库快照以创建克隆环境。
+ 创建只读副本。
+ 修改存储设置。
+ 更改 CEV 以应用版本更新

对于某些自定义，例如更改字符集，您不能使用 RDS API。在这些情况下，您需要通过以根用户身份访问 Amazon EC2 实例或以 `SYSDBA` 身份登录 Oracle 数据库来手动更改环境。

要手动自定义您的实例，您必须暂停并恢复 RDS Custom 自动化。这一暂停可确保您的自定义项不会干扰 RDS Custom 自动化。通过这种方式，您可以避免突破支持边界，这会将实例置于 `unsupported-configuration` 状态，直到您修复底层问题为止。修改 RDS Custom for Oracle 数据库实例时，暂停和恢复是唯一受支持的自动化任务。

## 自定义 RDS Custom 环境的一般步骤
<a name="custom-managing.pausing.general-steps"></a>

要自定义 RDS Custom 数据库实例，请完成以下步骤：

1. 使用控制台或 CLI 在指定的时间内暂停 RDS Custom 自动化 

1. 识别您的底层 Amazon EC2 实例。

1. 通过使用 SSH 密钥或 AWS Systems Manager 连接到底层 Amazon EC2 实例。

1. 在数据库或操作系统层验证您的当前配置设置。

   您可以通过将初始配置与更改的配置进行比较来验证您的更改。根据自定义类型，使用操作系统工具或数据库查询。

1. 根据需要自定义 RDS Custom for Oracle 数据库实例。

1. 如果需要，重启您的实例或数据库。
**注意**  
在本地 Oracle CDB 中，您可以使用内置命令或在启动触发器之后为 PDB 保留指定的打开模式。当 CDB 重新启动时，此机制使 PDB 进入指定状态。打开 CDB 时，RDS Custom 自动化会丢弃任何用户指定的保留状态，并尝试打开所有 PDB。如果 RDS Custom 无法打开所有 PDB，则会发出以下事件：`The following PDBs failed to open: list-of-PDBs`。

1. 通过将您的新配置设置与以前的设置进行比较，对其进行验证。

1. 通过以下任一方式恢复 RDS Custom 自动化：
   + 手动恢复自动化。
   + 等待暂停期结束。在这种情况下，RDS Custom 会自动恢复监控和实例恢复。

1. 验证 RDS Custom 自动化框架

   如果您正确执行了上述步骤，RDS Custom 将启动自动备份。控制台中实例的状态显示为**可用**。

有关最佳实践和分步说明，请参阅 AWS 博客文章[对 Amazon RDS Custom for Oracle 实例进行配置更改：第 1 部分](https://aws.amazon.com/blogs/database/part-1-make-configuration-changes-to-an-amazon-rds-custom-for-oracle-instance/)和[重新创建 Amazon RDS Custom for Oracle 数据库：第 2 部分](https://aws.amazon.com/blogs/database/part-2-recreate-an-amazon-rds-custom-for-oracle-database/)。

## 暂停和恢复 RDS Custom 数据库实例
<a name="custom-managing.pausing"></a>

您可以使用控制台或 CLI 暂停和恢复数据库实例的自动化。

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

**要暂停或恢复 RDS Custom 自动化**

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

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

1. 选择**修改**。将显示**修改数据库实例**页面。

1. 对于 **RDS Custom automation mode**（RDS Custom 自动化模式），请选择以下选项之一：
   + **Paused**（已暂停）将暂停 RDS Custom 数据库实例的监控和实例恢复。为 **Automation mode duration**（自动化模式持续时间）输入您想要的暂停持续时间。最小值为 60 分钟（默认值）。最大值为 1440 分钟。
   + **Full automation**（完全自动化）将恢复自动化。

1. 请选择 **Continue**（继续），以查看修改摘要。

   将显示一条消息，表示 RDS Custom 将立即应用更改。

1. 如果更改正确无误，请选择 **Modify DB Instance**（修改数据库实例）。也可以选择 **Back (返回)** 编辑您的更改，或选择 **Cancel (取消)** 取消更改。

   在 RDS 控制台上，将显示修改的详细信息。如果您暂停了自动化，RDS Custom 数据库实例的 **Status**（状态）将指示 **Automation paused**（自动化已暂停）。

1. （可选）在导航窗格中，选择 **Databases (数据库)**，然后选择 RDS Custom 数据库实例。

   在 **Summary**（摘要）窗格中，**RDS Custom automation mode**（RDS Custom 自动化模式）表示自动化状态。如果自动化已暂停，则值为 **Paused（已暂停）。自动化将在 *num* 分钟内恢复**。

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

要暂停或恢复 RDS Custom 自动化，请使用 `modify-db-instance` AWS CLI 命令。使用必需的参数 `--db-instance-identifier` 识别数据库实例。使用以下参数控制自动化模式：
+ `--automation-mode` 指定数据库实例的暂停状态。有效值为 `all-paused`，它将暂停自动化，以及 `full`，它将恢复自动化。
+ `--resume-full-automation-mode-minutes` 指定暂停的持续时间。默认值为 60 分钟。

**注意**  
无论您是指定 `--no-apply-immediately` 还是 `--apply-immediately`，RDS Custom 都会尽快地异步应用修改。

在命令响应中，`ResumeFullAutomationModeTime` 以 UTC 时间戳表示恢复时间。当自动化模式为 `all-paused` 时，您可以使用 `modify-db-instance` 恢复自动化模式或延长暂停时间。不支持其他 `modify-db-instance` 选项。

以下示例将 `my-custom-instance` 的自动化暂停 90 分钟。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --automation-mode all-paused \
    --resume-full-automation-mode-minutes 90
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --automation-mode all-paused ^
    --resume-full-automation-mode-minutes 90
```

以下示例将暂停持续时间再延长 30 分钟。在 `ResumeFullAutomationModeTime` 中显示的原始时间中增加 30 分钟。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --automation-mode all-paused \
    --resume-full-automation-mode-minutes 30
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --automation-mode all-paused ^
    --resume-full-automation-mode-minutes 30
```

以下示例恢复 `my-custom-instance` 的完全自动化。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --automation-mode full \
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --automation-mode full
```
在以下部分示例输出中，待处理 `AutomationMode` 值为 `full`。  

```
{
    "DBInstance": {
        "PubliclyAccessible": true,
        "MasterUsername": "admin",
        "MonitoringInterval": 0,
        "LicenseModel": "bring-your-own-license",
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "0123456789abcdefg"
            }
        ],
        "InstanceCreateTime": "2020-11-07T19:50:06.193Z",
        "CopyTagsToSnapshot": false,
        "OptionGroupMemberships": [
            {
                "Status": "in-sync",
                "OptionGroupName": "default:custom-oracle-ee-19"
            }
        ],
        "PendingModifiedValues": {
            "AutomationMode": "full"
        },
        "Engine": "custom-oracle-ee",
        "MultiAZ": false,
        "DBSecurityGroups": [],
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "default.custom-oracle-ee-19",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        ...
        "ReadReplicaDBInstanceIdentifiers": [],
        "AllocatedStorage": 250,
        "DBInstanceArn": "arn:aws:rds:us-west-2:012345678912:db:my-custom-instance",
        "BackupRetentionPeriod": 3,
        "DBName": "ORCL",
        "PreferredMaintenanceWindow": "fri:10:56-fri:11:26",
        "Endpoint": {
            "HostedZoneId": "ABCDEFGHIJKLMNO",
            "Port": 8200,
            "Address": "my-custom-instance.abcdefghijk.us-west-2.rds.amazonaws.com"
        },
        "DBInstanceStatus": "automation-paused",
        "IAMDatabaseAuthenticationEnabled": false,
        "AutomationMode": "all-paused",
        "EngineVersion": "19.my_cev1",
        "DeletionProtection": false,
        "AvailabilityZone": "us-west-2a",
        "DomainMemberships": [],
        "StorageType": "gp2",
        "DbiResourceId": "db-ABCDEFGHIJKLMNOPQRSTUVW",
        "ResumeFullAutomationModeTime": "2020-11-07T20:56:50.565Z",
        "KmsKeyId": "arn:aws:kms:us-west-2:012345678912:key/aa111a11-111a-11a1-1a11-1111a11a1a1a",
        "StorageEncrypted": false,
        "AssociatedRoles": [],
        "DBInstanceClass": "db.m5.xlarge",
        "DbInstancePort": 0,
        "DBInstanceIdentifier": "my-custom-instance",
        "TagList": []
    }
```

# 修改 RDS Custom for Oracle 数据库实例
<a name="custom-managing.modifying"></a>

修改 RDS Custom for Oracle 数据库实例与修改 Amazon RDS 数据库实例类似。您可以更改如下设置：
+ 数据库实例类
+ 存储分配和类型
+ 备份保留期
+ 删除保护
+ 选项组
+ CEV（请参阅[升级 RDS Custom for Oracle 数据库实例](custom-upgrading-modify.md)）
+ 端口

**Topics**
+ [修改数据库实例存储时的要求和限制](#custom-managing.storage-modify)
+ [修改数据库实例类时的要求和限制](#custom-managing.instance-class-reqs)
+ [修改实例类时 RDS Custom 如何创建数据库实例](#custom-managing.instance-class-resources)
+ [修改 RDS Custom for Oracle 数据库实例](#custom-managing.modifying.procedure)

## 修改数据库实例存储时的要求和限制
<a name="custom-managing.storage-modify"></a>

当您修改 RDS Custom for Oracle 数据库实例的存储时，应考虑以下要求和限制：
+ RDS Custom for Oracle 的最低分配存储空间为 40GiB，最大值为 64TiB。
+ 与 Amazon RDS 一样，您无法减少分配的存储。这是对 Amazon EBS 卷的限制。
+ RDS Custom 数据库实例不支持存储弹性伸缩。
+ 手动附加到 RDS Custom 数据库实例的任何存储卷都在支持外围之外。

  有关更多信息，请参阅 [RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。
+ RDS Custom 不支持磁性（标准）Amazon EBS 存储。只能选择 io1、io2、gp2 或 gp3 SSD 存储类型。

有关 Amazon EBS 存储的更多信息，请参阅[Amazon RDS 数据库实例存储](CHAP_Storage.md)。有关存储修改的一般信息，请参阅[使用 Amazon RDS 数据库实例的存储](USER_PIOPS.StorageTypes.md)。

## 修改数据库实例类时的要求和限制
<a name="custom-managing.instance-class-reqs"></a>

当您修改 RDS Custom for Oracle 数据库实例的实例类时，应考虑以下要求和限制：
+ 数据库实例必须处于 `available` 状态。
+ 您的数据库实例在根卷、数据卷和二进制卷上必须至少有 100 MiB 的可用空间。
+ 使用默认弹性网络接口（ENI）时，您只能为 RDS Custom for Oracle 数据库实例分配单个弹性 IP（EIP）。如果您将多个 ENI 连接到数据库实例，修改操作将失败。
+ 所有 RDS Custom for Oracle 标签都必须存在。
+ 如果您使用 RDS Custom for Oracle 复制，请注意以下要求和限制：
  + 对于主数据库实例和只读副本，您一次只能更改一个数据库实例的实例类。
  + 如果您的 RDS Custom for Oracle 数据库实例具有本地主数据库或副本数据库，请确保在修改完成后手动更新本地数据库实例上的私有 IP 地址。此操作是保留 Oracle DataGuard 功能所必需的。修改成功后，RDS Custom for Oracle 会发布事件。
  + 当主数据库实例或只读副本数据库实例配置了 FSFO（快速启动失效转移）时，您无法修改 RDS Custom for Oracle 数据库实例类。

## 修改实例类时 RDS Custom 如何创建数据库实例
<a name="custom-managing.instance-class-resources"></a>

当您修改实例类时，RDS Custom 将按如下方式创建数据库实例：
+ 创建 Amazon EC2 实例。
+ 从最新的数据库快照创建根卷。RDS Custom for Oracle 不保留在最新数据库快照之后添加到根卷的信息。
+ 创建 Amazon CloudWatch 告警。
+ 如果删除了原始密钥对，则创建 Amazon EC2 SSH 密钥对。否则，RDS Custom for Oracle 保留原始密钥对。
+ 使用启动修改时附加到数据库实例的标签创建新资源。当新资源直接附加到底层资源时，RDS Custom 不会将标签传输到新资源。
+ 将包含最新修改的二进制和数据卷传输到新数据库实例。
+ 传输弹性 IP 地址（EIP）。如果数据库实例可公开访问，则在传输 EIP 之前，RDS Custom 会临时将公有 IP 地址附加到新的数据库实例。如果数据库实例不可供公开访问，则 RDS Custom 不创建公有 IP 地址。

## 修改 RDS Custom for Oracle 数据库实例
<a name="custom-managing.modifying.procedure"></a>

您可以使用控制台、AWS CLI 或 RDS API 修改数据库实例类或存储。

### 控制台
<a name="custom-managing.modifying.procedure.CON"></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. 选择**修改**。

1. （可选）在**实例配置**中，为**数据库实例类**选择一个值。有关支持的类，请参阅 [RDS Custom for Oracle 的数据库实例类支持](custom-oracle-feature-support.md#custom-reqs-limits.instances)。

1. （可选）在**存储**中，根据需要进行以下更改：

   1. 为 **Allocated Storage (分配的存储)** 输入新值。它必须大于当前值，且范围从 40GiB 到 64TiB。

   1. 将**存储类型**的值更改为**通用型 SSD（gp2）**、**通用型 SSD（gp3）**、**预调配 IOPS（io1）**或**预调配 IOPS（io2）**。

   1. 如果您指定的存储类型不是**通用型 SSD（gp2）**，则可以更改**预调配 IOPS** 值。

1. （可选）对于**其它配置**，根据需要执行以下更改：

   1. 对于**选项组**，选择新的选项组。有关更多信息，请参阅 [使用 RDS Custom for Oracle 中的选项组](custom-oracle-option-groups.md)。

1. 选择 **Continue (继续)**。

1. 选择 **Apply immediately**（立即应用）或 **Apply during the next scheduled maintenance window**（在下一个计划的维护时段内应用）。

1. 选择**修改数据库实例**。

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

要修改 RDS Custom for Oracle 数据库实例的存储，请使用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI 命令。根据需要设置以下参数：
+ `--db-instance-class` – 一个新的实例类。有关支持的类，请参阅 [RDS Custom for Oracle 的数据库实例类支持](custom-oracle-feature-support.md#custom-reqs-limits.instances)。
+ `--allocated-storage` – 要为数据库实例分配的存储量（以 GiB 为单位）。它必须大于当前值，并且范围从 40 到 65536GiB。
+ `--storage-type` – 存储类型：gp2、gp3、io1 或 io2。
+ `--iops` – 如果使用 io1、io2 或 gp3 存储类型，则为数据库实例的预调配 IOPS。
+ `--apply-immediately` – 使用 `--apply-immediately` 可立即应用存储更改。

  或使用 `--no-apply-immediately`（默认设置）以在下一个维护时段内应用更改。

以下示例将 `my-cfo-instance` 的数据库实例类更改为 `db.m5.16xlarge`。该命令还将存储大小更改为 `1024`（1 TiB），将存储类型更改为 `io2`，将预调配 IOPS 更改为 `3000`，并将选项组更改为 `cfo-ee-19-mt`。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-cfo-instance \
    --db-instance-class db.m5.16xlarge \
    --storage-type io2 \
    --iops 3000 \
    --allocated-storage 1024 \
    --option-group cfo-ee-19-mt \
    --apply-immediately
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-cfo-instance ^
    --db-instance-class db.m5.16xlarge ^
    --storage-type io2 ^
    --iops 3000 ^
    --allocated-storage 1024 ^
    --option-group cfo-ee-19-mt ^
    --apply-immediately
```

# 更改 RDS Custom for Oracle 数据库实例的字符集
<a name="custom-managing.character-set"></a>

RDS Custom for Oracle 默认使用字符集 US7ASCII。您可能需要指定不同的字符集以满足语言或多字节字符要求。使用 RDS Custom for Oracle 时，可以暂停自动化，然后手动更改数据库的字符集。

更改 RDS Custom for Oracle 数据库实例的字符集具有以下要求：
+ 您只能更改新预调配的 RDS 自定义实例上的字符，该实例具有空数据库或初学者数据库，其中没有应用程序数据。对于所有其他情况，请使用 DMU（Unicode 的数据库迁移助手）更改字符集。
+ 您只能更改为 RDS for Oracle 支持的字符集。有关更多信息，请参阅 [支持的数据库字符集](Appendix.OracleCharacterSets.md#Appendix.OracleCharacterSets.db-character-set.supported)。

**更改 RDS Custom for Oracle 数据库实例的字符集**

1. 暂停 RDS Custom 自动化。有关更多信息，请参阅 [暂停和恢复 RDS Custom 数据库实例](custom-managing.customizing-env.md#custom-managing.pausing)。

1. 以具有 `SYSDBA` 权限的用户身份登录数据库。

1. 在受限模式下重新启动数据库，更改字符集，然后以正常模式重新启动数据库。

   在 SQL 客户端中运行以下脚本：

   ```
   SHUTDOWN IMMEDIATE;
   STARTUP RESTRICT;
   ALTER DATABASE CHARACTER SET INTERNAL_CONVERT AL32UTF8;
   SHUTDOWN IMMEDIATE;
   STARTUP;
   SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
   ```

   验证输出是否显示了正确的字符集：

   ```
   VALUE
   --------
   AL32UTF8
   ```

1. 恢复 RDS Custom 自动化。有关更多信息，请参阅 [暂停和恢复 RDS Custom 数据库实例](custom-managing.customizing-env.md#custom-managing.pausing)。

# 在 RDS Custom for Oracle 中设置 NLS\$1LANG 值
<a name="custom-managing.nlslang"></a>

*区域设置* 是一组满足语言和文化要求的信息，这些信息对应于给定的语言和国家/地区。要指定 Oracle 软件的区域设置行为，请在客户端主机上设置 `NLS_LANG` 环境变量。此变量设置客户端应用程序在数据库会话中使用的语言、区域和字符集。

对于 RDS Custom for Oracle，在 `NLS_LANG` 变量中只能设置语言：区域和字符使用默认值。语言用于 Oracle 数据库消息、排序规则、日期名称和月份名称。每种支持的语言都有一个唯一名称，例如美语、法语或德语。如果未指定语言，则值默认为美语。

创建 RDS Custom for Oracle 数据库后，可以在客户端主机上将 `NLS_LANG` 设置为英语以外的其他语言。要查看 Oracle 数据库支持的语言列表，请登录 RDS Custom for Oracle 数据库并运行以下查询：

```
SELECT VALUE FROM V$NLS_VALID_VALUES WHERE PARAMETER='LANGUAGE' ORDER BY VALUE;
```

可以在主机命令行上设置 `NLS_LANG`。以下示例使用 Linux 上的 Z Shell 将客户端应用程序的语言设置为德语。

```
export NLS_LANG=German
```

您的应用程序在启动时读取 `NLS_LANG` 值，然后在连接时将其传送给数据库。

有关更多信息，请参阅《Oracle 数据库全球化支持指南》**中的[使用 NLS\$1LANG 环境变量选择区域设置](https://docs.oracle.com/en/database/oracle/oracle-database/21/nlspg/setting-up-globalization-support-environment.html#GUID-86A29834-AE29-4BA5-8A78-E19C168B690A)。

## 支持透明数据加密
<a name="custom-managing.tde"></a>

RDS Custom 支持 RDS Custom for Oracle 数据库实例的透明数据加密 (TDE)。

但是，您不能像在 RDS for Oracle 中那样使用自定义选项组中的选项启用 TDE。您可以手动打开 TDE。有关使用 Oracle 透明数据加密的信息，请参阅 Oracle 文档中的[使用透明数据加密保护存储数据安全](http://docs.oracle.com/cd/E11882_01/network.112/e40393/asotrans.htm#BABFGJAG)。

# 为 RDS Custom for Oracle 资源添加标签
<a name="custom-managing.tagging"></a>

您可以将 RDS Custom 资源与 Amazon RDS 资源一样标记，但有一些重要的区别：
+ 不要创建或修改 RDS Custom 自动化所需的 `AWSRDSCustom` 标签。如果您这样做，可能会破坏自动化。
+ `Name` 标签将添加到 RDS Custom 资源，前缀值为 `do-not-delete-rds-custom` 或 `rds-custom!oracle-do-not-delete`。任何客户传递的键值都将被覆盖。
+ 在创建过程中添加到 RDS Custom 数据库实例的标签将传播到所有其他相关 RDS Custom 资源。
+ 当您在创建数据库实例后将标签添加到 RDS Custom 资源时，标签不会传播。

有关资源标记的一般信息，请参阅[为 Amazon RDS 资源添加标签](USER_Tagging.md)。

# 删除 RDS Custom for Oracle 数据库实例
<a name="custom-managing.deleting"></a>

**警告**  
删除数据库实例是一项永久性操作。除非您有备份或快照，否则无法在删除数据库实例后恢复该实例。  
当您删除 RDS Custom 数据库实例时，AWS 会自动删除底层 Amazon EC2 实例和 EBS 卷。在通过 Amazon RDS 删除数据库实例之前，请勿手动终止 Amazon EC2 实例或删除 EBS 卷。手动删除这些资源会导致数据库实例删除和最终快照创建失败，从而无法进行恢复。

要删除 RDS Custom 数据库实例，请执行以下操作：
+ 提供数据库实例的名称。
+ 清除拍摄数据库实例的最终数据库快照的选项。
+ 选择或清除保留自动备份的选项。

您可以使用控制台或 CLI 删除 RDS Custom 数据库实例。删除数据库实例所需的时间可能会根据备份保留期（也即，要删除的备份数）以及删除的数据量而有所不同。

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

**要删除 RDS Custom 数据库实例**

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

1. 在导航窗格中，选择 **Databases (数据库)**，然后选择要删除的 RDS Custom 数据库实例。RDS Custom 数据库实例显示角色 **Instance (RDS Custom)**（实例 (RDS Custom)）。

1. 对于**操作**，选择**删除**。

1. 要保留自动备份，请选择 **Retain automated backups (保留自动备份)**。

1. 在框中输入 **delete me**。

1. 选择 **Delete**。

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

您可以通过使用 [delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html) AWS CLI 命令删除 RDS Custom 数据库实例。使用必需的参数 `--db-instance-identifier` 识别数据库实例。其余参数与 Amazon RDS 数据库实例的参数相同，但以下各项除外：
+ `--skip-final-snapshot` 是必需的。
+ `--no-skip-final-snapshot` 不受支持。
+ `--final-db-snapshot-identifier` 不受支持。

以下示例删除名为 `my-custom-instance` 的 RDS Custom 数据库实例，并保留自动备份。

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

```
aws rds delete-db-instance \
    --db-instance-identifier my-custom-instance \
    --skip-final-snapshot \
    --no-delete-automated-backups
```
对于：Windows  

```
aws rds delete-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --skip-final-snapshot ^
    --no-delete-automated-backups
```

# 管理 RDS Custom for Oracle 的多可用区部署
<a name="custom-oracle-multiaz"></a>

在 RDS Custom for Oracle 的多可用区数据库实例部署中，Amazon RDS 会自动在不同可用区（AZ）中预置和维护一个同步备用副本。主数据库实例可以跨可用区同步复制到备用副本以提供数据冗余。

在计划内系统维护期间，多可用区数据库实例部署可提高可用性。如果进行计划内据库维护或发生计划外服务中断，Amazon RDS 会自动失效转移到最新的备用数据库实例。数据库操作可快速恢复，而不需要手动干预。主实例和备用实例使用相同的端点，其物理网络地址作为失效转移过程的一部分转换到备用副本。在失效转移时，您无需重新配置应用程序。

下图显示了 RDS Custom for Oracle 的多可用区架构：

![\[Amazon RDS architecture with primary DB instance and standby replica in separate availability zones.\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/custom-oracle-multiaz-architecture.png)


Amazon RDS 控制台显示备用副本的可用区（辅助可用区）。还可以使用 `describe-db-instances` CLI 命令或 `DescribeDBInstances` API 操作来查找辅助可用区。

## RDS Custom for Oracle 的多可用区部署的区域和版本可用性
<a name="custom-oracle-multiaz-availability"></a>

企业版（EE）和标准版 2（SE2）的以下版本支持 RDS Custom for Oracle 的多可用区部署：
+ Oracle Database 19c
+ Oracle Database 12c 第 2 版 (12.2)
+ Oracle Database 12c 第 1 版 (12.1)

**注意**  
Oracle Database 18c 不支持 RDS Custom for Oracle 的多可用区部署。

RDS Custom for Oracle 的多可用区部署在 RDS Custom for Oracle 可用的所有区域中均可用。有关 RDS Custom for Oracle 的多可用区部署的区域可用性的更多信息，请参阅[支持 RDS Custom for Oracle 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.ora)。

## RDS Custom for Oracle 中的多可用区部署限制
<a name="custom-oracle-multiaz-limitations"></a>

RDS Custom for Oracle 的多可用区部署具有以下限制：
+ 如果您在 2025 年 6 月 30 日之前创建了数据库实例，则无法将其从单可用区部署转换为多可用区部署。底层自定义引擎版本（CEV）是使用服务提供的旧版 AMI 构建的，该 AMI 缺少多可用区支持。您必须使用您在 2025 年 6 月 30 日之后通过服务提供的 AMI 创建的 CEV，来将数据库迁移到新的数据库实例。有关更多信息，请参阅 [使用 2025 年 6 月 30 日之前创建的 CEV 的数据库实例的迁移步骤](custom-oracle-multiaz-prerequisites.md#migration-using-older-CEVs)。
+ 您无法创建跨区域多可用区部署。
+ 您不能将备用数据库实例配置为接受数据库读取活动。
+ 当您在多可用区部署中使用自定义引擎版本（CEV）时，备用数据库实例会使用相同的 CEV。备用数据库实例无法使用不同的 CEV。
+ 您无法在多可用区部署实例上创建只读副本，也无法修改只读副本的主实例来具有多可用区部署。
+ 与单可用区部署相比，具有多可用区部署的 RDS Custom for Oracle 数据库实例的写入和提交延迟可能会增加。这种增加可能是由于数据库实例之间的同步数据复制造成的。尽管 AWS 设计用于在可用区之间提供低延迟网络连接，但如果您的部署故障转移到备用副本，延迟可能会发生变化。

## 在 RDS Custom for Oracle 中创建多可用区部署
<a name="custom-oracle-multiaz-creating"></a>

要创建采用多可用区部署的 RDS Custom for Oracle 数据库实例，请按照[为 Amazon RDS Custom for Oracle 设置您的环境](custom-setup-orcl.md)中的步骤操作，来根据先决条件设置您的环境。

**重要**  
为了简化设置，我们建议您使用网络设置说明中提供的最新 CloudFormation 模板文件。有关更多信息，请参阅 [使用 AWS CloudFormation 部署 RDS Custom for Oracle](custom-oracle-multiaz-deployment.md)。

可以通过在 Amazon RDS 控制台中创建数据库实例时选择**多可用区**选项，来创建一个采用多可用区部署的 RDS Custom for Oracle 实例。或者，您可以在 AWS CLI 的 Amazon RDS `create-db-instance` 命令中指定 `--multi-az` 参数。

# RDS Custom for Oracle 中的多可用区部署的先决条件
<a name="custom-oracle-multiaz-prerequisites"></a>

RDS Custom for Oracle 的多可用区部署与 RDS for Oracle 的多可用区不同。与 RDS for Oracle 的多可用区不同，在创建多可用区数据库实例之前，您必须满足 RDS Custom for Oracle 的先决条件。这是因为 RDS Custom 在您自己的账户中运行，这需要权限。此外，您需要使用服务提供的支持多可用区部署的最新 AMI 来在 CEV 上创建多可用区实例。

如果您未完成先决条件，则多可用区数据库实例可能无法运行，或者自动恢复为单可用区数据库实例。有关先决条件的更多信息，请参阅[RDS Custom for Oracle 中的多可用区部署的先决条件](#custom-oracle-multiaz-prerequisites)。

从单可用区部署转换为多可用区部署时，RDS Custom for Oracle 需要特定的先决条件。先决条件不完整会导致多可用区设置失败。使用手动设置或网络设置说明中提供的最新 CloudFormation 模板文件。有关更多信息，请参阅 [步骤 3：提取 RDS Custom for Oracle 的 CloudFormation 模板](custom-setup-orcl.md#custom-setup-orcl.cf.downloading)。

 要手动完成先决条件，请按照[将 RDS Custom for Oracle 中的单可用区部署转换为多可用区部署](custom-oracle-multiaz-modify-single-to-multi.md)中的步骤操作并注意以下事项：
+ 确保 RDS Custom for Oracle 数据库实例使用在 2025 年 6 月 30 日之后使用服务提供的最新 AMI 创建的 CEV。
+ 更新 Amazon RDS 安全组的入站和出站规则以允许端口 1120。
+ 创建新的 Amazon SQS VPC 端点，以支持 Amazon RDS Custom for Oracle 数据库实例与 Amazon SQS 通信。
+ 更新实例配置文件角色中的 Amazon SQS 权限。

**重要**  
如果未暂停 RDS Custom for Oracle 自动化，请勿通过登录多可用区主数据库实例来手动重启该实例。

## 使用 2025 年 6 月 30 日之前创建的 CEV 的数据库实例的迁移步骤
<a name="migration-using-older-CEVs"></a>

如果您在 2025 年 6 月 30 日之前创建了 RDS Custom for Oracle 数据库实例，则无法将其直接修改为多可用区部署，因为底层 CEV 是使用服务提供的不支持多可用区的旧版 AMI 构建的。您必须使用在 2025 年 6 月 30 日之后创建的 CEV 将数据库迁移到新实例。执行以下操作来进行迁移。

1. 使用服务提供的最新 AMI（2025 年 6 月 30 日之后）**从源创建 CEV**。

1. 使用新的 CEV **启动新的数据库实例**。

1. 使用以下方法之一，将数据库从不支持多可用区部署的现有数据库实例**迁移**到新创建的实例：
   + [Physical migration of Oracle databases to Amazon RDS Custom using Data Guard](https://aws.amazon.com/blogs//database/physical-migration-of-oracle-databases-to-amazon-rds-custom-using-data-guard/)
   + [Physical migration of Oracle databases to Amazon RDS Custom using RMAN duplication](https://aws.amazon.com/blogs//database/physical-migration-of-oracle-databases-to-amazon-rds-custom-using-rman-duplication/)

# 将 RDS Custom for Oracle 中的单可用区部署转换为多可用区部署
<a name="custom-oracle-multiaz-modify-single-to-multi"></a>

您可以将现有的多可用区兼容的 RDS Custom for Oracle 实例从单可用区部署转换为多可用区部署。修改数据库实例时，Amazon RDS 会执行多项操作：
+ 拍摄主数据库实例的快照。
+ 从快照中为备用副本创建新卷。这些卷在后台初始化，并在数据完全初始化后达到最大卷性能。
+ 开启主数据库实例与备用数据库实例之间的同步块级复制。

**重要**  
我们建议您避免在高峰活动期在生产数据库实例上将 RDS Custom for Oracle 数据库实例从单可用区部署修改为多可用区部署。

AWS 使用快照创建备用实例，以避免在从单可用区转换到多可用区时出现停机，但是在转换为多可用区期间和转换后，性能可能会受到影响。对于对写入延迟敏感的工作负载而言，这可能会产生很大的影响。尽管此功能允许快速从快照中还原大型卷，但由于同步复制，该功能可能会导致 I/O 操作的延迟增加。这种延迟可能会影响您的数据库性能。

## 使用 CloudFormation 配置先决条件，以将单可用区部署修改为多可用区部署
<a name="custom-oracle-multiaz-modify-cf-prereqs"></a>

按照[步骤 3：提取 RDS Custom for Oracle 的 CloudFormation 模板](custom-setup-orcl.md#custom-setup-orcl.cf.downloading)操作以再次设置 VPC 和 IAM 配置文件，以便在 IAM 配置文件中添加 SQS VPC 端点和 SQS 权限。

## 手动配置先决条件，以将单可用区部署修改为多可用区部署
<a name="custom-oracle-multiaz-modify-manual-prereqs"></a>

如果您选择手动配置先决条件，请执行以下任务。

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

1. 选择**端点**。**创建端点**页面显示。

1. 对于**服务类别**，选择 **AWS 服务**。

1. 在**服务**中，搜索 `SQS`。

1. 在 **VPC** 中，选择在其中部署 RDS Custom for Oracle 数据库实例的 VPC。

1. 在**子网**中，选择在其中部署 RDS Custom for Oracle 数据库实例的子网。

1. 在**安全组**中，选择在其中部署 RDS Custom for Oracle 数据库实例的安全组。

1. 对于**策略**，选择**自定义**。

1. 在自定义策略中，将 `AWS partition`、`Region`、`accountId` 和 `IAM-Instance-role` 替换为您自己的值。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Condition": {
                "StringLike": {
                    "aws:ResourceTag/AWSRDSCustom": "custom-oracle"
                }
            },
            "Action": [
                "SQS:SendMessage",
                "SQS:ReceiveMessage",
                "SQS:DeleteMessage",
                "SQS:GetQueueUrl"
            ],
            "Resource": "arn:aws:sqs:us-east-1:111122223333:do-not-delete-rds-custom-*",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/{IAM-Instance-role}"
            }
        }
    ]
}
```

------

使用访问 Amazon SQS 的权限更新**实例配置文件**。将 `AWS partition`、`Region` 和 `accountId` 替换为您自己的值。

```
{
    "Sid": "13",
    "Effect": "Allow",
    "Action": [
        "SQS:SendMessage",
        "SQS:ReceiveMessage",
        "SQS:DeleteMessage",
        "SQS:GetQueueUrl"
    ],
    "Resource": [
        {
            "Fn::Sub": "arn:${AWS::Partition}:sqs:${AWS::Region}:${AWS::AccountId}:do-not-delete-rds-custom-*"
        }
    ],
    "Condition": {
        "StringLike": {
            "aws:ResourceTag/AWSRDSCustom": "custom-oracle"
        }
    }
}
```

更新 Amazon RDS 安全组的入站和出站规则以允许端口 1120。
+ 在**安全组**中，选择在其中部署 RDS Custom for Oracle 数据库实例的组。
+ 对于**入站规则**，创建**自定义 TCP** 规则，以支持使用端口 `1120` 从源组进行连接。
+ 对于**出站规则**，创建**自定义 TCP** 规则，以支持使用端口 `1120` 连接到目标组。

## 使用 RDS 控制台、AWS CLI 或 RDS API 进行修改
<a name="custom-oracle-multiaz-modify-console-cli-api"></a>

完成先决条件后，您可以使用 Amazon RDS 控制台、AWS CLI 或 Amazon RDS API，将 RDS Custom for Oracle 数据库实例从单可用区部署修改为多可用区部署。

### 控制台
<a name="custom-oracle-multiaz-modify-console"></a>

**将现有 RDS Custom for Oracle 单可用区部署修改为多可用区部署**

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

1. 在 Amazon RDS 控制台中，选择**数据库**。随后会显示**数据库**窗格。

1. 选择要修改的 RDS Custom for Oracle 数据库实例。

1. 对于**操作**中，选择**转换为多可用区部署**。

1. 在**确认**页面上，选择**立即应用**以立即应用更改。选择此选项不会导致停机，但可能会对性能产生影响。或者，您可以选择在下一个维护时段内应用更新。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。

1. 在**确认**页面上，选择**转换为多可用区**。

### AWS CLI
<a name="custom-oracle-multiaz-modify-cli"></a>

要使用 AWS CLI 转换为多可用区数据库实例部署，请调用 [modify-db-instance](https://docs.aws.amazon.com//cli/latest/reference/rds/modify-db-instance.html) 命令并设置 `--multi-az` 选项。指定数据库实例标识符以及要修改的其他选项的值。有关各选项的信息，请参阅 [数据库实例的设置](USER_ModifyInstance.Settings.md)。

**Example 示例**  
以下代码通过包含 `--multi-az` 选项来修改 `mycustomdbinstance`。将在下一维护时段使用 `--no-apply-immediately` 应用这些更改。使用 `--apply-immediately` 可立即应用更改。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mycustomdbinstance \
    --multi-az \
    [--no-apply-immediately | --apply-immediately]
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier mycustomdbinstance ^
    --multi-az ^
    [--no-apply-immediately | --apply-immediately]
```

### RDS API
<a name="custom-oracle-multiaz-modify-api"></a>

要使用 Amazon RDS API 转换为多可用区数据库实例部署，请调用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作并将 `MultiAZ` 参数设置为 true。

# 将 RDS Custom for Oracle 中的多可用区部署转换为单可用区部署
<a name="custom-oracle-multiaz-modify-multi-to-single"></a>

您可以将现有的 RDS Custom for Oracle 数据库实例从多可用区部署修改为单可用区部署。

## 控制台
<a name="custom-oracle-multiaz-multi-to-single-console"></a>

**将 RDS Custom for Oracle 数据库实例从多可用区部署修改为单可用区部署**

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

1. 在 Amazon RDS 控制台中，选择**数据库**。随后会显示**数据库**窗格。

1. 选择要修改的 RDS Custom for Oracle 数据库实例。

1. 对于**多可用区部署**，请选择**否**。

1. 在**确认**页面上，选择**立即应用**以立即应用更改。选择此选项不会导致停机，但可能会对性能产生影响。或者，您可以选择在下一个维护时段内应用更新。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。

1. 在**确认**页面上，选择**修改数据库实例**。

## AWS CLI
<a name="custom-oracle-multiaz-multi-to-single-cli"></a>

要使用 AWS CLI 将多可用区部署修改为单可用区部署，请调用 [modify-db-instance](https://docs.aws.amazon.com//cli/latest/reference/rds/modify-db-instance.html) 命令并包含 `--no-multi-az` 选项。指定数据库实例标识符以及要修改的其他选项的值。有关各选项的信息，请参阅 [数据库实例的设置](USER_ModifyInstance.Settings.md)。

**Example 示例**  
以下代码通过包含 `--no-multi-az` 选项来修改 `mycustomdbinstance`。将在下一维护时段使用 `--no-apply-immediately` 应用这些更改。使用 `--apply-immediately` 可立即应用更改。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mycustomdbinstance \
    --no-multi-az \
    [--no-apply-immediately | --apply-immediately]
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier mycustomdbinstance ^
    --no-multi-az ^
    [--no-apply-immediately | --apply-immediately]
```

## RDS API
<a name="custom-oracle-multiaz-multi-to-single-api"></a>

要使用 Amazon RDS API 将多可用区部署修改为单可用区部署，请调用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作并将参数 `MultiAZ` 设置为 `false`。

# 在 RDS Custom for Oracle 多可用区部署中自定义操作系统
<a name="custom-oracle-multiaz-os-customization"></a>

借助 RDS Custom for Oracle 多可用区部署，您可以自定义操作系统，并在主实例和备用 EC2 实例上安装第三方软件。与 Amazon RDS 不同，RDS Custom for Oracle 提供对数据库环境和底层操作系统的管理访问权限，允许您在 Oracle 数据库之外安装监控工具、安全代理或自定义应用程序。

当您在多可用区部署中自定义操作系统时，您有责任确保主实例和备用实例上都存在自定义设置。这种方法可确保多可用区失效转移期间的应用程序连续性，并在两个实例之间保持一致的功能。

## 在 RDS Custom for Oracle 多可用区部署中自定义操作系统的要求
<a name="cfo-os-maz-reqs"></a>

在多可用区部署中自定义操作系统之前，请注意以下要求：
+ 仅在 `/rdsdbdata` 装载点上安装第三方软件。数据量（`/rdsdbdata`）是在多可用区部署中复制的唯一数据。在操作系统修补期间替换根卷（`/`），在数据库修补期间替换二进制卷（`/rdsdbbin`）。安装在根卷和二进制卷上的软件在修补期间会丢失。
+ 确保所有自定义都符合 AWS Oracle 许可条款和条件。
+ 在从单可用区转换为多可用区之前，请确保 `/etc/sysctl.conf` 中的 HugePages 设置正常工作。

## 识别 RDS Custom for Oracle 多可用区部署中的 EC2 实例
<a name="cfo-os-maz-identify-instances"></a>

在自定义您的多可用区实例时，请确定哪些 Amazon EC2 实例作为 RDS Custom for Oracle 部署的主实例和备用实例。

**识别主实例和备用 EC2 实例**

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

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

1. 选择 Multi-AZ RDS Custom for Oracle 数据库实例。

1. 在**配置**部分，记下**资源 ID**（格式：`db-nnnnnnn`）。

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

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

1. 在搜索框中，输入步骤 4 中的资源 ID。

1. 搜索结果显示两个实例：主实例和辅助实例。具有活动 RDS Custom for Oracle 数据库的实例是主实例。

## 在创建 RDS Custom for Oracle 多可用区部署之前自定义操作系统
<a name="cfo-os-maz-convert"></a>

在此场景中，您的当前部署是单可用区数据库实例。您可以自定义操作系统，然后将数据库实例转换为多可用区部署。如果您正在安装第三方软件，并且修改了多个卷上的文件，则建议使用此方法。

**在将单可用区转换为多可用区之前自定义操作系统**

1. 使用 AWS Systems Manager Session Manager 或 SSH 连接到您的单可用区部署中的 EC2 实例。

1. 执行下列任一自定义：
   + 在数据卷上安装第三方软件（`/rdsdbdata`）。
   + 自定义根卷上的文件（`/`）。

1. 测试您的软件或根卷自定义设置，确保它们能正常运行。

1. 按照[将 RDS Custom for Oracle 中的单可用区部署转换为多可用区部署](custom-oracle-multiaz-modify-single-to-multi.md)中的说明，将单可用区数据库实例转换为多可用区部署。

1. 验证多可用区部署中的两个实例上是否都存在您的自定义项。有关更多信息，请参阅 [识别 RDS Custom for Oracle 多可用区部署中的 EC2 实例](#cfo-os-maz-identify-instances)。

## 创建 RDS Custom for Oracle 多可用区部署后自定义操作系统
<a name="cfo-maz-soft-root"></a>

如果您已有多可用区部署，则可以使用 AWS Systems Manager 或使用手动技术部署您的自定义项。

### 使用 AWS Systems Manager 在多可用区部署中自定义操作系统
<a name="cfo-os-maz-systems-manager"></a>

对于现有的多可用区数据库实例，我们建议将 Systems Manager 作为同时对主实例和备用实例应用自定义设置的最可靠方式。这种方法可确保一致性。有关此服务的一般介绍，请参阅[什么是 AWS Systems Manager？](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)。要了解如何同时在两个数据库实例上安装软件，请参阅 [Install or update Distributor packages](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-deploy.html)。

### 手动在多可用区部署中自定义操作系统
<a name="cfo-os-maz-create"></a>

在此场景中，您的多可用区部署已经存在，但您不使用 AWS Systems Manager 部署自定义项。您可以通过以下任一方式手动自定义操作系统：

**在主实例上自定义操作系统并复制更改**  
多可用区部署会自动复制 `rdsdbdata` 卷。您可以通过以下方式自定义操作系统：  
+ 直接在 `/rdsdbdata` 装载点上安装第三方软件。
+ 要修改根卷（`/`）上的文件，请在数据卷上创建文件，然后创建从根卷文件到数据卷文件的符号链接。

**分别在主实例和备用实例上自定义操作系统**  
在此方法中，先在主实例上自定义操作系统，然后在备用实例上执行相同的自定义操作。

**在主实例上自定义操作系统并自动复制更改**

1. 使用[识别 RDS Custom for Oracle 多可用区部署中的 EC2 实例](#cfo-os-maz-identify-instances)中的过程识别主数据库实例和备用数据库实例。

1. 使用会话管理器或 SSH 连接至主 EC2 实例。

1. 根据您的业务需求，使用以下任一方法：  
**安装第三方软件**  
在 `/rdsdbdata` 装载点上安装您的软件。  

   ```
   sudo mkdir -p /rdsdbdata/custom-software
   cd /rdsdbdata/custom-software
   # Install your software here
   ```  
**自定义根卷**  
创建从根卷上的操作系统配置文件到数据卷上文件的符号链接。例如，创建文件 `/rdsdbdata/customizations/sysctl.conf`，然后在 `/etc/sysctl.conf` 创建一个指向 `/rdsdbdata/customizations/sysctl.conf` 的符号链接。  

   ```
   sudo mkdir -p /rdsdbdata/customizations
   sudo mv /etc/sysctl.conf /rdsdbdata/customizations/sysctl.conf
   sudo ln -sf /rdsdbdata/customizations/sysctl.conf /etc/sysctl.conf
   ```

1. 测试您的软件或根卷自定义设置，确保它们能正常运行。

1. 连接到备用实例并验证同步复制是否已将您的软件或根卷自定义设置复制到 `/rdsdbdata` 目录。

## 在 RDS Custom for Oracle 多可用区部署中自定义二进制卷
<a name="cfo-os-maz-bin"></a>

您可以将数据库补丁应用于 RDS Custom for Oracle 多可用区部署中的二进制卷（`/rdsdbbin`）。您必须将补丁应用于主实例和备用实例。请考虑以下准则：
+ 在执行一次性补丁时，我们建议您使用清单中包含的新一次性补丁创建一个新的 CEV。
+ 要手动应用一次性补丁，请确保在主 EC2 实例和辅助 EC2 实例中解压缩一次性补丁。仅在主多可用区实例上需要应用补丁并运行 `datapatch`。
+ 如果使用其他 CEV 修补数据库，则二进制卷将被替换。请务必在新 CEV 的清单中包含一次性补丁。

## 有关自定义操作系统的最佳实践
<a name="cfo-os-maz-bp"></a>

在 RDS Custom for Oracle 多可用区实例上自定义操作系统时，请遵循以下最佳实践：

**在非生产环境中测试**  
在将自定义设置应用于生产实例之前，务必在非生产环境中对其进行测试。

**记录所有更改**  
保留所有自定义设置的详细文档，以备将来参考和排除故障。我们建议您将自定义设置存储在可以随时应用的脚本中，以防万一。

**在两个实例上进行验证**  
定期验证主实例和备用实例上的自定义设置是否存在且运行正常。

**使用 Systems Manager 保持一致性**  
使用 Systems Manager 可以跨实例一致地应用更改，特别是对于现有的多可用区部署。

# 使用 AWS CloudFormation 部署 RDS Custom for Oracle
<a name="custom-oracle-multiaz-deployment"></a>

使用提供的 AWS CloudFormation 模板自动进行 RDS Custom for Oracle 部署。在部署资源之前，请满足以下先决条件。

## 先决条件
<a name="custom-oracle-prerequisites"></a><a name="custom-oracle-required-files"></a>

**下载必需的 Oracle 文件**

在创建 CloudFormation 模板之前，您需要特定的 Oracle 安装文件。在部署之前下载这些文件。

1. 导航到 [Oracle Database 19c (19.3)](https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html)

1. 找到并下载文件 `LINUX.X64_193000_db_home.zip`

1. 将该文件重命名为 `V982063-01.zip`

1. 下载其余补丁，同时为**平台或语言**选择 `Linux x86-64`

### 最新的 OPatch 实用程序
<a name="custom-oracle-opatch"></a>

[Patch 6880880](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=6880880)

### 2023 年 1 月 PSU 补丁
<a name="custom-oracle-jan-2023-patches"></a>

**数据库 PSU 和 RU 补丁**
+ [Patch 34765931](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=34765931)
+ [Patch 34786990](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=34786990)

**其它必需的补丁**
+ [Patch 35099667](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=35099667)
+ [Patch 35099674](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=35099674)
+ [Patch 28730253](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=28730253)
+ [Patch 29213893](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=29213893)
+ [Patch 35012866](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=35012866)

### 2023 年 4 月 PSU 补丁
<a name="custom-oracle-apr-2023-patches"></a>

**数据库 PSU 和 RU 补丁**
+ [Patch 35042068](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=35042068)
+ [Patch 35050341](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=35050341)

**其它必需的补丁**
+ [Patch 28730253](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=28730253)
+ [Patch 29213893](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=29213893)
+ [Patch 33125873](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=33125873)
+ [Patch 35220732](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=35220732)
+ [Patch 35239280](https://updates.oracle.com/Orion/PatchDetails/process_form?patch_num=35239280)

### Amazon S3 存储桶设置
<a name="custom-oracle-s3-setup"></a>

1. 在您的 AWS 账户中创建 Amazon S3 存储桶，或者选择现有的存储桶。

1. 在存储桶中创建类似于以下示例的文件夹结构。

   ```
   <bucket-name>/
   └── oracle_cev/
       ├── V982063-01.zip
       ├── p6880880_190000_Linux-x86-64.zip
       ├── p34765931_190000_Linux-x86-64.zip
       ├── p34786990_190000_Linux-x86-64.zip
       ├── p35099667_190000_Linux-x86-64.zip
       ├── p35099674_190000_Generic.zip
       ├── p28730253_190000_Linux-x86-64.zip
       ├── p29213893_1918000DBRU_Generic.zip
       ├── p35012866_1918000DBRU_Linux-x86-64.zip
       ├── p35042068_190000_Linux-x86-64.zip
       ├── p35050341_190000_Linux-x86-64.zip
       ├── p29213893_1919000DBRU_Generic.zip
       ├── p33125873_1919000DBRU_Linux-x86-64.zip
       ├── p35220732_190000_Linux-x86-64.zip
       └── p35239280_190000_Generic.zip
   ```

1. 将之前下载的所有 Oracle 文件上传到相应的文件夹。

## 使用 AWS CloudFormation 部署 RDS Custom for Oracle
<a name="custom-oracle-deployment-steps"></a>

### 步骤 1：准备 CloudFormation 模板
<a name="custom-oracle-step1-prereqs"></a>

在部署 RDS Custom for Oracle 之前，您需要下载并配置 CloudFormation 模板，该模板用于创建必要的先决条件。

**复制并保存模板**

1. 转到 [Deploying RDS Custom for Oracle with single and multiple Availability Zones](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html#aws-resource-rds-dbinstance--examples--Deploying_RDS_Custom_for_Oracle_with_single_and_multiple_Availability_Zones)

1. 以您首选的格式（YAML 或 JSON）复制模板

1. 以 YAML 或 JSON 格式保存此文件。例如，`rds-custom-oracle-prereqs.yaml`

**在 AWS 管理控制台中启动堆栈**

1. 打开 AWS 管理控制台并导航到 AWS CloudFormation

1. 选择**创建堆栈** > **使用新资源（标准）**

1. 选择**选择现有模板** 

1. 选择**上传模板文件** > **选择文件**

1. 选择您之前下载的模板文件

1. 保留默认参数值

1. 选择**下一步**以创建堆栈

**备选方案：使用 AWS CLI**

除了使用控制台，还可以使用 AWS CLI 来创建堆栈：

```
aws cloudformation create-stack \
  --stack-name rds-custom-oracle \
  --template-body file://rds-custom-oracle-prereqs.yaml \
  --capabilities CAPABILITY_NAMED_IAM
```

### 步骤 2：创建自定义引擎版本（CEV）和 Amazon RDS 实例
<a name="custom-oracle-step2-cev-rds"></a>

**复制并保存模板**

1. 转到 [Deploying RDS Custom for Oracle with single and multiple Availability Zones](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html#aws-resource-rds-dbinstance--examples--Deploying_RDS_Custom_for_Oracle_with_single_and_multiple_Availability_Zones)

1. 以您首选的格式（YAML 或 JSON）复制模板

1. 如果需要，请更新模板中的以下参数：
   + `BucketName`
   + `CEVS3Prefix`
   + 数据库主密码（替换 \$1\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1）

1. 以 YAML 或 JSON 格式保存此文件

### 步骤 3：使用 AWS 管理控制台进行部署
<a name="custom-oracle-step3-console-deploy"></a>

1. 打开 AWS 管理控制台并导航到 AWS CloudFormation

1. 选择**创建堆栈** > **使用新资源（标准）**

1. 选择**选择现有模板** 

1. 选择**上传模板文件** > **选择文件**

1. 选择您之前下载的模板文件

1. 将参数保留为默认值

1. 填入参数，如下所示：

   ```
   BucketName: rds-custom-id
   CEVS3Prefix: oracle_cev
   CEVCreation: Yes
   ```

1. 查看配置并选择**下一步**以创建堆栈

**可选：使用 AWS CLI 进行部署**

```
aws cloudformation create-stack \
  --stack-name rds-custom-oracle \
  --template-body file://rds-custom-oracle.yaml \
  --parameters \
    ParameterKey=BucketName,ParameterValue=rds-custom-id \
    ParameterKey=CEVS3Prefix,ParameterValue=oracle_cev \
    ParameterKey=CEVCreation,ParameterValue=Yes \
  --capabilities CAPABILITY_NAMED_IAM
```

## 创建了部署资源
<a name="custom-oracle-deployment-resources"></a>

 模板创建以下资源：
+ 具有公有和私有子网的 Amazon VPC
+ 安全组
+ Amazon VPC 端点
+ IAM 角色和策略
+ 用于加密的 AWS KMS 密钥
+ 自定义引擎版本（CEV）
+ 同时适用于单可用区和多可用区配置的 RDS Custom for Oracle 实例

## 监控部署进度
<a name="custom-oracle-monitoring-deployment"></a>

创建 CloudFormation 堆栈后，监控其进度以确保成功部署。部署过程包括创建自定义引擎版本（CEV）和 RDS 实例。

要监控部署进度：

1. 打开 CloudFormation 控制台。

1. 选择堆栈名称。

1. 选择**事件**选项卡以查看进度并确定任何错误。

**注意**  
创建 CEV 通常需要 2-3 个小时。成功完成 CEV 创建后，Amazon RDS 将自动开始创建 Amazon RDS 实例。

## 部署后
<a name="custom-oracle-post-deployment"></a>

堆栈创建过程完成后，执行以下部署后验证和配置步骤：

1. 从 Amazon RDS 控制台页面上，导航到**自定义引擎版本**以验证 CEV 创建。

1. 确认 Amazon RDS 实例已创建并可用

1. 测试与 Amazon RDS 实例的连接

1. 根据需要设置监控和备份策略

## 清理
<a name="custom-oracle-cleanup"></a>

要移除所有资源，请运行以下 AWS CLI 命令：

```
aws cloudformation delete-stack --stack-name rds-custom-oracle
```

## 问题排查
<a name="custom-oracle-troubleshooting"></a>

如果您在部署过程中遇到问题，请使用以下解决方案来解决常见问题。

CEV 创建失败  
+ 验证所有必需的补丁是否已上传到 Amazon S3
+ 检查 IAM 权限
+ 验证补丁版本是否正确；有关所需补丁的列表，请参阅[先决条件](#custom-oracle-prerequisites)。

创建 Amazon RDS 实例失败  
+ 检查 VPC/子网配置
+ 验证安全组规则
+ 确认 CEV 可用

# 使用适用于 RDS Custom for Oracle 的 Oracle 副本
<a name="custom-rr"></a>

您可以为运行 Oracle Enterprise Edition 的 RDS Custom for Oracle 数据库实例创建 Oracle 副本。支持容器数据库（CDB）和非 CDB。Standard Edition 2 不支持 Oracle Data Guard。

创建 RDS Custom for Oracle 副本类似于创建 RDS for Oracle 副本，但有重大区别。有关创建和管理 Oracle 副本的一般信息，请参阅[使用数据库实例只读副本](USER_ReadRepl.md)和[使用 Amazon RDS for Oracle 的只读副本](oracle-read-replicas.md)。

**Topics**
+ [RDS Custom for Oracle 复制概述](#custom-rr.overview)
+ [RDS Custom for Oracle 复制的指南和限制](custom-rr.reqs-limitations.md)
+ [将 RDS Custom for Oracle 副本提升为独立的数据库实例](custom-rr.promoting.md)
+ [在 RDS Custom for Oracle 主实例和副本实例之间配置 VPN 隧道](cfo-standby-vpn-tunnel.md)

## RDS Custom for Oracle 复制概述
<a name="custom-rr.overview"></a>

RDS Custom for Oracle 复制的架构类似于 RDS for Oracle 复制。主数据库实例异步复制到一个或多个 Oracle 副本。

![\[RDS Custom for Oracle 支持 Oracle 副本\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/read-replica-custom-oracle.png)


### 最大副本数
<a name="custom-rr.overview.number"></a>

与 RDS for Oracle 一样，您最多可以创建 RDS Custom for Oracle 主数据库实例的五个托管式 Oracle 副本。您还可以创建自己的手动配置的（外部）Oracle 副本。外部副本不计入您的数据库实例限制。它们还位于 RDS Custom 支持外围之外。有关支持外围的更多信息，请参阅 [RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。

### 副本命名约定
<a name="custom-rr.overview.names"></a>

Oracle 副本名称基于数据库的唯一名称。格式为 `DB_UNIQUE_NAME_X`，并按顺序附加字母。例如，如果您的数据库唯一名称为 `ORCL`，则前两个副本命名为 `ORCL_A` 和 `ORCL_B`。前六个字母 A–F 是为 RDS Custom 保留的。RDS Custom 将数据库参数从主数据库实例复制到副本。有关更多信息，请参阅 Oracle 文档中的 [DB\$1UNIQUE\$1NAME](https://docs.oracle.com/database/121/REFRN/GUID-3547C937-5DDA-49FF-A9F9-14FF306545D8.htm#REFRN10242)。

### 副本备份保留期
<a name="custom-rr.overview.backups"></a>

原定设置情况下，RDS Custom Oracle 副本使用与主数据库实例相同的备份保留期。您可以将备份保留期修改为 1–35 天。RDS Custom 支持备份、还原和时间点故障恢复（PITR）。有关备份和还原 RDS Custom 数据库实例的更多信息，请参阅[备份和还原 Amazon RDS Custom for Oracle 数据库实例](custom-backup.md)。

**注意**  
当创建 Oracle 副本时，RDS Custom 会暂时暂停清理重做日志文件。通过这种方式，RDS Custom 可确保在新的 Oracle 副本变为可用后将这些日志应用于该副本。

### 副本提升
<a name="custom-rr.overview.promotion"></a>

您可以使用控制台、`promote-read-replica` AWS CLI 命令或 `PromoteReadReplica` API 在 RDS Custom for Oracle 中提升托管式 Oracle 副本。如果您删除了主数据库实例，并且所有副本都运行正常，则 RDS Custom for Oracle 会自动将您的托管式副本提升为独立实例。如果副本已暂停自动化或超出支持外围，则必须先修复副本，RDS Custom 才能自动对其进行提升。您只能手动提升外部 Oracle 副本。

# RDS Custom for Oracle 复制的指南和限制
<a name="custom-rr.reqs-limitations"></a>

创建 RDS Custom for Oracle 副本时，并非所有 RDS Oracle 副本选项都受支持。

**Topics**
+ [RDS Custom for Oracle 复制的一般指南](#custom-rr.guidelines)
+ [RDS Custom for Oracle 复制的一般限制](#custom-rr.limitations)
+ [RDS Custom for Oracle 复制的网络要求和限制](#custom-rr.network)
+ [RDS Custom for Oracle 的外部副本限制](#custom-rr.external-replica-reqs)

## RDS Custom for Oracle 复制的一般指南
<a name="custom-rr.guidelines"></a>

使用 RDS Custom for Oracle 时，请遵循以下指南：
+ 您只能在 Oracle Enterprise Edition 中使用 RDS Custom for Oracle 复制。不支持 Standard Edition 2。
+ 强烈建议您实施 VPN 隧道来加密主实例和备用实例之间的通信。有关更多信息，请参阅 [在 RDS Custom for Oracle 主实例和副本实例之间配置 VPN 隧道](cfo-standby-vpn-tunnel.md)。
+ 不要修改 `RDS_DATAGUARD` 用户。此用户保留用于 RDS Custom for Oracle 自动化。修改此用户可能会导致不希望的结果，例如无法为 RDS Custom for Oracle 数据库实例创建 Oracle 副本。
+ 不要更改复制用户密码。管理 RDS Custom 主机上的 Oracle Data Guard 配置需要使用此密码。如果您更改密码，RDS Custom for Oracle 可能会将您的 Oracle 副本置于支持外围之外。有关更多信息，请参阅 [RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。

  此密码存储在 AWS Secrets Manager 中，用数据库资源 ID 进行标记。每个 Oracle 副本在 Secret Manager 中都有自己的密钥。密钥使用以下任一命名格式。

  ```
  do-not-delete-rds-custom-db-DB_resource_id-uuid-dg
  rds-custom!oracle-do-not-delete-DB_resource_id-uuid-dg
  ```
+ 不要更改主数据库实例的 `DB_UNIQUE_NAME`。更改名称会导致任何还原操作卡住。
+ 不要在 RDS Custom CDB 的 `CREATE PLUGGABLE DATABASE` 命令中指定子句 `STANDBYS=NONE`。这样，如果发生失效转移，您的备用 CDB 将包含所有 PDB。

## RDS Custom for Oracle 复制的一般限制
<a name="custom-rr.limitations"></a>

RDS Custom for Oracle 副本具有以下限制：
+ 无法在只读模式下创建 RDS Custom for Oracle 副本。但是，您可以将已挂载副本的模式手动更改为只读，以及从只读更改为已挂载。有关更多信息，请参阅 [create-db-instance-read-replica](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html) AWS CLI 命令的文档。
+ 您无法创建跨区域 RDS Custom for Oracle 副本。
+ 您无法更改 Oracle Data Guard `CommunicationTimeout` 参数的值。对于 RDS Custom for Oracle 数据库实例，此参数设置为 15 秒。

## RDS Custom for Oracle 复制的网络要求和限制
<a name="custom-rr.network"></a>

确保您的网络配置支持 RDS Custom for Oracle 副本。请考虑以下事项：
+ 确保为主数据库实例和其所有副本的虚拟私有云（VPC）内的入站和出站通信启用端口 1140。这对于只读副本之间的 Oracle Data Guard 通信是必需的。
+ RDS Custom for Oracle 会在创建 Oracle 副本时对网络进行验证。如果主数据库实例和新副本无法通过网络连接，则 RDS Custom for Oracle 不会创建副本并将其置于 `INCOMPATIBLE_NETWORK` 状态。
+ 对于外部 Oracle 副本，例如您在 Amazon EC2 或本地创建的只读副本，请使用另一个端口和侦听器进行 Oracle Data Guard 复制。尝试使用端口 1140 可能会导致与 RDS Custom 自动化发生冲突。
+ `/rdsdbdata/config/tnsnames.ora` 文件包含映射到侦听器协议地址的网络服务名称。请注意以下要求和建议：
  + 当处理 Oracle 副本操作时，`tnsnames.ora` 中前缀为 `rds_custom_` 的条目保留用于 RDS Custom。

    在 `tnsnames.ora` 中创建手动条目时，不要使用此前缀。
  + 在某些情况下，您可能希望手动切换或进行失效转移，或者使用快速启动失效转移 (FSFO) 等失效转移技术。如果是这样，请确保将 `tnsnames.ora` 条目从主数据库实例手动同步到所有备用实例。此建议同时适用于 RDS Custom 管理的 Oracle 副本和外部 Oracle 副本。

    RDS Custom 自动化只会更新主数据库实例上的 `tnsnames.ora` 条目。请务必在添加或删除 Oracle 副本时也要进行同步。

    如果您不同步 `tnsnames.ora` 文件并且手动切换或失效转移，主数据库实例上的 Oracle Data Guard 可能无法与 Oracle 副本进行通信。

## RDS Custom for Oracle 的外部副本限制
<a name="custom-rr.external-replica-reqs"></a>

 RDS Custom for Oracle 外部副本（包括本地副本）具有以下限制：
+ RDS Custom for Oracle 在手动失效转移（如 FSFO）时不会检测到外部 Oracle 副本的实例角色更改。

  RDS Custom for Oracle 的确会检测托管式副本的更改。角色更改在事件日志中进行了记录。您还可以通过使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI 命令查看新状态。
+ RDS Custom for Oracle 不检测到外部 Oracle 副本的高复制滞后。

  RDS Custom for Oracle 的确会检测托管式副本的滞后。高复制滞后会产生 `Replication has stopped` 事件。您还可以通过使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI 命令查看复制状态，但它的更新可能会延迟。
+ 如果您删除主数据库实例，RDS Custom for Oracle 不会自动提升外部 Oracle 副本。

  自动提升功能仅适用于托管式 Oracle 副本。有关手动提升 Oracle 副本的信息，请参阅白皮书[在 Amazon RDS Custom for Oracle 上使用 Data Guard 启用高可用性](https://d1.awsstatic.com/whitepapers/enabling-high-availability-with-data-guard-on-amazon-rds-custom-for-oracle.pdf)。

# 将 RDS Custom for Oracle 副本提升为独立的数据库实例
<a name="custom-rr.promoting"></a>

就像使用 RDS for Oracle 一样，您可以将 RDS Custom for Oracle 副本提升为独立的数据库实例。提升 Oracle 副本时，RDS Custom for Oracle 会在数据库实例变为可用之前重新启动数据库实例。有关提升 Oracle 副本的更多信息，请参阅[将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)。

提升副本时，请注意以下指南：
+ 在 RDS Custom for Oracle 提升您的副本时不要启动失效转移。否则，提升工作流可能会卡住。
+ 在 RDS Custom for Oracle 提升 Oracle 副本时，不要切换主数据库实例。否则，提升工作流可能会卡住。
+ 在 RDS Custom for Oracle 提升 Oracle 副本时，不要关闭主数据库实例。否则，提升工作流可能会卡住。
+ 不要尝试将新提升的数据库实例作为目标来重新开始复制。在 RDS Custom for Oracle 提升 Oracle 副本后，它将成为一个独立的数据库实例，不再具有副本角色。

注意 RDS Custom for Oracle 副本提升存在以下限制：
+ 当 RDS Custom for Oracle 正在备份副本时，您无法提升副本。
+ 提升 Oracle 副本时，不能将备份保留期更改为 `0`。
+ 当副本未处于正常运行状态时，您无法提升它。

  如果您在主数据库实例上发出 `delete-db-instance`，RDS Custom for Oracle 会验证每个托管式 Oracle 副本是否正常运行以及是否可供提升。副本可能不符合提升资格，因为自动化已暂停或它不在支持外围内。在这种情况下，RDS Custom for Oracle 会发布一个事件来解释此问题，以便您可以手动修复 Oracle 副本。

以下步骤说明将 Oracle 副本提升为数据库实例的一般过程：

1. 停止将任何事务写入到主数据库实例。

1. 等待 RDS Custom for Oracle 将所有更新应用到 Oracle 副本。

1. 通过在 Amazon RDS 控制台上选择 **Promote**（提升）选项、AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html) 或 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html) Amazon RDS API 操作来提升 Oracle 副本。

提升一个 Oracle 副本需要几分钟才能完成。在此过程中，RDS Custom for Oracle 会停止复制并重启您的副本。完成重启后，Oracle 副本即可用作独立的数据库实例。有关排查副本提升问题的信息，请参阅[排查 RDS Custom for Oracle 的副本提升问题](custom-troubleshooting.md#custom-troubleshooting-promote)。

## 控制台
<a name="USER_ReadRepl.Promote.Console"></a>

**将 RDS Custom for Oracle 副本提升为独立的数据库实例**

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

1. 在 Amazon RDS 控制台中，选择**数据库**。

   随后会显示**数据库**窗格。每个 Oracle 副本在 **Role**（角色）列中显示 **Replica**（副本）。

1. 选择您要提升的 RDS Custom for Oracle 副本。

1. 对于**操作**，请选择**提升**。

1. 在 **Promote Oracle replica**（提升 Oracle 副本）页面上，输入新提升的数据库实例的备份保留期和备份时段。您不能将此值设置为 **0**。

1. 根据需要完成设置后，选择 **Promote Oracle replica**（提升 Oracle 副本）。

## AWS CLI
<a name="USER_ReadRepl.Promote.CLI"></a>

要将 RDS Custom for Oracle 副本提升为独立的数据库实例，请使用 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html) 命令。

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

```
aws rds promote-read-replica \
--db-instance-identifier my-custom-read-replica \
--backup-retention-period 2 \
--preferred-backup-window 23:00-24:00
```
对于 Windows：  

```
aws rds promote-read-replica ^
--db-instance-identifier my-custom-read-replica ^
--backup-retention-period 2 ^
--preferred-backup-window 23:00-24:00
```

## RDS API
<a name="USER_ReadRepl.Promote.API"></a>

要将 RDS Custom for Oracle 副本提升为独立的数据库实例，请调用具有必要参数 `PromoteReadReplica` 的 Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html) 操作。

# 在 RDS Custom for Oracle 主实例和副本实例之间配置 VPN 隧道
<a name="cfo-standby-vpn-tunnel"></a>

VPN 隧道是通过网络在两个或更多个设备之间建立的加密连接。为了确保 RDS Custom for Oracle 中的 Oracle Data Guard 实例具有最高级别的安全性，我们强烈建议您实施 VPN 隧道来对主实例与备用实例之间的通信进行加密。该隧道在实例之间进行网络传输时，可保护敏感数据。虽然此配置是可选的，但我们建议将其作为实现数据安全性和法规合规性的最佳实践。

请确保满足以下先决条件：
+ 您拥有主要主机和备用主机的根访问权限。
+ 您拥有运行 `ipsec` 命令的技术专业知识。

**在 RDS Custom for Oracle 中配置主副本之间的 VPN 隧道**

1. 使用以下规则将主实例和备用实例的安全组添加到允许列表中：

   ```
   ACTION FLOW SOURCE PROTO PORT
   
   ALLOW ingress this-SG 50 (ESP) all (N/A)
   ALLOW egress this-SG 50 (ESP) all (N/A)
   
   ALLOW ingress this-SG 17 (UDP) 500 (IKE)
   ALLOW egress this-SG 17 (UDP) 500 (IKE)
   ```

1. 切换到根用户。

   ```
   $ sudo su – root
   ```

1. 在主实例和备用实例上运行以下命令，以初始化用户 `root` 下的网络安全服务（NSS）数据库。

   ```
   ipsec initnss --nssdir /etc/ipsec.d
   ```

1. 按如下方式生成 RSA 密钥：

   1. 在主实例上，使用以下任一 `ipsec` 命令生成密钥，具体取决于您的操作系统版本。

      ```
      ipsec newhostkey --nssdir /etc/ipsec.d       ## for Oracle Linux Version 8
      ipsec newhostkey --output /etc/ipsec.secrets ## for Oracle Linux version 7.9
      ```

   1. 获取创建配置所需的公有密钥。在以下示例中，主实例是 `left`，因为在 `ipsec` 术语中，`left` 是指您当前正在配置的设备，而 `right` 是指隧道另一端的设备。

      ```
      ipsec showhostkey --left --ckaid ckaid-returned-in-last-statement
      ```

   1. 在备用实例上，为备用实例生成密钥。

      ```
      ipsec newhostkey --nssdir /etc/ipsec.d       ## for Oracle Linux Version 8
      ipsec newhostkey --output /etc/ipsec.secrets ## for Oracle Linux version 7.9
      ```

   1. 获取备用实例的公有密钥，创建配置时需要该公有密钥。在以下示例中，备用实例为 `right`，因为它指的是隧道另一端的设备。

      ```
      ipsec showhostkey --right --ckaid ckaid-returned-in-last-statement
      ```

1. 根据您获得的 RSA 密钥生成配置。主实例与备用实例的配置相同。您可以在 AWS 控制台中找到主实例 IPv4 地址和备用实例 IPv4 地址。

   在主实例和备用实例上，将以下配置保存到文件 `/etc/ipsec.d/custom-fb-tunnel.conf` 中。

   ```
   conn custom-db-tunnel
    type=transport
    auto=add
    authby=rsasig
    left=IPV4-for-primary 
    leftrsasigkey=RSA-key-generated-on-primary
    right=IPV4-for-standby
    rightrsasigkey=RSA-key-generated-on-standby
   ```

1. 在主实例和备用实例上，在两台主机上启动 `ipsec` 进程守护程序。

   ```
   ipsec setup start
   ```

1. 在主实例或备用实例上启动隧道。该输出值应该类似于以下内容。

   ```
   [root@ip-172-31-6-81 ~]# ipsec auto --up custom-db-tunnel
   181 "custom-db-tunnel" #1: initiating IKEv2 connection
   181 "custom-db-tunnel" #1: sent IKE_SA_INIT request to 172.31.32.196:500
   182 "custom-db-tunnel" #1: sent IKE_AUTH request {cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=DH19}
   003 "custom-db-tunnel" #1: initiator established IKE SA; authenticated peer '3584-bit PKCS#1 1.5 RSA with SHA1' signature using preloaded certificate '172.31.32.196'
   004 "custom-db-tunnel" #2: initiator established Child SA using #1; IPsec transport [172.31.6.81-172.31.6.81:0-65535 0] -> [172.31.32.196-172.31.32.196:0-65535 0] {ESP/ESN=>0xda9c4815 <0xb742ca42 xfrm=AES_GCM_16_256-NONE DPD=passive}
   [root@ip-172-31-6-81 ~]#
   ```

# 备份和还原 Amazon RDS Custom for Oracle 数据库实例
<a name="custom-backup"></a>

与 Amazon RDS 相同，RDS Custom 会在数据库实例的备份时段中，创建并保存 RDS Custom for Oracle 数据库实例的自动备份。您还可以手动备份数据库实例。

此过程与拍摄 Amazon RDS 数据库实例的快照相同。RDS Custom 数据库实例的第一个快照包含完整数据库实例的数据。后续快照为增量快照。

使用 AWS 管理控制台 或 AWS CLI 还原数据库快照。

**Topics**
+ [创建 RDS Custom for Oracle 快照](custom-backup.creating.md)
+ [从 RDS Custom for Oracle 数据库快照还原](custom-backup.restoring.md)
+ [将 RDS Custom for Oracle 实例还原到某个时间点](custom-backup.pitr.md)
+ [删除 RDS Custom for Oracle 快照](custom-backup.deleting.md)
+ [删除 RDS Custom for Oracle 自动备份](custom-backup.deleting-backups.md)

# 创建 RDS Custom for Oracle 快照
<a name="custom-backup.creating"></a>

RDS Custom for Oracle 可创建数据库实例的存储卷快照，并备份整个数据库实例而不仅仅是单个数据库。当您的数据库实例包含容器数据库（CDB）时，该实例的快照包括根 CDB 和所有 PDB。

创建 RDS Custom for Oracle 快照时，请指定要备份哪个 RDS Custom 数据库实例。为您的快照命名，以便稍后通过它进行还原。

当您创建快照时，RDS Custom for Oracle 会为附加到数据库实例的每个卷创建 Amazon EBS 快照。RDS Custom for Oracle 使用根卷的 EBS 快照注册新的 Amazon Machine Image（AMI）。为了使快照轻松与特定数据库实例关联，请使用 `DBSnapshotIdentifier`、`DbiResourceId` 和 `VolumeType` 标记它们。

创建数据库快照会导致短暂的输入/输出暂停。此暂停可持续数秒到几分钟，具体取决于数据库实例的大小和类。快照创建时间因数据库的大小而异。由于快照包含整个存储卷，因此，文件（如临时文件）的大小也会影响创建快照创建时间。要了解创建快照的更多信息，请参阅 [为 Amazon RDS 的单可用区数据库实例创建数据库快照](USER_CreateSnapshot.md)。

使用控制台或 AWS CLI 创建 RDS Custom for Oracle 快照。

## 控制台
<a name="USER_CreateSnapshot.CON"></a>

**创建 RDS Custom 快照**

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

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

1. 在 RDS Custom 数据库实例列表中，选择您想拍摄快照的实例。

1. 对于**操作**，选择**拍摄快照**。

   将显示 **Take DB snapshot (拍摄数据库快照)** 窗口。

1. 在 **Snapshot name**（快照名称）框中，请输入快照的名称。

1. 选择**拍摄快照**。

## AWS CLI
<a name="USER_CreateSnapshot.CLI"></a>

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

指定以下选项：
+ `--db-instance-identifier` – 标识要备份的 RDS Custom 数据库实例
+ `--db-snapshot-identifier` – 命名 RDS Custom 快照，以便以后通过它进行还原

在此示例中，您将给名为 `my-custom-instance` 的 RDS Custom 数据库实例创建名为 *`my-custom-snapshot`* 的数据库快照。

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

```
1. aws rds create-db-snapshot \
2.     --db-instance-identifier my-custom-instance \
3.     --db-snapshot-identifier my-custom-snapshot
```
对于 Windows：  

```
1. aws rds create-db-snapshot ^
2.     --db-instance-identifier my-custom-instance ^
3.     --db-snapshot-identifier my-custom-snapshot
```

# 从 RDS Custom for Oracle 数据库快照还原
<a name="custom-backup.restoring"></a>

在还原 RDS Custom for Oracle 数据库实例时，需要提供数据库快照的名称以及新实例的名称。您不能从快照还原到现有的 RDS Custom 数据库实例。还原时将新建一个 RDS Custom for Oracle 数据库实例。

该还原过程与 Amazon RDS 中的还原有以下方式不同：
+ 还原快照之前，RDS Custom for Oracle 会备份现有配置文件。这些文件提供在目录 `/rdsdbdata/config/backup` 中的还原实例上。RDS Custom for Oracle 会使用原定设置参数还原数据库快照，并用现有参数覆盖以前的数据库配置文件。因此，还原的实例不会保留自定义参数和对数据库配置文件的更改。
+ 还原的数据库的名称与快照中的名称相同。您不能指定不同的名称。（对于 RDS Custom for Oracle，原定设置值为 `ORCL`。）

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

**要从数据库快照还原 RDS Custom 数据库实例**

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

1. 在导航窗格中，选择**快照**。

1. 选择要从其还原的数据库快照。

1. 对于**操作**，选择**还原快照**。

1. 请在 **Restore DB instance**（还原数据库实例）页面上，为 **DB instance identifier**（数据库实例标识符）输入还原的 RDS Custom 数据库实例的名称。

1. 选择**还原数据库实例**。

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

您可以通过使用 [ restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) AWS CLI 命令还原 RDS Custom 数据库快照。

如果要从中还原的快照适用于私有数据库实例，请务必同时指定正确的 `db-subnet-group-name` 和 `no-publicly-accessible`。否则，数据库实例原定设置为可公开访问。以下选项为必填：
+ `db-snapshot-identifier` – 标识要从中进行还原的快照
+ `db-instance-identifier` – 指定要从数据库快照创建的 RDS Custom 数据库实例的名称
+ `custom-iam-instance-profile` – 指定与 RDS Custom 数据库实例的基础 Amazon EC2 实例关联的实例配置文件。

以下代码为 `my-custom-instance` 还原名为 `my-custom-snapshot` 的快照。

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

```
aws rds restore-db-instance-from-db-snapshot \
  --db-snapshot-identifier my-custom-snapshot \
  --db-instance-identifier my-custom-instance \
  --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance \
  --no-publicly-accessible
```
对于 Windows：  

```
aws rds restore-db-instance-from-db-snapshot ^
  --db-snapshot-identifier my-custom-snapshot ^
  --db-instance-identifier my-custom-instance ^
  --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance ^
  --no-publicly-accessible
```

# 将 RDS Custom for Oracle 实例还原到某个时间点
<a name="custom-backup.pitr"></a>

您可以将数据库实例还原到某个特定时间点 (PITR)，以创建新数据库实例。要支持 PITR，您的数据库实例必须将备份保留期设置为非零值。

RDS Custom for Oracle 数据库实例的最近可还原时间取决于多个因素，但通常为当前时间的 5 分钟内。要查看某个数据库实例的最近可还原时间，请使用 AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令，并查看该数据库实例的 `LatestRestorableTime` 字段中返回的值。要在 Amazon RDS 控制台中查看每个数据库实例的最近可还原时间，请选择**自动备份**。

您可以还原至备份保留期内的任何时间点。要查看每个数据库实例的最早可还原时间，请在 Amazon RDS 控制台中选择**自动备份**。

有关 PITR 的一般信息，请参阅[将 Amazon RDS 的数据库实例还原到指定时间](USER_PIT.md)。

**Topics**
+ [RDS Custom for Oracle 的 PITR 注意事项](#custom-backup.pitr.oracle)

## RDS Custom for Oracle 的 PITR 注意事项
<a name="custom-backup.pitr.oracle"></a>

在 RDS Custom for Oracle 中，PITR 与 Amazon RDS 中的 PITR 有以下重要的区别：
+ 还原的数据库的名称与源数据库实例中的名称相同。您不能指定不同的名称。默认为 `ORCL`。
+ `AWSRDSCustomIamRolePolicy` 需要新的权限。有关更多信息，请参阅 [步骤 2：将访问策略添加到 AWSRDSCustomInstanceRoleForRdsCustomInstance 中](custom-setup-orcl.md#custom-setup-orcl.iam.add-policy)。
+ RDS Custom for Oracle 的所有数据库实例都必须将备份保留期设置为非零值。
+ 如果更改操作系统或数据库实例时区，PITR 可能无法正常工作。有关更改时区的信息，请参阅[Oracle 时区](custom-managing.timezone.md)。
+ 如果将自动化设置为 `ALL_PAUSED`，RDS Custom 会暂停上传存档的重做日志文件，包括在最近可还原时间（LRT）之前创建的日志。我们建议您短暂暂停自动化。

  为了进行说明，假设您的 LRT 为 10 分钟前。您暂停了自动化。暂停期间，RDS Custom 不上载存档的重做日志。如果数据库实例崩溃，则只能恢复到暂停时存在的 LRT 之前的一段时间。当您恢复自动化时，RDS Custom 会恢复上载日志。LRT 推进。将适用正常的 PITR 规则。
+ 在 RDS Custom 中，您可以手动指定 RDS Custom 在上载后将存档的重做日志删除之前将其保留的任意小时数。按如下方式指定小时数：

  1. 创建名为 `/opt/aws/rdscustomagent/config/redo_logs_custom_configuration.json` 的文本文件。

  1. 按以下格式添加 JSON 对象：`{"archivedLogRetentionHours" : "num_of_hours"}`。该数字必须是一个介于 1–840 之间的整数。
+ 假设您将非 CDB 作为 PDB 插入容器数据库（CDB），然后尝试 PITR。仅当您先前备份了 PDB 时，该操作才会成功。创建或修改 PDB 后，我们建议您始终对其进行备份。
+ 我们建议您不要自定义数据库初始化参数。例如，修改以下参数会影响 PITR：
  + `CONTROL_FILE_RECORD_KEEP_TIME` 影响上传和删除日志的规则。
  + `LOG_ARCHIVE_DEST_n` 不支持多个目的地。
  + `ARCHIVE_LAG_TARGET` 影响最近可还原时间。`ARCHIVE_LAG_TARGET` 设置为 `300`，因为恢复点目标（RPO）为 5 分钟。为了实现这一目标，RDS 每 5 分钟切换一次在线重做日志，并将其存储在 Amazon S3 存储桶中。如果日志切换的频率导致 RDS Custom for Oracle 数据库出现性能问题，则可以将数据库实例和存储扩展到具有更高 IOPS 和吞吐量的数据库实例和存储。如果恢复计划需要，可以将 `ARCHIVE_LAG_TARGET` 初始化参数的设置调整为 60–7200 之间的值。
+ 如果您自定义数据库初始化参数，我们强烈建议您只自定义以下内容：
  + `COMPATIBLE` 
  + `MAX_STRING_SIZE`
  + `DB_FILES` 
  + `UNDO_TABLESPACE` 
  + `ENABLE_PLUGGABLE_DATABASE` 
  + `CONTROL_FILES` 
  + `AUDIT_TRAIL` 
  + `AUDIT_TRAIL_DEST` 

  对于所有其他初始化参数，RDS Custom 将还原原定设置值。如果修改不在前面列表中的参数，可能会对 PITR 产生不利影响，并导致不可预测的结果。例如，`CONTROL_FILE_RECORD_KEEP_TIME` 影响上传和删除日志的规则。

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 将 RDS Custom 数据库实例还原到某个时间点。

## 控制台
<a name="custom-backup.pitr2.CON"></a>

**要将 RDS Custom 数据库实例还原至指定时间**

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

1. 在导航窗格中，选择 **Automated backups**（自动备份）。

1. 选择要还原的 RDS Custom 数据库实例。

1. 对于 **Actions (操作)**，选择 **Restore to point in time (还原到时间点)**。

   此时会显示**还原到时间点**窗口。

1. 选择**最近可还原时间**以还原到可能的最近时间，或选择**自定义**来选择时间。

   如果您选择 **Custom**（自定义），请输入要将实例集群还原到的日期和时间。

   时间以您的本地时区显示，表示为协调世界时 (UTC) 的偏移量。例如，UTC-5 是东部标准时间/中部夏令时。

1. 对于 **DB instance identifier**（数据库实例标识符），请输入目标还原后的 RDS Custom 数据库实例的名称。名称必须唯一。

1. 根据需要选择其他选项，例如数据库实例类。

1. 选择**还原到时间点**。

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

通过使用 [ restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) AWS CLI 命令创建新的 RDS Custom 数据库实例，将数据库实例还原到指定时间。

使用以下选项之一指定要从中恢复的备份：
+ `--source-db-instance-identifier mysourcedbinstance`
+ `--source-dbi-resource-id dbinstanceresourceID`
+ `--source-db-instance-automated-backups-arn backupARN`

`custom-iam-instance-profile` 选项是必需的。

截至指定的时间，以下示例会将 `my-custom-db-instance` 还原到名为 `my-restored-custom-db-instance` 的新数据库实例。

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

```
1. aws rds restore-db-instance-to-point-in-time \
2.     --source-db-instance-identifier my-custom-db-instance\
3.     --target-db-instance-identifier my-restored-custom-db-instance \
4.     --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance \
5.     --restore-time 2022-10-14T23:45:00.000Z
```
对于 Windows：  

```
1. aws rds restore-db-instance-to-point-in-time ^
2.     --source-db-instance-identifier my-custom-db-instance ^
3.     --target-db-instance-identifier my-restored-custom-db-instance ^
4.     --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance ^
5.     --restore-time 2022-10-14T23:45:00.000Z
```

# 删除 RDS Custom for Oracle 快照
<a name="custom-backup.deleting"></a>

如果不再需要，您可以删除 RDS Custom for Oracle 管理的数据库快照。对于 Amazon RDS 和 RDS Custom 数据库实例而言，删除过程是相同的。

二进制卷和根卷的 Amazon EBS 快照会在您的账户中保留更长时间，因为它们可能与您账户中运行的某些实例或其他 RDS Custom for Oracle 快照关联。当这些 EBS 快照不再与任何现有 RDS Custom for Oracle 资源（数据库实例或备份）相关后，将会被自动删除。

## 控制台
<a name="USER_DeleteSnapshot.CON"></a>

**要删除 RDS Custom 数据库实例的快照**

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

1. 在导航窗格中，选择**快照**。

1. 选择要删除的数据库快照。

1. 对于 **Actions**（操作），选择 **Delete snapshot**（删除快照）。

1. 在确认页面上选择 **Delete (删除)**。

## AWS CLI
<a name="USER_DeleteSnapshot.CLI"></a>

要删除 RDS Custom 快照，请使用 AWS CLI 命令 [delete-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-snapshot.html)。

以下选项为必填项：
+ `--db-snapshot-identifier` – 要删除的快照

以下示例将删除 `my-custom-snapshot` 数据库快照。

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

```
1. aws rds delete-db-snapshot \  
2.   --db-snapshot-identifier my-custom-snapshot
```
对于 Windows：  

```
1. aws rds delete-db-snapshot ^
2.   --db-snapshot-identifier my-custom-snapshot
```

# 删除 RDS Custom for Oracle 自动备份
<a name="custom-backup.deleting-backups"></a>

当不再需要 RDS Custom for Oracle 的保留自动备份时，您可以删除它们。此过程与删除 Amazon RDS 备份的过程相同。

## 控制台
<a name="USER_WorkingWithAutomatedBackups-Deleting.CON"></a>

**删除保留的自动备份**

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

1. 在导航窗格中，选择 **Automated backups**（自动备份）。

1. 选择 **Retained (保留)**。

1. 选择要删除的保留自动备份。

1. 对于 **Actions (操作)**，选择 **Delete (删除)**。

1. 在确认页面上，输入 **delete me** 并选择 **Delete (删除)**。

## AWS CLI
<a name="USER_WorkingWithAutomatedBackups-Deleting.CLI"></a>

可以通过使用 AWS CLI 命令 [delete-db-instance-automated-backup](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance-automated-backup.html) 删除保留的自动备份。

以下选项用于删除保留的自动备份：
+ `--dbi-resource-id` – 源 RDS Custom 数据库实例的资源标识符。

  可以通过使用 AWS CLI 命令 [describe-db-instance-automated-backups](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instance-automated-backups.html) 查找保留自动备份的源数据库实例的资源标识符。

以下示例删除具有源数据库实例资源标识符 `custom-db-123ABCEXAMPLE` 的保留自动备份。

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

```
1. aws rds delete-db-instance-automated-backup \
2.     --dbi-resource-id custom-db-123ABCEXAMPLE
```
对于 Windows：  

```
1. aws rds delete-db-instance-automated-backup ^
2.     --dbi-resource-id custom-db-123ABCEXAMPLE
```

# 使用 RDS Custom for Oracle 中的选项组
<a name="custom-oracle-option-groups"></a>

RDS Custom 使用选项组来启用和配置其它功能。*选项组*指定可用于 RDS Custom for Oracle 数据库实例的功能（称为选项）。选项可能具有指定该选项工作方式的设置。当您将 RDS Custom for Oracle 数据库实例与选项组相关联时，将为此实例启用指定的选项和选项设置。有关 Amazon RDS 中的选项组的一般信息，请参阅[使用选项组](USER_WorkingWithOptionGroups.md)。

**Topics**
+ [RDS Custom for Oracle 中的选项组概述](#custom-oracle-option-groups.overview)
+ [Oracle 时区](custom-managing.timezone.md)

## RDS Custom for Oracle 中的选项组概述
<a name="custom-oracle-option-groups.overview"></a>

要为 Oracle 数据库启用选项，可将它们添加到选项组中，然后将选项组关联到数据库实例。有关更多信息，请参阅 [使用选项组](USER_WorkingWithOptionGroups.md)。

**Topics**
+ [RDS Custom for Oracle 选项摘要](#custom-oracle-option-groups.summary)
+ [将选项添加到 RDS Custom for Oracle 数据库实例的基本步骤](#custom-oracle-timezone.overview.steps)
+ [在 RDS Custom for Oracle 中创建选项组](#custom-oracle-timezone.creating)
+ [将选项组与 RDS Custom for Oracle 数据库实例关联](#custom-oracle-timezone.associating)

### RDS Custom for Oracle 选项摘要
<a name="custom-oracle-option-groups.summary"></a>

RDS Custom for Oracle 支持以下数据库实例选项。


****  

| Option | 选项 ID | 说明 | 
| --- | --- | --- | 
|  Oracle 时区  |  `Timezone`  |  RDS Custom for Oracle 数据库实例所使用的时区。  | 

### 将选项添加到 RDS Custom for Oracle 数据库实例的基本步骤
<a name="custom-oracle-timezone.overview.steps"></a>

将选项添加到您的 RDS Custom for Oracle 数据库实例的一般过程如下：

1. 创建新的选项组，或者复制或修改现有选项组。

1. 将 选项添加到该选项组。

1. 在创建或修改选项组时，将其与数据库实例相关联。

### 在 RDS Custom for Oracle 中创建选项组
<a name="custom-oracle-timezone.creating"></a>

您可以创建一个新的选项组，该选项组从原定设置选项组派生其设置。然后，向新的选项组中添加一个或多个选项。或者，如果您已经有一个现有选项组，则可复制带有您已添加到新选项组的所有选项的选项组。要了解如何复制选项组，请参阅[复制选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Copy)。

RDS Custom for Oracle 的默认选项组如下所示：
+ `default:custom-oracle-ee`
+ `default:custom-oracle-se2`
+ `default:custom-oracle-ee-cdb`
+ `default:custom-oracle-se2-cdb`

创建选项组时，设置源自默认选项组。添加了 `TIME_ZONE` 选项后，即可将选项组与数据库实例相关联。

#### 控制台
<a name="custom-oracle-timezone.Create.Console"></a>

 一种创建选项组的方法是使用 AWS 管理控制台。

**通过使用控制台创建新选项组**

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

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗口中，执行以下操作：

   1. 对于 **Name (名称)**，输入选项组的名称，在 AWS 账户内该名称需具有唯一性。此名称只能包含字母、数字和连字符。

   1. 对于**说明**，输入选项组的简要说明。此说明用于显示说明。

   1. 对于**引擎**，请选择以下任何 RDS Custom for Oracle 数据库引擎之一：
      + **custom-oracle-ee**
      + **custom-oracle-se2**
      + **custom-oracle-ee-cdb**
      + **custom-oracle-se2-cdb**

   1. 对于**主要引擎版本**，请选择 RDS Custom for Oracle 支持的主要引擎版本。有关更多信息，请参阅 [支持 RDS Custom for Oracle 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.ora)。

1. 要继续，请选择**创建**。要取消操作，请选择**取消**。

#### AWS CLI
<a name="custom-oracle-timezone.Create.CLI"></a>

要创建选项组，请使用带下列必需参数的 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/create-option-group.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-option-group.html) 命令。
+ `--option-group-name`
+ `--engine-name`
+ `--major-engine-version`
+ `--option-group-description`

**Example**  
下例创建了名为 `testoptiongroup` 的选项组，它是与 Oracle 企业版数据库引擎相关联的选项组。引号中的内容是描述。  
对于 Linux、macOS 或 Unix：  

```
aws rds create-option-group \
    --option-group-name testoptiongroup \
    --engine-name custom-oracle-ee-cdb \
    --major-engine-version 19 \
    --option-group-description "Test option group for a Custom Oracle CDB"
```
对于：Windows  

```
aws rds create-option-group ^
    --option-group-name testoptiongroup ^
    --engine-name custom-oracle-ee-cdb ^
    --major-engine-version 19 ^
    --option-group-description "Test option group for a Custom Oracle CDB"
```

#### RDS API
<a name="custom-oracle-timezone.Create.API"></a>

要创建选项组，请调用 Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateOptionGroup.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateOptionGroup.html) 操作。

### 将选项组与 RDS Custom for Oracle 数据库实例关联
<a name="custom-oracle-timezone.associating"></a>

您可将您的选项组与新的或现有的数据库实例关联：
+ 对于新数据库实例，请在创建实例时应用选项组。有关更多信息，请参阅 [创建 RDS Custom for Oracle 数据库实例](custom-creating.md#custom-creating.create)。
+ 对于现有数据库实例，请修改实例并附加新的选项组以应用选项组。有关更多信息，请参阅 [修改 RDS Custom for Oracle 数据库实例](custom-managing.modifying.md)。

# Oracle 时区
<a name="custom-managing.timezone"></a>

要更改您的 RDS Custom for Oracle 数据库实例使用的系统时区，请使用时区选项。例如，您可能需要更改数据库实例的时区，从而与本地环境或旧版应用程序兼容。时区选项在主机级别更改时区。更改时区会影响所有日期列和值 (包括 `SYSDATE` 和 `SYSTIMESTAMP`)。

**Topics**
+ [RDS Custom for Oracle 中的时区选项设置](#custom-oracle-timezone.Options)
+ [RDS Custom for Oracle 中的可用时区](#custom-oracle-timezone.Zones)
+ [有关在 RDS Custom for Oracle 中设置时区的注意事项](#custom-oracle-timezone.PreReqs)
+ [有关 RDS Custom for Oracle 中的时区设置的限制](#custom-oracle-timezone.overview.limitations)
+ [将时区选项添加到选项组](#custom-oracle-timezone.Add)
+ [删除时区选项](#custom-oracle-timezone.remove)

## RDS Custom for Oracle 中的时区选项设置
<a name="custom-oracle-timezone.Options"></a>

Amazon RDS 支持时区选项的以下设置。


****  

| 选项设置 | 有效值 | 描述 | 
| --- | --- | --- | 
|  `TIME_ZONE`  |  可用时区之一。完整列表请参阅 [RDS Custom for Oracle 中的可用时区](#custom-oracle-timezone.Zones)。  |  数据库实例的新时区。  | 

## RDS Custom for Oracle 中的可用时区
<a name="custom-oracle-timezone.Zones"></a>

以下值可用于时区选项。


****  

| 区 | 时区 | 
| --- | --- | 
|  非洲  |  非洲/开罗、非洲/卡萨布兰卡、非洲/哈拉雷、非洲/拉各斯、非洲/罗安达、非洲/蒙罗维亚、非洲/内罗毕、非洲/的黎波里、非洲/温得和克   | 
|  美洲  |  美洲/阿拉瓜伊纳、美洲/阿根廷/布宜诺斯艾利斯、美洲/亚森松、美洲/Bogota、美洲/加拉加斯、美洲/芝加哥、美洲/奇瓦瓦、美洲/库亚巴、美洲/丹佛、美洲/底特律、美洲/福塔莱萨、美洲/戈特霍布、美洲/危地马拉、美洲/哈利法克斯、美洲/利马、美洲/洛杉矶、美洲/玛瑙斯、美洲/马塔莫罗斯、美洲/墨西哥城、美洲/蒙特雷、美洲/蒙特维多、美洲/纽约、美洲/菲尼克斯、美洲/圣地亚哥、美洲/圣保罗、美洲/蒂华纳、美洲/多伦多   | 
|  亚洲  |  亚洲/阿曼、亚洲/阿什哈巴德、亚洲/巴格达、亚洲/巴库、亚洲/曼谷、亚洲/贝鲁特、亚洲/加尔各答、亚洲/大马士革、亚洲/达卡、亚洲/香港、亚洲/伊尔库茨克、亚洲/雅加达、亚洲/耶路撒冷、亚洲/喀布尔、亚洲/卡拉奇、亚洲/加德满都、亚洲/加尔各答、亚洲/克拉斯诺亚尔斯克、亚洲/马加丹、亚洲/马尼拉、亚洲/马斯喀特、亚洲/新西伯利亚、亚洲/阳光、亚洲/利雅得、亚洲/首尔、亚洲/上海、亚洲/新加坡、亚洲/台北、亚洲/德黑兰、亚洲/东京、亚洲/乌兰巴托、亚洲/符拉迪沃斯托克、亚洲/雅库茨克、亚洲/埃里温   | 
|  大西洋  |  大西洋/亚速尔、大西洋/佛得角   | 
|  澳大利亚  |  澳大利亚/阿德莱德、澳大利亚/布里斯班、澳大利亚/达尔文、澳大利亚/尤克拉、澳大利亚/霍巴特、澳大利亚/豪勋爵岛、澳大利亚/珀斯、澳大利亚/悉尼   | 
|  巴西  |  巴西/迪诺罗尼亚、巴西/东部   | 
|  加拿大  |  加拿大/纽芬兰、加拿大/萨斯喀彻温省   | 
|  ETC  |  ETC/GMT-3  | 
|  欧洲  |  欧洲/阿姆斯特丹、欧洲/雅典、欧洲/柏林、欧洲/都柏林、欧洲/赫尔辛基、欧洲/加里宁格勒、欧洲/伦敦、欧洲/马德里、欧洲/莫斯科、欧洲/巴黎、欧洲/布拉格、欧洲/罗马、欧洲/萨拉热窝   | 
|  太平洋  |  太平洋/阿皮亚、太平洋/奥克兰、太平洋/查塔姆、太平洋/斐济、太平洋/关岛、太平洋/檀香山、太平洋/圣诞岛、太平洋/玛贵斯、太平洋/萨摩亚、太平洋/汤加塔布岛、太平洋/韦克   | 
|  US  |  美国/阿拉斯加、美国/中部、美国/印第安纳东部、美国/东部、美国/太平洋地区   | 
|  UTC  |  UTC  | 

## 有关在 RDS Custom for Oracle 中设置时区的注意事项
<a name="custom-oracle-timezone.PreReqs"></a>

如果您选择设置数据库实例的时区，请考虑以下事项：
+ 添加时区选项时，数据库实例在自动重新启动时会出现短暂中断。
+ 如果不小心错误地设置了时区，则必须将数据库实例恢复到其以前的时区设置。因此，我们强烈建议您在将时区选项添加到实例之前使用以下策略之一：
  + 如果 RDS Custom for Oracle 数据库实例使用默认选项组，请拍摄数据库实例的快照。有关更多信息，请参阅 [创建 RDS Custom for Oracle 快照](custom-backup.creating.md)。
  + 如果您的数据库实例当前使用非默认选项组，请拍摄数据库实例的快照，然后使用时区选项创建一个新的选项组。
+ 强烈建议您在应用 `Timezone` 选项后手动备份数据库实例。
+ 强烈建议您在向生产数据库实例添加时区选项之前，先在测试数据库实例上测试此选项。对于使用系统日期添加日期或时间的表，添加时区选项可能引起问题。我们建议您对数据和应用程序进行分析，以评测更改时区造成的影响。

## 有关 RDS Custom for Oracle 中的时区设置的限制
<a name="custom-oracle-timezone.overview.limitations"></a>

请注意以下限制：
+ 如果不将时区移到支持外围之外，就无法直接在主机上更改时区。要更改数据库时区，必须创建一个选项组。
+ 由于时区选项是一个持久选项（但不是永久选项），因此您无法执行以下操作：
  + 添加选项后，将其从选项组中删除。
  + 将此选项的时区设置修改为其他时区。
+ 您不能将多个选项组与 RDS Custom for Oracle 数据库实例关联。
+ 您无法为 CDB 中的单个 PDB 设置时区。

## 将时区选项添加到选项组
<a name="custom-oracle-timezone.Add"></a>

RDS Custom for Oracle 的默认选项组如下所示：
+ `default:custom-oracle-ee`
+ `default:custom-oracle-se2`
+ `default:custom-oracle-ee-cdb`
+ `default:custom-oracle-se2-cdb`

创建选项组时，设置源自默认选项组。有关 Amazon RDS 中的选项组的一般信息，请参阅[使用选项组](USER_WorkingWithOptionGroups.md)。

### 控制台
<a name="custom-oracle-timezone.Console"></a>

**将时区选项添加到选项组**

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

1. 在导航窗格中，选择**选项组**。

1. 选择要修改的选项组，然后选择 **Add Option (添加选项)**。

1. 在**添加选项**窗口中，执行以下操作：

   1. 选择**时区**。

   1. 在**选项设置**中，选择时区。

   1. 要在添加选项后在所有关联的 RDS Custom for Oracle 数据库实例上启用该选项，对于**立即应用**，请选择**是**。如果选择**否**（默认），则会在下一个维护时段为每个关联数据库实例启用此选项。

   1. 
**重要**  
如果在已附加到一个或多个数据库实例的现有选项组中添加时区选项，所有数据库实例自动重新启动时都会发生短暂中断。

1. 根据需要设置完毕后，选择 **Add Option (添加选项)**。

1. 备份时区已更新的 RDS Custom for Oracle 数据库实例。有关更多信息，请参阅 [创建 RDS Custom for Oracle 快照](custom-backup.creating.md)。

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

以下示例使用 AWS CLI [add-option-to-option-group](https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html) 命令将 `Timezone` 选项和 `TIME_ZONE` 选项设置添加到名为 `testoptiongroup` 的选项组。时区设置为 `America/Los_Angeles`。

对于 Linux、macOS 或 Unix：

```
aws rds add-option-to-option-group \
    --option-group-name "testoptiongroup" \
    --options "OptionName=Timezone,OptionSettings=[{Name=TIME_ZONE,Value=America/Los_Angeles}]" \
    --apply-immediately
```

对于：Windows

```
aws rds add-option-to-option-group ^
    --option-group-name "testoptiongroup" ^
    --options "OptionName=Timezone,OptionSettings=[{Name=TIME_ZONE,Value=America/Los_Angeles}]" ^
    --apply-immediately
```

## 删除时区选项
<a name="custom-oracle-timezone.remove"></a>

时区选项是持久选项，但不是永久选项。将此选项添加到选项组后不能将其删除。要取消旧选项组与数据库实例的关联，请执行以下操作：

1. 使用更新后的 `Timezone` 选项创建新的选项组。

1. 修改数据库实例时，将新选项组与数据库实例关联。

# 将本地数据库迁移到 RDS Custom for Oracle
<a name="custom-migrating-oracle"></a>

在将本地 Oracle 数据库迁移到 RDS Custom for Oracle 之前，需要考虑以下因素：
+ 应用程序可以承受的停机时间
+ 源数据库的大小
+ 网络连接
+ 对回退计划的要求
+ 源和目标 Oracle 数据库版本和数据库实例操作系统类型
+ 可用的复制工具，例如 AWS Database Migration Service、Oracle GoldenGate 或第三方复制工具

基于这些因素，您可以选择物理迁移、逻辑迁移或两者的组合。如果选择物理迁移，可以使用以下技术：

RMAN 复制  
主动数据库复制不需要备份您的源数据库。这种复制通过网络将数据库文件复制到辅助实例，将实时源数据库复制到目标主机。RMAN `DUPLICATE` 命令将所需文件复制为映像副本或备份集。要了解此技术，请参阅 AWS 博客文章[使用 RMAN 复制将 Oracle 数据库物理迁移到 Amazon RDS Custom](https://aws.amazon.com/blogs/database/physical-migration-of-oracle-databases-to-amazon-rds-custom-using-rman-duplication/)。

Oracle Data Guard  
使用此技术，您备份一个主本地数据库，并将备份复制到 Amazon S3 桶中。然后，将备份复制到 RDS Custom for Oracle 备用数据库实例。执行必要的配置后，手动将主数据库切换到 RDS Custom for Oracle 备用数据库。要了解此技术，请参阅 AWS 博客文章[使用 Data Guard 将 Oracle 数据库物理迁移到 Amazon RDS Custom](https://aws.amazon.com/blogs/database/physical-migration-of-oracle-databases-to-amazon-rds-custom-using-data-guard/)。

有关将在逻辑上数据导入到 RDS for Oracle 的一般信息，请参阅[将数据导入到 Amazon RDS 上的 Oracle](Oracle.Procedural.Importing.md)。

# 为 Amazon RDS Custom for Oracle 升级数据库实例
<a name="custom-upgrading"></a>

您可以通过修改 Amazon RDS Custom 数据库实例以使用新的自定义引擎版本 (CEV) 来升级该实例。有关升级的一般信息，请参阅[升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

**Topics**
+ [RDS Custom for Oracle 升级概述](#custom-upgrading.overview)
+ [RDS Custom for Oracle 升级的要求](#custom-upgrading-reqs)
+ [RDS Custom for Oracle 数据库升级注意事项](custom-upgrading-considerations.md)
+ [RDS Custom for Oracle 操作系统升级注意事项](custom-upgrading-considerations-os.md)
+ [查看 RDS Custom for Oracle 数据库实例的有效 CEV 升级目标](custom-upgrading-target.md)
+ [升级 RDS Custom for Oracle 数据库实例](custom-upgrading-modify.md)
+ [查看 RDS Custom 数据库实例的待定数据库升级](custom-upgrading-pending.md)
+ [排查 RDS Custom for Oracle 数据库实例升级失败的问题](custom-upgrading-failure.md)

## RDS Custom for Oracle 升级概述
<a name="custom-upgrading.overview"></a>

使用 RDS Custom for Oracle，您可以创建新的 CEV，然后将您的实例修改为使用新的 CEV，以此修补您的 Oracle 数据库或数据库实例操作系统（OS）。

**Topics**
+ [CEV 升级选项](#custom-upgrading.overview.cev-options)
+ [在没有 CEV 的情况下进行修补](#custom-upgrading.overview.no-cevs)
+ [使用 CEV 修补数据库实例的一般步骤](#custom-upgrading.overview.general-steps)

### CEV 升级选项
<a name="custom-upgrading.overview.cev-options"></a>

当您创建 CEV 以进行升级时，可以选择以下互斥的选项：

**仅限数据库**  
重复使用数据库实例当前所使用的亚马逊机器映像（AMI），但要指定不同的数据库二进制文件。RDS Custom 会分配一个新的二进制卷，然后将其附加到现有的 Amazon EC2 实例。RDS Custom 用使用目标数据库版本的新卷替换整个数据库卷。

**仅限操作系统**  
重复使用数据库实例当前所使用的数据库二进制文件，但要指定不同的 AMI。RDS Custom 会分配一个新的 Amazon EC2 实例，然后将现有二进制卷附加到新实例。保留现有的数据库卷。

如果要同时升级操作系统和数据库，则必须升级 CEV 两次。您可以先升级操作系统后再升级数据库，也可以先升级数据库后再升级操作系统。

**警告**  
修补操作系统时，会丢失根卷数据和任何现有的操作系统自定义项。因此，我们强烈建议您不要使用根卷来进行安装或存储永久数据或文件。我们还建议您在升级之前先备份数据。

### 在没有 CEV 的情况下进行修补
<a name="custom-upgrading.overview.no-cevs"></a>

我们强烈建议您使用 CEV 升级 RDS Custom for Oracle 数据库实例。RDS Custom for Oracle 自动化可将补丁元数据与数据库实例上的数据库二进制文件同步。

在特殊情况下，RDS Custom 支持使用 OPatch 实用工具将“一次性”数据库补丁直接应用于底层 Amazon EC2 实例。有效的使用案例可能是您想要立即应用的数据库补丁，但 RDS Custom 团队正在升级 CEV 功能，这会导致延迟。要手动应用数据库补丁，请执行以下步骤：

1. 暂停 RDS Custom 自动化。

1. 将您的补丁应用于 Amazon EC2 实例上的数据库二进制文件。

1. 恢复 RDS Custom 自动化。

上述技术的缺点是必须手动将数据库补丁应用到要升级的每个实例。相比之下，当您创建新的 CEV 时，您可以使用相同的 CEV 创建或升级多个数据库实例。

### 使用 CEV 修补数据库实例的一般步骤
<a name="custom-upgrading.overview.general-steps"></a>

无论您修补操作系统还是数据库，请执行以下基本步骤：

1. 创建包含以下任一内容的 CEV，具体取决于您要修补数据库还是操作系统：
   + 要应用于数据库实例的 Oracle 数据库 RU
   + 不同的 AMI（最新的 AMI，或是您指定的 AMI），以及一个用作源的现有 CEV 

   按照 [创建 CEV](custom-cev.create.md) 中的步骤操作。

1. （对于数据库修补为可选）通过运行 `describe-db-engine-versions` 来检查可用的引擎版本升级。

1. 通过运行 `modify-db-instance` 启动修补过程。

   正在修补的实例的状态不同，如下所示：
   + 当 RDS 修补数据库时，数据库实例的状态将更改为**正在升级**。
   + 当 RDS 修补操作系统时，数据库实例的状态将更改为**正在修改**。

   当数据库实例的状态为**可用**时，修补已完成。

1. 通过运行 `describe-db-instances` 来确认您的数据库实例使用的是新 CEV。

## RDS Custom for Oracle 升级的要求
<a name="custom-upgrading-reqs"></a>

在将您的 RDS Custom for Oracle 数据库实例升级到目标 CEV 时，请确保满足以下要求：
+ 要升级到的目标 CEV 必须存在。
+ 您必须以单个操作升级操作系统或数据库。不支持在单个 API 调用中同时升级操作系统和数据库。
+ 目标 CEV 必须使用当前 CEV 清单中的安装参数设置。例如，您无法将使用默认 Oracle 主目录的数据库升级到使用非默认 Oracle 主目录的 CEV。
+ 对于数据库升级，目标 CEV 必须使用新的次要数据库版本，而不是新的主要版本。例如，您无法从 Oracle Database 12c CEV 升级到 Oracle Database 19c CEV。但是，您可以从版本 21.0.0.0.ru-2023-04.rur-2023-04.r1 版本升级到版本 21.0.0.0.ru-2023-07.rur-2023-07.r1。
+ 对于操作系统升级，目标 CEV 必须使用不同的 AMI，但具有相同的主要版本。

# RDS Custom for Oracle 数据库升级注意事项
<a name="custom-upgrading-considerations"></a>

如果您计划升级数据库，请考虑以下事项：
+ 当前支持的操作系统（OS）版本为 Oracle Linux 8。要继续接收来自 RDS Custom for Oracle 的最新安全更新和补丁，请通过指定基于此操作系统的 CEV，将您的数据库实例升级到 Oracle Linux 8。Oracle Database 12c 版本 1（12.1）、Oracle Database 版本 2（12.2）和 Oracle Database 19c 是唯一支持 Oracle Linux 8 的版本。要迁移到最新的 Oracle Linux 8 AMI，请将您的操作系统升级到最新的 AMI。有关更多信息，请参阅 [升级 RDS Custom for Oracle 数据库实例](custom-upgrading-modify.md)。

  Oracle Linux 7.9 于 2024 年 12 月 31 日终止支持。要在支持终止后继续运行 Oracle Linux 7，需要购买 Oracle 扩展支持许可证。您负责安全更新，并且必须手动修补 RDS Custom for Oracle 实例。有关更多信息，请参阅 [Lifetime Support Policy: Coverage for Oracle Open Source Service Offerings](https://www.oracle.com/a/ocom/docs/elsp-lifetime-069338.pdf)。
+ 当您升级主数据库实例中的数据库二进制文件时，RDS Custom for Oracle 会自动升级您的只读副本。但是，在升级操作系统时，您必须手动升级只读副本。
+ 在将容器数据库（CDB）升级为新的数据库版本时，RDS Custom for Oracle 会检查所有 PDB 是否已打开或是否能够打开。如果不满足这些条件，RDS Custom 会停止检查并将数据库返回到其原始状态，而无需尝试升级。如果满足条件，RDS Custom 首先修补 CDB 根目录，然后并行修补所有其他 PDB（包括 `PDB$SEED`）。

  完成修补后，RDS Custom 会尝试打开所有 PDB。如果任何 PDB 无法打开，则会收到以下事件：`The following PDBs failed to open: list-of-PDBs`。如果 RDS Custom 无法修补 CDB 根目录或任何 PDB，则实例将进入 `PATCH_DB_FAILED` 状态。
+ 您可能需要同时执行主要数据库版本升级和将非 CDB 转换为 CDB。在这种情况下，建议您按以下步骤操作：

  1. 创建一个使用 Oracle 多租户架构的新 RDS Custom for Oracle 数据库实例。

  1. 将非 CDB 插入 CDB 根目录，将其创建为 PDB。确保非 CDB 与您的 CDB 是相同的主要版本。

  1. 通过运行 `noncdb_to_pdb.sql` Oracle SQL 脚本来转换您的 PDB。

  1. 验证您的 CDB 实例。

  1. 升级 CDB 实例。

# RDS Custom for Oracle 操作系统升级注意事项
<a name="custom-upgrading-considerations-os"></a>

在计划操作系统升级时，请考虑以下事项：
+ 您不能提供自己的 AMI 以在 RDS Custom for Oracle CEV 中使用。您可以指定使用 Oracle Linux 8 的默认 AMI，也可以指定 RDS Custom for Oracle CEV 以前使用过的 AMI。
**注意**  
当发现常见漏洞时，RDS Custom for Oracle 会发布新的默认 AMI。没有固定的时间表可用或提供保证。RDS Custom for Oracle 往往每 30 天发布一次新的默认 AMI。
+ 当您升级主数据库实例中的操作系统时，必须手动升级其关联的只读副本。
+ 请在开始修补操作系统之前，为可用区中的实例类型预留足够的 Amazon EC2 计算容量。

  创建容量预留时，您需要指定可用区、实例数量和实例属性（包括实例类型）。例如，如果数据库实例使用底层 EC2 实例类型 r5.large，建议您在可用区中为 r5.large 预留 EC2 容量。在操作系统修补期间，RDS Custom 会创建一个类型为 db.r5.large 的新主机，如果可用区缺少用于该实例类型的 EC2 容量，则该主机可能会卡顿。如果您预留 EC2 容量，则可以降低因容量限制而导致修补受阻的风险。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[按需容量预留](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)。
+ 在升级操作系统之前，请对数据库实例进行备份。升级会删除您的根卷数据和任何现有的操作系统自定义项。
+ 在责任共担模型中，您有责任使操作系统保持最新状态。RDS Custom for Oracle 不强制要求您将哪些补丁应用于您的操作系统。如果您的 RDS Custom for Oracle 功能正常，则可以无限期地使用与此 CEV 关联的 AMI。

# 查看 RDS Custom for Oracle 数据库实例的有效 CEV 升级目标
<a name="custom-upgrading-target"></a>

您可以在 AWS 管理控制台 中的 **Custom engine version**（自定义引擎版本）页面中查看现有的 CEV。

您也可以使用 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) AWS CLI 命令查找适用于数据库实例升级的有效 CEV，如以下示例所示。此示例假设您使用引擎版本 `19.my_cev1` 创建了数据库实例，并且升级版本 `19.my_cev2` 和 `19.my_cev` 存在。

```
aws rds describe-db-engine-versions --engine custom-oracle-ee --engine-version 19.my_cev1
```

输出与以下内容类似。`ImageId` 字段显示 AMI ID。

```
{
    "DBEngineVersions": [
        {
            "Engine": "custom-oracle-ee",
            "EngineVersion": "19.my_cev1",
            ...
            "Image": {
                "ImageId": "ami-2345",
                "Status": "active"
            },
            "DBEngineVersionArn": "arn:aws:rds:us-west-2:123456789012:cev:custom-oracle-ee/19.my_cev1/12a34b5c-67d8-90e1-2f34-gh56ijk78lm9"
            "ValidUpgradeTarget": [
                {
                    "Engine": "custom-oracle-ee",
                    "EngineVersion": "19.my_cev2",
                    "Description": "19.my_cev2 description",
                    "AutoUpgrade": false,
                    "IsMajorVersionUpgrade": false
                },
                {
                    "Engine": "custom-oracle-ee",
                    "EngineVersion": "19.my_cev3",
                    "Description": "19.my_cev3 description",
                    "AutoUpgrade": false,
                    "IsMajorVersionUpgrade": false
                }
            ]
            ...
```

# 升级 RDS Custom for Oracle 数据库实例
<a name="custom-upgrading-modify"></a>

要升级您的 RDS Custom for Oracle 数据库实例，请将其修改为使用新的 CEV。此 CEV 可以包含新的数据库二进制文件或新的 AMI。例如，要将 Oracle Linux 7.9 数据库实例升级到 Oracle Linux 8，请指定使用 Oracle Linux 8 的最新 AMI。如果要升级数据库和操作系统，则必须分别执行两次升级。

**注意**  
如果升级数据库，RDS Custom 会在升级主数据库实例后自动升级只读副本。如果升级操作系统，则必须手动升级副本。

开始之前，请查看 [RDS Custom for Oracle 升级的要求](custom-upgrading.md#custom-upgrading-reqs)和 [RDS Custom for Oracle 数据库升级注意事项](custom-upgrading-considerations.md)。

## 控制台
<a name="custom-upgrading-modify.CON"></a>

**升级 RDS Custom for Oracle 数据库实例**

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

1. 在导航窗格中，选择**数据库**，然后选择要升级的 RDS Custom for Oracle 数据库实例。

1. 选择**修改**。将显示**修改数据库实例**页面。

1. 对于**数据库引擎版本**，请选择新的 CEV。执行以下操作：
   + 如果您要修补数据库，请确保 CEV 指定的数据库二进制文件与数据库实例所用的二进制文件不同，并且不指定与数据库实例当前所用 AMI 不同的 AMI。
   + 如果您要修补操作系统，请确保 CEV 指定的 AMI 与数据库实例当前所用的 AMI 不同，并且不指定不同的数据库二进制文件。
**警告**  
修补操作系统时，会丢失根卷数据和任何现有的操作系统自定义项。

1. 请选择 **Continue**（继续），以查看修改摘要。

   请选择 **Apply immediately**（立即应用）以立即应用更改。

1. 如果更改正确无误，请选择 **Modify DB Instance**（修改数据库实例）。也可以选择 **Back (返回)** 编辑您的更改，或选择 **Cancel (取消)** 取消更改。

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

以下示例显示了可能的升级方案。这些示例假设您创建了具有以下特征的 RDS Custom for Oracle 数据库实例：
+ 数据库实例名为 `my-custom-instance`
+ CEV 名为 `19.my_cev1`
+ 使用非 CDB 架构的 Oracle Database 19c
+ 使用 AMI `ami-1234` 的 Oracle Linux 8

提供最新服务的 AMI 是 `ami-2345`。您可以通过运行 CLI 命令 `describe-db-engine-versions` 找到您的 AMI：

**Topics**
+ [升级操作系统](#custom-upgrading-modify.CLI.os)
+ [升级数据库](#custom-upgrading-modify.CLI.db)

### 升级操作系统
<a name="custom-upgrading-modify.CLI.os"></a>

在本示例中，您要将 `ami-1234` 升级到 `ami-2345`，即提供最新服务的 AMI。由于这是操作系统升级，所以 `ami-1234` 和 `ami-2345` 的数据库二进制文件必须相同。您可以基于 `19.my_cev1` 创建一个名为 `19.my_cev2` 的新 CEV。

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

```
aws rds create-custom-db-engine-version \
    --engine custom-oracle-ee \
    --engine-version 19.my_cev2 \
    --description "Non-CDB CEV based on ami-2345" \
    --kms-key-id key-name \
    --source-custom-db-engine-version-identifer arn:aws:rds:us-west-2:123456789012:cev:custom-oracle-ee/19.my_cev1/12345678-ab12-1234-cde1-abcde123456789 \
    --image-id ami-2345
```
对于 Windows：  

```
aws rds create-custom-db-engine-version ^
    --engine custom-oracle-ee ^
    --engine-version 19.my_cev2 ^
    --description "Non-CDB CEV based on ami-2345" ^
    --kms-key-id key-name ^
    --source-custom-db-engine-version-identifer arn:aws:rds:us-west-2:123456789012:cev:custom-oracle-ee/19.my_cev1/12345678-ab12-1234-cde1-abcde123456789 ^
    --image-id ami-2345
```

要升级 RDS Custom 数据库实例，请使用带有下列参数的 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI 命令：
+ `--db-instance-identifier` – 指定要升级的 RDS Custom for Oracle 数据库实例。
+ `--engine-version` – 指定具有新 AMI 的 CEV。
+ `--no-apply-immediately` \$1 `--apply-immediately` – 指定是立即执行升级还是等到计划的维护时段

以下示例将 `my-custom-instance` 升级到版本 `19.my_cev2`。只升级了操作系统。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --engine-version 19.my_cev2 \
    --apply-immediately
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --engine-version 19.my_cev2 ^
    --apply-immediately
```

### 升级数据库
<a name="custom-upgrading-modify.CLI.db"></a>

在此示例中，您希望将 Oracle 补丁 p35042068 应用到 RDS for Oracle 数据库实例。由于您在[升级操作系统](#custom-upgrading-modify.CLI.os)中升级了操作系统，因此您的数据库实例当前正在使用 `19.my_cev2`，其基于 `ami-2345`。您创建了一个名为 `19.my_cev3` 的新 CEV，该 CEV 也使用 `ami-2345`，但您在 `$MANIFEST` 环境变量中指定一个新的 JSON 清单。因此，只有新 CEV 中的数据库二进制文件与您的实例当前所用的 CEV 不同。

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

```
aws rds create-custom-db-engine-version \
    --engine custom-oracle-ee \
    --engine-version 19.my_cev3 \
    --description "Non-CDB CEV with p35042068 based on ami-2345" \
    --kms-key-id key-name \
    --image-id ami-2345 \
    --manifest $MANIFEST
```
对于 Windows：  

```
aws rds create-custom-db-engine-version ^
    --engine custom-oracle-ee ^
    --engine-version 19.my_cev3 ^
    --description "Non-CDB CEV with p35042068 based on ami-2345" ^
    --kms-key-id key-name ^
    --image-id ami-2345 ^
    --manifest $MANIFEST
```

以下示例将 `my-custom-instance` 升级到引擎版本 `19.my_cev3`。只升级了数据库。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --engine-version 19.my_cev3 \
    --apply-immediately
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --engine-version 19.my_cev3 ^
    --apply-immediately
```

# 查看 RDS Custom 数据库实例的待定数据库升级
<a name="custom-upgrading-pending"></a>

您可以使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 或 [describe-pending-maintenance-actions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-pending-maintenance-actions.html) AWS CLI 命令查看 Amazon RDS Custom 数据库实例的待定数据库升级。

但是，如果您使用 `--apply-immediately` 选项或升级正在进行中，则此方法将不起作用。

以下 `describe-db-instances` 命令会显示 `my-custom-instance` 的待定数据库升级。

```
aws rds describe-db-instances --db-instance-identifier my-custom-instance
```

输出与以下内容类似。

```
{
    "DBInstances": [
        {
           "DBInstanceIdentifier": "my-custom-instance",
            "EngineVersion": "19.my_cev1",
            ...
            "PendingModifiedValues": {
                "EngineVersion": "19.my_cev3"
            ...
            }
        }
    ]
}
```

# 排查 RDS Custom for Oracle 数据库实例升级失败的问题
<a name="custom-upgrading-failure"></a>

如果 RDS Custom 数据库实例升级失败，将生成 RDS 事件并且数据库实例状态变为 `upgrade-failed`。

您可以使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI 命令查看此状态，如以下示例所示。

```
aws rds describe-db-instances --db-instance-identifier my-custom-instance
```

输出与以下内容类似。

```
{
    "DBInstances": [
        {
           "DBInstanceIdentifier": "my-custom-instance",
            "EngineVersion": "19.my_cev1",
            ...
            "PendingModifiedValues": {
                "EngineVersion": "19.my_cev3"
            ...
            }
            "DBInstanceStatus": "upgrade-failed"
        }
    ]
}
```

升级失败后，所有数据库操作都将被阻止，修改数据库实例以执行以下任务除外：
+ 重试相同的升级
+ 暂停和恢复 RDS Custom 自动化
+ 时间点恢复 (PITR)
+ 删除数据库实例

**注意**  
如果已为 RDS Custom 数据库实例暂停自动化操作，则在恢复自动化之前，您将无法重试升级。  
RDS 管理的只读副本的升级失败与主副本的升级失败情况适用相同的操作。

有关更多信息，请参阅 [排查 RDS Custom for Oracle 的升级问题](custom-troubleshooting.md#custom-troubleshooting-upgrade)。

# 针对 Amazon RDS Custom for Oracle 排查数据库问题
<a name="custom-troubleshooting"></a>

RDS Custom 的责任共担模型提供了操作系统外壳级别的访问权限和数据库管理员访问权限。RDS Custom 会在您的账户中运行资源，与 Amazon RDS 不同，因为后者会在系统账户中运行资源。访问权限更多，责任也更大。在下面的各个部分，您可以了解如何排查 Amazon RDS Custom 数据库实例的问题。

**注意**  
本节介绍如何排查 RDS Custom for Oracle 的问题。有关排查 RDS Custom for Oracle 的问题，请参阅[针对 Amazon RDS Custom for SQL Server 排查数据库的问题](custom-troubleshooting-sqlserver.md)。

**Topics**
+ [查看 RDS Custom 事件](#custom-troubleshooting.support-perimeter.viewing-events)
+ [订阅 RDS Custom 事件](#custom-troubleshooting.support-perimeter.subscribing)
+ [排查数据库实例创建问题](#custom-troubleshooting.creation-issues)
+ [为 RDS Custom for Oracle 排除自定义引擎版本创建的故障](#custom-troubleshooting.cev)
+ [修复 RDS Custom for Oracle 中不支持的配置](#custom-troubleshooting.fix-unsupported)
+ [排查 RDS Custom for Oracle 的升级问题](#custom-troubleshooting-upgrade)
+ [排查 RDS Custom for Oracle 的副本提升问题](#custom-troubleshooting-promote)

## 查看 RDS Custom 事件
<a name="custom-troubleshooting.support-perimeter.viewing-events"></a>

对于 RDS Custom 和 Amazon RDS 数据库实例而言，查看事件的流程是相同的。有关更多信息，请参阅 [查看 Amazon RDS 事件](USER_ListEvents.md)。

要使用 AWS CLI 查看 RDS Custom 事件通知，请使用 `describe-events` 命令。RDS Custom 推出了几项新事件。事件类别与 Amazon RDS 的事件类别相同。有关事件列表，请参阅 [Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。

以下示例检索指定 RDS Custom 数据库实例发生的事件的详细信息。

```
1. aws rds describe-events \
2.     --source-identifier my-custom-instance \
3.     --source-type db-instance
```

## 订阅 RDS Custom 事件
<a name="custom-troubleshooting.support-perimeter.subscribing"></a>

对于 RDS Custom 和 Amazon RDS 数据库实例而言，订阅事件的流程是相同的。有关更多信息，请参阅 [订阅 Amazon RDS 事件通知](USER_Events.Subscribing.md)。

要使用 CLI 订阅 RDS Custom 事件通知，请使用 `create-event-subscription` 命令。包括以下必需参数：
+ `--subscription-name`
+ `--sns-topic-arn`

以下示例为当前的 AWS 账户中的 RDS Custom 数据库实例创建了备份和恢复事件的订阅。您也可以将通知发送到 `--sns-topic-arn` 指定的 Amazon Simple Notification Service (Amazon SNS) 主题。

```
1. aws rds create-event-subscription \
2.     --subscription-name my-instance-events \
3.     --source-type db-instance \
4.     --event-categories '["backup","recovery"]' \
5.     --sns-topic-arn arn:aws:sns:us-east-1:123456789012:interesting-events
```

## 排查数据库实例创建问题
<a name="custom-troubleshooting.creation-issues"></a>

如果您的环境配置不正确或缺少所需的权限，则无法创建或还原 RDS Custom for Oracle 数据库实例。当您尝试创建或还原数据库实例时，Amazon RDS 会验证您的环境，并在检测到任何问题时返回特定的错误消息。

解决所有问题后，请再次尝试创建或还原 RDS Custom for Oracle 数据库实例。

### 常见权限问题
<a name="custom-troubleshooting.creation-issues.permissions"></a>

当您创建或还原 RDS Custom for Oracle 实例时，Amazon RDS 会验证您的环境是否具有所需的权限。如果权限缺失或被拒绝，则操作将失败并显示特定的错误消息。


| 问题类型 | 错误消息 | Action | 
| --- | --- | --- | 
|  IAM 角色访问策略  |  由于资源不兼容，您无法创建数据库实例。主机环境验证因权限问题失败，具体如下：在资源 <resource> 上的 <permission> 权限验证失败。错误信息为：用户 <user> 无权在资源 <resource> 上执行 <permission> 操作，因为没有基于身份的策略允许 <permission> 操作。  |  确保列出的必需权限存在并在包含相应资源的访问策略中设置为 `Allow`。  | 
|  权限边界  |  由于资源不兼容，您无法创建数据库实例。主机环境验证因权限问题失败，具体如下：在资源 <resource> 上的 <permission> 权限验证失败。错误信息为：用户 <user> 无权在资源 <resource> 上执行 <permission> 操作，因为权限边界中存在明确拒绝。  |  确认附加到实例角色的权限边界没有限制列出的所需权限和资源。  | 
|  服务控制策略  |  由于资源不兼容，您无法创建数据库实例。主机环境验证因权限问题失败，具体如下：在资源 <resource> 上的 <permission> 权限验证失败。错误信息为：用户 <user> 无权在资源 <resource> 上执行 <permission> 操作，因为服务控制策略中存在明确拒绝。  |  请联系您的 AWS Organizations 管理员并确认附加到您账户的服务控制策略没有限制列出的所需权限和资源。  | 
|  资源控制策略  |  由于资源不兼容，您无法创建数据库实例。主机环境验证因权限问题失败，具体如下：在资源 <resource> 上的 <permission> 权限验证失败。错误信息为：用户 <user> 无权在资源 <resource> 上执行 <permission> 操作，因为资源控制策略中存在明确拒绝。  |  请联系您的 AWS Organizations 管理员并确认附加到您账户的资源控制策略没有限制列出的所需权限和资源。  | 
|  VPC 端点策略  |  由于资源不兼容，您无法创建数据库实例。主机环境验证因权限问题失败，具体如下：在资源 <resource> 上的 <permission> 权限验证失败。错误信息为：用户 <user> 无权在资源 <resource> 上执行 <permission> 操作，因为 VPC 端点策略中存在明确拒绝。  |  确保所需的 VPC 端点存在，且附加到这些端点的策略不会限制列出的所需权限和资源。  | 

### 联网问题
<a name="custom-troubleshooting.creation-issues.networking"></a>

除查看 [步骤 6：为 RDS Custom for Oracle 配置 VPC](custom-setup-orcl.md#custom-setup-orc.vpc-config) 外，还要确认以下各项配置是否正确，并且没有限制对所需 AWS 服务的访问：

**附加到 Amazon EC2 实例的安全组**  
确保安全组允许 RDS 自定义操作所需的所有入站和出站流量。

**附加到您的 VPC 的安全组**  
验证 VPC 安全组是否允许往返所需 AWS 服务的流量。

**VPC 端点**  
确认所有必需的 VPC 端点均已正确配置且可访问。

**网络访问控制列表**  
检查网络 ACL 是否未阻塞 RDS 自定义功能所需的流量。

## 为 RDS Custom for Oracle 排除自定义引擎版本创建的故障
<a name="custom-troubleshooting.cev"></a>

当 CEV 创建失败时，RDS Custom 将发布带有消息 `Creation failed for custom engine version major-engine-version.cev_name` 的 `RDS-EVENT-0198`，并包含有关失败的详细信息。例如，事件会打印丢失的文件。

CEV 创建可能会因为以下问题而失败：
+ 包含安装文件的 Amazon S3 存储桶与您的 CEV 不在同一个 AWS 区域。
+ 当您首次在 AWS 区域 中提出 CEV 创建请求时，RDS Custom 将创建 S3 存储桶，用于存储 RDS Custom 资源（例如 CEV 构件，AWS CloudTrail 日志和事务日志）。

  如果 RDS Custom 无法创建 S3 存储桶，则 CEV 创建将会失败。要么调用者没有 [步骤 5：为您的 IAM 用户或角色授予所需的权限](custom-setup-orcl.md#custom-setup-orcl.iam-user) 中所述的 S3 权限，要么 S3 存储桶的数量已达到限制。
+ 调用者没有权限以从包含安装媒体文件的 S3 存储桶中获取文件。[步骤 7：添加必要的 IAM 权限](custom-cev.preparing.md#custom-cev.preparing.iam) 中描述了这些权限。
+ 您的 IAM 策略有 `aws:SourceIp` 条件。请务必遵循《AWS Identity and Access Management 用户指南**》中 [AWS 根据源 IP 拒绝对 AWS 的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html)中的建议。还要确保调用方具有 [步骤 5：为您的 IAM 用户或角色授予所需的权限](custom-setup-orcl.md#custom-setup-orcl.iam-user) 中所述的 S3 权限。
+ CEV 清单中列出的安装媒体文件不在 S3 存储桶中。
+ RDS Custom 不知道安装文件的 SHA-256 校验和。

  确认所提供文件的 SHA-256 校验和与 Oracle 网站上的 SHA-256 校验和相符。如果校验和相符，请联系 [AWS Support](https://aws.amazon.com/premiumsupport) 并提供失败的 CEV 名称、文件名和校验和。
+ OPatch 版本与补丁文件不兼容。您可能会收到以下消息：`OPatch is lower than minimum required version. Check that the version meets the requirements for all patches, and try again`。要应用 Oracle 补丁，必须使用兼容的 OPatch 实用工具版本。您可以在补丁的自述文件中找到所需的 OPatch 实用工具版本。从 My Oracle Support 下载最新的 OPatch 实用工具，然后再次尝试创建 CEV。
+ CEV 清单中所指定补丁的顺序错误。

您可以在 RDS 控制台（在导航窗格中，选择 **Events**（事件））中或者使用 `describe-events` AWS CLI 命令查看 RDS 事件。默认持续时间为 60 分钟。如果没有返回任何事件，请指定更长的持续时间，如以下示例中所示。

```
aws rds describe-events --duration 360
```

目前，从 Amazon S3 导入文件以创建 CEV 的 MediaImport 服务没有与 AWS CloudTrail 整合。因此，如果您在 CloudTrail 中为 Amazon RDS 启用数据记录功能，对诸如 `CreateCustomDbEngineVersion` 事件等 MediaImport 服务的调用将不会记录。

但是，您可能会看到来自访问您 Amazon S3 存储桶的 API Gateway 的调用。这些调用来自 `CreateCustomDbEngineVersion` 事件的 MediaImport 服务。

## 修复 RDS Custom for Oracle 中不支持的配置
<a name="custom-troubleshooting.fix-unsupported"></a>

在责任共担模式中，您应负责修复导致 RDS Custom for Oracle 数据库实例进入 `unsupported-configuration` 状态的配置问题。如果问题与 AWS 基础设施有关，则可以使用控制台或 AWS CLI 修复该问题。如果问题与操作系统或数据库配置有关，则可以登录到主机进行修复。

**注意**  
本节介绍如何修复 RDS Custom for Oracle 中不支持的配置。有关 RDS Custom for SQL Server 的信息，请参阅[修复 RDS Custom for SQL Server 中不支持的配置](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.fix-unsupported)。

以下各表包含支持外围所发送的通知和事件以及如何修复这些问题的说明。这些通知和支持外围可能会更改。有关支持外围的背景，请参阅[RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。有关事件描述，请参阅[Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。


| 事件 ID | 配置 | RDS 事件消息 | Action | 
| --- | --- | --- | --- | 
|  `SP-O0000`  |  手动不支持的配置  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是 *原因*。。  |  要解决此问题，请创建 支持 案例。  | 

**AWS 资源（基础设施）**


| 事件 ID | 配置 | RDS 事件消息 | Action | 
| --- | --- | --- | --- | 
|  SP-O1001  |  Amazon Elastic Block Store（Amazon EBS）卷  |  以下 EBS 卷已添加到 EC2 实例 *ec2\$1id* 中：*volume\$1id*。要解决此问题，请将指定的卷与实例分离。  |  除了从 Amazon Machine Image（AMI）创建的根卷之外，RDS Custom 还创建了两种类型的 EBS 卷，并将它们与 EC2 实例关联。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 当您创建数据库实例时，您指定的存储配置将配置数据卷。 支持外围将监控以下内容： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 使用以下 CLI 命令比较 EBS 卷详细信息和 RDS Custom for Oracle DB 实例详细信息的卷类型。 <pre>aws rds describe-db-instances \ <br />    --db-instance-identifier db-instance-name | grep StorageType</pre>  | 
|  SP-O1002  |  Amazon Elastic Block Store（Amazon EBS）卷  |  EBS 卷 *volume\$1id* 已与 EC2 实例 [*ec2\$1id*] 相分离。您无法将原始卷与该实例进行分离。要解决此问题，请将 *volume\$1id* 重新附加到 *ec2\$1id*。  |  除了从 Amazon Machine Image（AMI）创建的根卷之外，RDS Custom 还创建了两种类型的 EBS 卷，并将它们与 EC2 实例关联。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 当您创建数据库实例时，您指定的存储配置将配置数据卷。 支持外围将监控以下内容： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 使用以下 CLI 命令比较 EBS 卷详细信息和 RDS Custom for Oracle DB 实例详细信息的卷类型。 <pre>aws rds describe-db-instances \ <br />    --db-instance-identifier db-instance-name | grep StorageType</pre>  | 
|  SP-O1003  |  Amazon Elastic Block Store（Amazon EBS）卷  |  对已附加到 EC2 实例 *ec2\$1id* 的源 EBS 卷 *volume\$1id* 进行了如下修改：大小从 [*X*] 更改为 [*Y*]，类型从 [*N*] 更改为 [*M*]，IOPS 从 [*J*] 更改为 [*K*]。要解决此问题，请恢复修改。  |  除了从 Amazon Machine Image（AMI）创建的根卷之外，RDS Custom 还创建了两种类型的 EBS 卷，并将它们与 EC2 实例关联。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 当您创建数据库实例时，您指定的存储配置将配置数据卷。 支持外围将监控以下内容： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 使用以下 CLI 命令比较 EBS 卷详细信息和 RDS Custom for Oracle DB 实例详细信息的卷类型。 <pre>aws rds describe-db-instances \ <br />    --db-instance-identifier db-instance-name | grep StorageType</pre>  | 
|  SP-O1004  |  Amazon EC2 实例状态  |  自动恢复使 EC2 实例 [*ec2\$1id*] 处于受损状态。要解决此问题，请参阅[实例恢复故障排除](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#TroubleshootingInstanceRecovery)。  |  要检查数据库实例的状态，请使用控制台或运行以下 AWS CLI 命令： <pre>aws rds describe-db-instances \ <br />    --db-instance-identifier db-instance-name |grep DBInstanceStatus </pre>  | 
|  SP-O1005  |  Amazon EC2 实例属性  |  对 EC2 实例 [*ec2\$1id*] 进行了如下修改：属性 [*att1*] 从 [*val-old*] 更改为 [*val-new*]，属性 [*att2*] 从 [*val-old*] 更改为 [*val-new*]。要解决此问题，请恢复到原始值。  |  | 
|  SP-O1006  |  Amazon EC2 实例状态  |  EC2 实例 [*ec2\$1id*] 已终止或找不到。要解决问题，请删除 RDS Custom 数据库实例。  |  支持外围将监控 EC2 实例状态更改通知。EC2 实例必须始终运行。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html)  | 
|  SP-O1007  |  Amazon EC2 实例状态  |  EC2 实例 [*ec2\$1id*] 已停止。要解决问题，请启动该实例。  |  支持外围将监控 EC2 实例状态更改通知。EC2 实例必须始终运行。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html)  | 
|  SP-1008  |  Amazon SQS 权限  |  Permissions are missing for Amazon SQS. Check the permissions for the IAM instance profile, VPC endpoint policy, and dependent service connections, and then try again.  |   您可以通过确保与主机关联的 IAM 配置文件具有以下权限来解决此问题： <pre>"SQS:SendMessage"<br />"SQS:ReceiveMessage"<br />"SQS:DeleteMessage"<br />"SQS:GetQueueUrl"</pre>  | 
|  SP-1009  |  Amazon Simple Queue Service (Amazon SQS)  |  The SQS queue [%s] was deleted and couldn't be recovered. To resolve this issue, recreate the queue.  |  重新创建 Amazon SQS 队列。  | 

**操作系统**


| 事件 ID | 配置 | RDS 事件消息 | Action | 
| --- | --- | --- | --- | 
|  SP-O2001  |  RDS Custom 代理状态  |  RDS Custom 代理未在 EC2 实例 [*ec2\$1id*] 上运行。确保代理在 [*ec2\$1id*] 上运行。  |  在 RDS Custom for Oracle 上，如果 RDS Custom 代理停止，则数据库实例将超出支持外围。代理每 30 秒会向 Amazon CloudWatch 发布一次 `IamAlive` 指标。如果指标在 30 秒之后未能发布，则会触发告警。支持外围还会每隔 30 分钟监控主机上的 RDS Custom 代理进程状态。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 当 RDS Custom 代理再次运行时，`IamAlive` 指标将发布到 Amazon CloudWatch，并且告警将切换到 `OK` 状态。此切换操作将通知支持外围代理正在运行。  | 
|  `SP-O2002`  |  AWS Systems Manager 代理（SSM 代理）状态  |  无法在 EC2 实例 [*ec2\$1id*] 上访问 Systems Manager 代理。请确保您已正确配置网络、代理和 IAM 权限。  |  SSM 代理必须始终运行。RDS Custom 代理负责确保 Systems Manager 代理正在运行。如果 SSM 代理终止并重新启动，RDS Custom 代理将向 CloudWatch 发布 `SSM_Agent_Restarted_Or_NotFound` 指标。RDS Custom 代理对 `do-not-delete-rds-custom-ssm-agent-restarted-or-notfound-ec2-id` 指标配置了一项告警，当过去每三分钟内出现一次重新启动时，即会触发该告警。支持外围还会每隔 30 分钟监控主机上 SSM 代理的进程状态。 有关更多信息，请参阅 [SSM 代理故障排除](https://docs.aws.amazon.com/systems-manager/latest/userguide/troubleshooting-ssm-agent.html)。  | 
|  `SP-O2003`  |  AWS Systems Manager 代理（SSM 代理）状态  |  EC2 实例 [*ec2\$1id*] 上的 Systems Manager 代理多次崩溃。有关更多信息，请参阅 SSM 代理故障排除文档。  |  有关更多信息，请参阅 [SSM 代理故障排除](https://docs.aws.amazon.com/systems-manager/latest/userguide/troubleshooting-ssm-agent.html)。  | 
|  SP-O2004  |  操作系统时区  |  EC2 实例 [*ec2\$1id*] 上的时区已更改。要解决此问题，请将时区恢复为之前的 [*previous-time-zone*] 设置。然后使用 RDS 选项组更改时区。  |  RDS 自动化检测到在未使用选项组的情况下更改了主机上的时区。这种主机级别的更改可能会导致 RDS 自动化失败，因此 EC2 实例处于 `unsupported-configuration` 状态。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 数据库实例将在 30 分钟内可用。为了防止将来移出外围，请通过选项组修改您的时区。有关更多信息，请参阅 [Oracle 时区](custom-managing.timezone.md)。  | 
|  SP-O2005  |  `sudo` 配置  |  EC2 实例 [*ec2\$1id*] 上的 sudo 配置缺少必要的权限。要解决此问题，请恢复最近对 sudo 配置进行的更改。  |  支持外围将验证是否允许某些操作系统用户在主机上运行某些命令。它监视 `sudo` 配置并将其与受支持的状态进行比较。 当 `sudo` 配置不受支持时，RDS Custom 会尝试覆盖它们并返回到之前的受支持状态。如果尝试成功，RDS Custom 会发送以下通知： RDS Custom 成功覆盖了您的配置。 如果覆盖失败，您的数据库实例将仍处于不受支持的配置状态。要解决此问题，要么恢复 `sudoers.d/` 文件中的更改，要么修复权限。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 在支持外围确定 `sudo` 配置受支持时，RDS Custom for Oracle 数据库实例会在 30 分钟内变为可用状态。  | 
|  SP-O2006  |  S3 存储桶可访问性  |  RDS Custom 自动化功能无法从 EC2 实例 [*ec2\$1id*] 上的 S3 存储桶下载文件。检查网络配置，并确保该实例允许与 S3 建立双向连接。  |  | 
|  SP-2007  |  高可用性软件解决方案版本  |  The HA solution of your instance differs from the expected version. 要解决此问题，请创建 AWS 支持 案例。  |  创建 AWS 支持 案例。  | 

**数据库**


| 事件 ID | 配置 | RDS 事件消息 | Action | 
| --- | --- | --- | --- | 
|  SP-O3001  |  数据库存档滞后目标  |  EC2 实例 [*ec2\$1id*] 上的 ARCHIVE\$1LAG\$1TARGET 参数超出建议的范围 *value\$1range*。要解决此问题，请将参数设置为 value\$1range 范围内的值。  |  支持外围监控 `ARCHIVE_LAG_TARGET` 数据库参数，以验证数据库实例的最新可还原时间是否在合理的范围内。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 数据库实例将在 30 分钟内可用。  | 
|  SP-O3002  |  Oracle Data Guard 角色  |  EC2 实例 [*ec2\$1id*] 上的 Oracle Data Guard 不支持数据库角色 [*role\$1name*]。要解决此问题，请将 DATABASE\$1ROLE 参数设置为 PRIMARY 或 PHYSICAL STANDBY。  |  支持外围每 15 秒监控当前数据库角色，并在数据库角色发生更改时发送 CloudWatch 通知。Oracle Data Guard `DATABASE_ROLE` 参数必须为 `PRIMARY` 或 `PHYSICAL STANDBY`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 在支持外围确定数据库角色受支持之后，RDS Custom for Oracle 数据库实例将在 15 秒内变为可用状态。  | 
|  SP-O3003  |  数据库运行状况  |  Oracle 数据库的 SMON 进程处于僵尸状态。要解决此问题，请手动恢复 EC2 实例 [*ec2\$1id*] 上的数据库，打开数据库，然后立即对其进行备份。如需更多帮助，请联系。支持  |  支持外围会监控数据库实例状态。其还将监控前一小时和一天中发生的重启次数。当实例处于仍然存在的状态时，您会收到通知，但您无法与其交互。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) 重启数据库实例后，RDS Custom 代理会检测到数据库实例不再处于无响应状态。然后，它会通知支持外围以重新评估数据库实例状态。  | 
|  SP-O3004  |  数据库日志模式  |  EC2 实例 [*ec2\$1id*] 上的数据库日志模式已更改为 [*value\$1b*]。要解决此问题，请将日志模式设置为 [*value\$1a*]。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) RDS Custom 代理将自动重启数据库实例并将日志模式设置为 `ARCHIVELOG`。数据库实例将在 30 分钟内可用。  | 
|  SP-O3005  |  Oracle 主路径  |  EC2 实例 [*ec2\$1id*] 上的 Oracle 主目录已更改为 *new\$1path*。要解决此问题，请将设置恢复为 *old\$1path*。  |  | 
|  SP-O3006  |  数据库唯一名称  |  EC2 实例 [*ec2\$1id*] 上的数据库唯一名称已更改为 *new\$1value*。要解决此问题，请将名称恢复为 *old\$1value*。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting.html) RDS Custom 代理将自动重启数据库实例并将日志模式设置为 `ARCHIVELOG`。数据库实例将在 30 分钟内可用。  | 

## 排查 RDS Custom for Oracle 的升级问题
<a name="custom-troubleshooting-upgrade"></a>

RDS Custom for Oracle 实例的升级可能会失败。接下来，您可以找到一些技术，以在升级 RDS Custom for Oracle 数据库实例时使用：
+ 检查数据库实例上 `/tmp` 目录中的升级输出日志文件。日志的名称取决于数据库引擎版本。例如，您可能会看到包含字符串 `catupgrd` 或 `catup` 的日志。
+ 检查位于 `/rdsdbdata/log/trace` 目录中的 `alert.log` 文件。
+ 请在 `root` 目录中运行以下 `grep` 命令来跟踪升级操作系统的过程。此命令显示日志文件的写入位置并确定升级过程的状态。

  ```
  ps -aux | grep upg
  ```

  下面显示了示例输出。

  ```
  root     18884  0.0  0.0 235428  8172 ?        S<   17:03   0:00 /usr/bin/sudo -u rdsdb /rdsdbbin/scripts/oracle-control ORCL op_apply_upgrade_sh RDS-UPGRADE/2.upgrade.sh
  rdsdb    18886  0.0  0.0 153968 12164 ?        S<   17:03   0:00 /usr/bin/perl -T -w /rdsdbbin/scripts/oracle-control ORCL op_apply_upgrade_sh RDS-UPGRADE/2.upgrade.sh
  rdsdb    18887  0.0  0.0 113196  3032 ?        S<   17:03   0:00 /bin/sh /rdsdbbin/oracle/rdbms/admin/RDS-UPGRADE/2.upgrade.sh
  rdsdb    18900  0.0  0.0 113196  1812 ?        S<   17:03   0:00 /bin/sh /rdsdbbin/oracle/rdbms/admin/RDS-UPGRADE/2.upgrade.sh
  rdsdb    18901  0.1  0.0 167652 20620 ?        S<   17:03   0:07 /rdsdbbin/oracle/perl/bin/perl catctl.pl -n 4 -d /rdsdbbin/oracle/rdbms/admin -l /tmp catupgrd.sql
  root     29944  0.0  0.0 112724  2316 pts/0    S+   18:43   0:00 grep --color=auto upg
  ```
+ 请运行以下 SQL 查询以验证组件的当前状态，以便查找数据库版本和数据库实例上安装的选项。

  ```
  SET LINESIZE 180
  COLUMN COMP_ID FORMAT A15
  COLUMN COMP_NAME FORMAT A40 TRUNC
  COLUMN STATUS FORMAT A15 TRUNC
  SELECT COMP_ID, COMP_NAME, VERSION, STATUS FROM DBA_REGISTRY ORDER BY 1;
  ```

  输出与以下内容类似。

  ```
  COMP_NAME                                STATUS               PROCEDURE
  ---------------------------------------- -------------------- --------------------------------------------------
  Oracle Database Catalog Views            VALID                DBMS_REGISTRY_SYS.VALIDATE_CATALOG
  Oracle Database Packages and Types       VALID                DBMS_REGISTRY_SYS.VALIDATE_CATPROC
  Oracle Text                              VALID                VALIDATE_CONTEXT
  Oracle XML Database                      VALID                DBMS_REGXDB.VALIDATEXDB
  
  4 rows selected.
  ```
+ 请运行以下 SQL 查询以检查是否存在可能干扰升级过程的无效对象。

  ```
  SET PAGES 1000 LINES 2000
  COL OBJECT FOR A40
  SELECT SUBSTR(OWNER,1,12) OWNER,
         SUBSTR(OBJECT_NAME,1,30) OBJECT,
         SUBSTR(OBJECT_TYPE,1,30) TYPE, STATUS,
         CREATED
  FROM   DBA_OBJECTS 
  WHERE  STATUS <>'VALID' 
  AND    OWNER IN ('SYS','SYSTEM','RDSADMIN','XDB');
  ```

## 排查 RDS Custom for Oracle 的副本提升问题
<a name="custom-troubleshooting-promote"></a>

您可以使用控制台、`promote-read-replica` AWS CLI 命令或 `PromoteReadReplica` API 在 RDS Custom for Oracle 中提升托管式 Oracle 副本。如果您删除了主数据库实例，并且所有副本都运行正常，则 RDS Custom for Oracle 会自动将您的托管式副本提升为独立实例。如果副本已暂停自动化或超出支持范围，则必须先修复副本，RDS Custom 才能自动对其进行提升。有关更多信息，请参阅 [将 RDS Custom for Oracle 副本提升为独立的数据库实例](custom-rr.promoting.md)。

在以下情况下，副本提升工作流可能会卡住：
+ 主数据库实例处于 `STORAGE_FULL` 状态。
+ 主数据库无法对其所有的在线重做日志归档。
+ Oracle 副本和主数据库上的存档重做日志文件之间存在差距。

**响应卡住的工作流**

1. 同步 Oracle 副本数据库实例上的重做日志差距。

1. 强制将只读副本提升为最新应用的重做日志。在 SQL\$1Plus 中运行以下命令：

   ```
   ALTER DATABASE ACTIVATE STANDBY DATABASE;
   SHUTDOWN IMMEDIATE
   STARTUP
   ```

1. 联系 支持 并要求他们将您的数据库实例移到 `available` 状态。

# Amazon RDS Custom for Oracle 的已知问题
<a name="custom-known-issues"></a>

使用 RDS Custom for Oracle 时，请注意数据库实例存在的以下问题。
+ 不支持调整根卷或 dbbin 卷的大小。
**警告**  
强烈建议您不要手动调整根卷或 dbbin 卷的大小。建议您将所有配置存储在修补后仍然存在的数据卷中，并且仅使用 RDS 扩展存储 API 调整卷的大小。
+ 当数据库实例位于较旧的 AMI（比如使用 Oracle Linux 7 的 AMI）上时，某些 RDS API 可能会被阻止。要解决此问题，请使用操作系统修补功能将数据库实例修补到最新的 AMI。有关更多信息，请参阅 [CEV 升级选项](custom-upgrading.md#custom-upgrading.overview.cev-options)。
+ 在执行 RDS 操作之前，请确保您的 AWS 账户中有足够的计算和存储配额。
+ 如果数据库处于创建状态，并且您主动登录该数据库或 Amazon EC2 主机并运行命令，则数据库创建可能无法完成。
+ 由于只读副本问题，目前不支持控制文件多路复用。在创建只读副本之前，请确保在源数据库上的 `CONTROL_FILES` 初始化参数中仅指定一个文件名。
+ 您无法将数据库模式从 `PHYSICAL STANDBY`（已装载或只读）更改为 `SNAPSHOT STANDBY`（转换为读/写）。
+ 如果 AWS 账户是具有服务控制策略（SCP）的 AWS Organization 的一部分，并且 SCP 包含条件键，则可能无法创建 RDS Custom for Oracle 数据库实例，并会显示以下错误：

  ```
  You can't create the DB instance because of incompatible resources. 
  The IAM instance profile role [AWSRDSCustomInstanceRole1-us-east-1] is missing the following permissions: 
  EFFECT [Allow] on ACTION(S) [ssm:DescribeAssociation, ssm:DescribeDocument, ssm:GetConnectionStatus, 
    ssm:GetDeployablePatchSnapshotForInstance, ssmmessages:OpenControlChannel, ssm:GetParameters, 
    ssm:ListInstanceAssociations, ssm:PutConfigurePackageResult, ssmmessages:CreateControlChannel, 
    ssm:GetParameter, ssm:UpdateAssociationStatus, ssm:GetManifest, ssmmessages:CreateDataChannel, 
    ssm:PutInventory, ssm:UpdateInstanceInformation, ssm:DescribeInstanceInformation, 
    ssmmessages:OpenDataChannel, ssm:GetDocument, ssm:ListAssociations, ssm:PutComplianceItems, 
    ssm:UpdateInstanceAssociationStatus] for RESOURCE(S) [], EFFECT [Allow] on ACTION(S) [ec2messages:DeleteMessage, 
    ec2messages:FailMessage, ec2messages:GetEndpoint, ec2messages:AcknowledgeMessage, ec2messages:GetMessages, 
    ec2messages:SendReply] for RESOURCE(S) [], EFFECT [Allow] on ACTION(S) [logs:CreateLogStream, 
    logs:DescribeLogStreams, logs:PutRetentionPolicy, logs:PutLogEvents]
  ```

  要解决此问题，请向 支持 创建支持工单。

## 数据库用户帐户存在的已知问题
<a name="custom-known-issues-accounts"></a>

请注意以下问题：
+ 不要删除以字符串 `RDS` 开头的数据库用户账户，例如 `RDSADMIN` 和 `RDS_DATAGUARD`。RDS Custom for Oracle 使用 `RDS` 账户执行自动化操作。如果删除此用户帐户，RDS Custom 会将实例移至不受支持的配置状态。
+ 不能使用 `ModifyDBInstance` API 更改 RDS Custom for Oracle 数据库实例的主用户名。
+ RDS Custom for Oracle 会轮换所有数据库实例的用户账户凭证。有关更多信息，请参阅 [轮换 RDS Custom for Oracle 凭证以遵循合规性计划](custom-security.cred-rotation.md)。如果使用本地主/备用配置，则凭证轮换可能会影响以下资源：
  + 手动创建的备用 RDS Custom for Oracle 实例

    要解决此问题，请删除手动创建的备用数据库，然后使用 API 调用创建 Oracle 只读副本。手动管理手动创建的备用数据库的密钥，使其与源数据库实例相匹配。
  + 手动创建的跨区域只读副本

    要解决此问题，请手动保存密钥，使其与主数据库实例相匹配。

## 参数和配置文件存在的已知问题
<a name="custom-known-issues-files"></a>
+ 在执行扩展计算、操作系统升级以及 RDS Custom 替换根卷的其他操作之后，必须配置 `crontab` 文件。强烈建议您保留 `crontab` 的备份。
+ 配置 `listener.ora` 文件时，请注意以下准则：
  + 确保该文件中的每个条目都位于一行中。这种方法可以避免在创建实例期间出现缩进问题。
  + 确保 `GLOBAL_DBNAME` 等于 `SID_NAME` 的值。
  + 确保 `LISTENER` 的值遵循命名约定 `L_dbname_001`。
  + 确保 `listener.ora` 文件保持与数据库名称的联系。RDS Custom 使用此联系来验证数据库的启动。如果您错误地修改此文件，则诸如扩展计算或修补之类的操作可能会失败。

    以下示例显示正确配置的 `listener.ora` 参数。

    ```
    ADR_BASE_L_ORCL_001=/rdsdbdata/log/
    USE_SID_AS_SERVICE_L_ORCL_001=ON
    SID_LIST_L_ORCL_001=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE.1)))
    SUBSCRIBE_FOR_NODE_DOWN_EVENT_L_ORCL_001=OFF
    L_ORCL_001=(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = XXXX)(HOST = x.x.x.x))) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = XXXX)(HOST = 127.0.0.1))))
    ```
+ 在服务器参数文件或初始化参数文件中不支持注释。
+ 您必须在服务器参数文件（`/rdsdbdata/config/oracle_pfile`）中声明以下初始化参数：
  + `MEMORY_MAX_TARGET`
  + `MEMORY_TARGET`
  + `PGA_AGGREGATE_TARGET`
  + `PROCESSES`
  + `SGA_TARGET`
  + `USE_LARGE_PAGES`

  如果未在 `/rdsdbdata/config/oracle_pfile` 中声明上述参数，则只读副本创建和扩展计算可能会失败。
+ 您无法删除配置文件（例如服务器参数文件、审计文件、`listener.ora`、`tnsnames.ora` 或 `sqlnet.ora`）的符号链接。也无法修改这些文件的目录结构。RDS Custom 自动化要求这些文件存在于特定的目录结构中。

  要从初始化参数文件创建服务器参数文件，请使用以下语法。

  ```
  CREATE SPFILE='/rdsdbdata/admin/$ORACLE_SID/pfile/spfile$ORACLE_SID.ora' 
      FROM PFILE='/rdsdbdata/config/oracle_pfile';
  ```

# 使用 RDS Custom for SQL Server
<a name="working-with-custom-sqlserver"></a>

您可在以下内容中找到有关创建、管理和维护 RDS Custom for SQL Server 数据库实例的说明。

**Topics**
+ [RDS Custom for SQL Server 工作流](custom-sqlserver.workflow.md)
+ [Amazon RDS Custom for SQL Server 的要求和限制](custom-reqs-limits-MS.md)
+ [为 Amazon RDS Custom for SQL Server 设置环境](custom-setup-sqlserver.md)
+ [对于 RDS Custom for SQL Server 使用自带媒体](custom-sqlserver.byom.md)
+ [使用适用于 RDS Custom for SQL Server 的自定义引擎版本](custom-cev-sqlserver.md)
+ [为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例](custom-creating-sqlserver.md)
+ [管理 Amazon RDS Custom for SQL Server 数据库实例](custom-managing-sqlserver.md)
+ [将 Microsoft Active Directory 用于 RDS Custom for SQL Server](custom-sqlserver-WinAuth.md)
+ [管理 RDS Custom for SQL Server 的多可用区部署](custom-sqlserver-multiaz.md)
+ [备份和还原 Amazon RDS Custom for SQL Server 数据库实例](custom-backup-sqlserver.md)
+ [复制 Amazon RDS Custom for SQL Server 数据库快照](custom-copying-snapshot-sqlserver.md)
+ [将本地数据库迁移到 Amazon RDS Custom for SQL Server](custom-migrating.md)
+ [RDS Custom for SQL Server 操作系统更新](custom-os-upgrade.md)
+ [升级 Amazon RDS Custom for SQL Server 数据库实例](custom-upgrading-sqlserver.md)
+ [针对 Amazon RDS Custom for SQL Server 排查数据库的问题](custom-troubleshooting-sqlserver.md)

# RDS Custom for SQL Server 工作流
<a name="custom-sqlserver.workflow"></a>

下图显示了 RDS Custom for SQL Server 的典型工作流。

![\[RDS Custom for SQL Server 架构\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/custom_sqlserver_architecture_v2.png)


步骤如下所示：

1. 从 RDS Custom 提供的引擎版本创建 RDS Custom for SQL Server 数据库实例。

   有关更多信息，请参阅 [创建 RDS Custom for SQL Server 数据库实例](custom-creating-sqlserver.md#custom-creating-sqlserver.create)。

1. 将应用程序连接到 RDS Custom 数据库实例端点。

   有关更多信息，请参阅[使用 AWS Systems Manager 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.ssm.md)和[使用 RDP 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.rdp.md)。

1. （可选）访问主机以自定义您的软件。

1. 监控 RDS Custom 自动化生成的通知和消息。

## 为 RDS Custom 创建数据库实例
<a name="custom-sqlserver.workflow.instance"></a>

您可以使用 `create-db-instance` 命令创建 RDS Custom 数据库实例。该过程与创建 Amazon RDS 实例类似。但是，有些参数是不同的。有关更多信息，请参阅 [为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例](custom-creating-sqlserver.md)。

## 数据库连接
<a name="custom-sqlserver.workflow.db-connection"></a>

与 Amazon RDS 数据库实例一样，您的 RDS Custom for SQL Server 数据库实例驻留在 VPC 中。您的应用程序使用 SQL Server 管理套件（SSMS）等客户端连接到 RDS Custom 实例，就像在 RDS for SQL Server 中一样。

## RDS Custom 自定义
<a name="custom-sqlserver.workflow.customization"></a>

您可以访问 RDS Custom 主机来安装或自定义软件。为避免更改与 RDS Custom 自动化之间发生冲突，您可以在指定的时间内暂停自动化。在此期间，RDS Custom 不执行监控或实例恢复。在此时期结束时，RDS Custom 将恢复完全自动化。有关更多信息，请参阅 [暂停和恢复 RDS Custom 自动化](custom-managing-sqlserver.pausing.md)。

# Amazon RDS Custom for SQL Server 的要求和限制
<a name="custom-reqs-limits-MS"></a>

您可以在下面找到 Amazon RDS Custom for SQL Server 要求和限制的摘要以便快速参考。要求和限制也出现在相关章节中。

**Topics**
+ [区域和版本可用性](#custom-reqs-limits-MS.RegionVersionAvailability)
+ [RDS Custom for SQL Server 的一般要求](#custom-reqs-limits.reqsMS)
+ [RDS Custom for SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md)
+ [RDS Custom for SQL Server 的限制](#custom-reqs-limits.limitsMS)
+ [设置 RDS Custom for SQL Server 数据库实例的字符集和排序规则](custom-reqs-limits-MS.collation.md)
+ [RDS Custom for SQL Server 数据库实例的本地时区](custom-reqs-limits-MS.TimeZone.md)
+ [在 RDS Custom for SQL Server 中使用服务主密钥](custom-sqlserver-features.smk.md)
+ [RDS Custom for SQL Server 支持更改数据捕获（CDC）](custom-sqlserver-features.cdc.md)

## 区域和版本可用性
<a name="custom-reqs-limits-MS.RegionVersionAvailability"></a>

功能可用性和支持因每个数据库引擎的特定版本以及 AWS 区域而异。有关适用于 Amazon RDS Custom for SQL Server 的 Amazon RDS 的版本和区域可用性的更多信息，请参阅[支持 RDS Custom for SQL Server 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.sq)。

## RDS Custom for SQL Server 的一般要求
<a name="custom-reqs-limits.reqsMS"></a>

确保遵循 Amazon RDS Custom for SQL Server 的以下要求：
+ 使用 [RDS Custom for SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md) 中显示的实例类。唯一支持的存储类型是 gp2、gp3、io1 和 io2 Block Express 类型的固态硬盘（SSD）。io1、gp2 和 gp3 的最大存储限制为 16 TiB，而 io2 支持 64 TiB。
+ 确保您有创建 RDS Custom 数据库实例的对称 AWS KMS 密钥。有关更多信息，请参阅 [请确保您有对称的加密 AWS KMS 密钥](custom-setup-sqlserver.md#custom-setup-sqlserver.cmk)。
+ 确保创建 AWS Identity and Access Management (IAM) 角色和实例配置文件。有关更多信息，请参阅[手动创建您的 IAM 角色和实例配置文件](custom-setup-sqlserver.md#custom-setup-sqlserver.iam)和[使用 AWS 管理控制台自动创建实例配置文件](custom-setup-sqlserver.md#custom-setup-sqlserver.instanceProfileCreation)。
+ 确保提供 RDS Custom 可用于访问其他 AWS 服务的联网配置。有关特定要求，请参阅 [步骤 2：配置网络、实例配置文件和加密](custom-setup-sqlserver.md#custom-setup-sqlserver.iam-vpc)。
+ RDS Custom 和 Amazon RDS 数据库实例的总数不能超过您的配额限制。例如，如果您的配额为 40 个数据库实例，则可以有 20 个 RDS Custom for SQL Server 数据库实例和 20 个 Amazon RDS 数据库实例。
+ RDS Custom 会自动创建名称以 `do-not-delete-rds-custom-` 开头的 AWS CloudTrail 跟踪记录。RDS Custom 支持外围依赖于来自 CloudTrail 的事件来确定您的操作是否影响 RDS Custom 自动化。RDS Custom 会在您创建第一个数据库实例时创建跟踪记录。要使用已经存在的 CloudTrail，请联系AWS支持人员。有关更多信息，请参阅 [AWS CloudTrail](custom-concept.md#custom-concept.components.CloudTrail)。

# RDS Custom for SQL Server 的数据库实例类支持
<a name="custom-reqs-limits.instancesMS"></a>

使用 [describe-orderable-db-instance-options](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/describe-orderable-db-instance-options.html) 命令，检查您的区域中是否支持该数据库实例类。

RDS Custom for SQL Server 支持下表所示的数据库实例类：


| SQL Server 版本 | RDS Custom 支持 | 
| --- | --- | 
|  Enterprise Edition  |  db.r5.xlarge–db.r5.24xlarge db.r5b.xlarge–db.r5b.24xlarge db.m5.xlarge–db.m5.24xlarge db.r6i.xlarge–db.r6i.32xlarge db.m6i.xlarge–db.m6i.32xlarge db.x2iedn.xlarge–db.x2iedn.32xlarge  | 
|  标准版  |  db.r5.large–db.r5.24xlarge db.r5b.large–db.r5b.8xlarge db.m5.large–db.m5.24xlarge db.r6i.large–db.r6i.8xlarge db.m6i.large–db.m6i.8xlarge db.x2iedn.xlarge–db.x2iedn.8xlarge  | 
|  开发人员版本  |  db.r5.xlarge–db.r5.24xlarge db.r5b.xlarge–db.r5b.24xlarge db.m5.xlarge–db.m5.24xlarge db.r6i.xlarge–db.r6i.32xlarge db.m6i.xlarge–db.m6i.32xlarge db.x2iedn.xlarge–db.x2iedn.32xlarge  | 
|  Web 版  |  db.r5.large–db.r5.4xlarge db.m5.large–db.m5.4xlarge db.r6i.large–db.r6i.4xlarge db.m6i.large–db.m6i.4xlarge db.r5b.large–db.r5b.4xlarge  | 

以下建议适用于 db.x2iedn 类类型：
+ 创建时，本地存储是未分配的原始设备。在使用具有此实例类的数据库实例之前，必须挂载并格式化本地存储。之后，在其之上配置 `tempdb` 以确保最佳性能。有关更多信息，请参阅 [Optimize tempdb performance in Amazon RDS Custom for SQL Server using local instance storage](https://aws.amazon.com/blogs/database/optimize-tempdb-performance-in-amazon-rds-custom-for-sql-server-using-local-instance-storage/)。
+ 当您运行数据库实例操作 [例如扩展计算、实例更换、快照还原或时间点故障恢复（PITR）] 时，本地存储会恢复到其原始和未分配状态。在这些情况下，必须重新挂载、重新格式化和重新配置驱动器和 `tempdb` 来还原功能。
+ 对于多可用区实例，我们建议您在备用数据库实例上执行配置。这样，如果发生故障转移，系统可以继续运行而不会出现问题，因为配置已在备用实例上就位。

## RDS Custom for SQL Server 的限制
<a name="custom-reqs-limits.limitsMS"></a>

以下限制适用于 RDS Custom for SQL Server：
+ 您无法在 RDS Custom for SQL Server 的 Amazon RDS 数据库实例中创建只读副本。但是，您可以使用多可用区部署自动配置高可用性。有关更多信息，请参阅 [管理 RDS Custom for SQL Server 的多可用区部署](custom-sqlserver-multiaz.md)。
+ 您无法修改现有 RDS Custom for SQL Server 数据库实例的数据库实例标识符。
+ 对于不是使用自定义引擎版本（CEV）创建的 RDS Custom for SQL Server 数据库实例，不能保证保留对 Microsoft Windows 操作系统进行的更改。例如，当您启动快照或时间点还原操作时，将丢失这些更改。如果 RDS Custom for SQL Server 数据库实例是使用 CEV 创建的，则会保留这些更改。
+ 并非所有选项都受支持。例如，当您创建 RDS Custom for SQL Server 数据库实例时，您无法执行以下操作：
  + 更改数据库实例类中的 CPU 内核数和每个内核的线程数。
  + 启用存储弹性伸缩。
  + 指定自己的数据库参数组、选项组或字符集。
  + 开启性能详情或数据库洞察。
  + 开启自动次要版本升级。
+ 最大的数据库实例存储空间为 64TiB。
+ 您无法将 RDS 代理与 RDS Custom for SQL Server 一起使用。
+ 您无法将 `describe-reserved-db-instances` API 用于 RDS Custom for SQL Server 数据库实例。

# 设置 RDS Custom for SQL Server 数据库实例的字符集和排序规则
<a name="custom-reqs-limits-MS.collation"></a>

## 概述
<a name="custom-reqs-limits-MS.collation.overview"></a>

使用 RDS Custom for SQL Server 数据库实例，可以配置字符集和排序规则设置，来确定如何对数据进行存储和排序。字符集定义支持哪些字符，而排序规则指定用于对数据进行排序和比较的规则。为处理多语言数据或具有特定排序要求的应用程序设置适当的字符集和排序规则至关重要。例如，您可能需要处理重音字符并定义语言特定的排序规则，或者在不同区域设置之间保持数据完整性。以下各节提供有关 RDS Custom for SQL Server 数据库实例的字符集和排序规则支持的信息。

RDS Custom for SQL Server 支持各种服务器排序规则，包括传统编码和 UTF-8 编码，适用于 SQL\$1Latin、日语、德语和阿拉伯语区域设置。原定设置的服务器排序规则为 `SQL_Latin1_General_CP1_CI_AS`，但您可以选择其他支持的排序规则来使用。您可以使用与 RDS for SQL Server 所用的相同过程来选择排序规则。有关更多信息，请参阅 [管理 Amazon RDS for Microsoft SQL Server 的排序规则和字符集](Appendix.SQLServer.CommonDBATasks.Collation.md)。

## 注意事项
<a name="custom-reqs-limits-MS.collation.considerations"></a>

在 RDS Custom for SQL Server 上使用服务器排序规则时，以下要求和限制适用：
+ 您可以在创建 RDS Custom for SQL Server 数据库实例时设置服务器排序规则。创建数据库实例后，您无法修改服务器级别的排序规则。
+ 从数据库快照还原或时间点故障恢复（PITR）期间，您无法修改服务器级别的排序规则。
+ 当您从 RDS Custom for SQL Server CEV 创建数据库实例时，该数据库实例不会继承来自 CEV 的服务器排序规则。而是使用原定设置的服务器排序规则 `SQL_Latin1_General_CP1_CI_AS`。如果您已在 RDS Custom for SQL Server CEV 上配置了非原定设置服务器排序规则，并且想要在新数据库实例上使用相同的服务器排序规则，请务必在从 CEV 创建数据库实例时选择该相同的排序规则。
**注意**  
如果您在创建数据库实例时选择的排序规则与 CEV 的排序规则不同，则将重建新 RDS Custom for SQL Server 数据库实例上的 Microsoft SQL Server 系统数据库，以使用更新后的排序规则。重建过程仅在新的 RDS Custom for SQL Server 数据库实例上执行，对 CEV 本身没有影响。重建系统数据库后，您之前在 CEV 上对系统数据库所做的任何修改都不会保留在新的 RDS Custom for SQL Server 数据库实例上。一些修改的示例包括 `master` 数据库中的用户定义对象、`msdb` 数据库中的计划作业或对 CEV 上 `model` 数据库中原定设置数据库设置的更改。创建新的 RDS Custom for SQL Server 数据库实例后，您可以手动重新创建您的修改。
+ 当您从 RDS Custom for SQL Server 自定义引擎版本（CEV）创建数据库实例并选择与 CEV 所用不同的排序规则时，请确保用于创建 CEV 的黄金映像（AMI）满足以下要求，以便重建新数据库实例上的 Microsoft SQL Server 系统数据库：
  + 对于 SQL Server 2022，请确保 `setup.exe` 文件位于以下路径中：`C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQL2022\setup.exe`
  + 对于 SQL Server 2019，请确保 `setup.exe` 文件位于以下路径中：`C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\SQL2019\setup.exe`
  + `master`、`model` 和 `msdb` 数据库的数据和日志模板的副本必须存在于其原定设置位置。有关更多信息，请参阅 Microsoft 公共文档中的[重建系统数据库](https://learn.microsoft.com/en-us/sql/relational-databases/databases/rebuild-system-databases?view=sql-server-ver16#Restrictions         )。
  + 确保您的 SQL Server 数据库引擎使用 `NT Service\MSSQLSERVER ` 或 `NT AUTHORITY\NETWORK SERVICE` 作为服务账户。在为数据库实例配置非原定设置服务器排序规则时，任何其他账户对 `C:\` 驱动器都没有所需的权限。
+ 如果为新数据库实例选择的服务器排序规则与在 CEV 上配置的服务器排序规则相同，则新 RDS Custom for SQL Server 数据库实例上的 Microsoft SQL Server 系统数据库不会经历重建过程。您之前在 CEV 上对系统数据库所做的任何修改都将自动保留到新的 RDS Custom for SQL Server 数据库实例中。

## 支持的排序规则
<a name="custom-reqs-limits-MS.collation.supportedCollations"></a>

您可以将排序规则设置为下表中列出的值之一。


| 排序规则 | 说明 | 
| --- |--- |
| Arabic\$1100\$1BIN | Arabic-100，二进制排序 | 
| Arabic\$1100\$1BIN2 | Arabic-100，二进制代码点比较排序 | 
| Arabic\$1100\$1CI\$1AI | Arabic-100，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Arabic\$1100\$1CI\$1AI\$1KS | Arabic-100，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| Arabic\$1100\$1CI\$1AI\$1KS\$1SC | Arabic-100，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| Arabic\$1100\$1CI\$1AI\$1KS\$1SC\$1UTF8 | Arabic-100，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CI\$1AI\$1KS\$1WS | Arabic-100，不区分大小写，不区分重音，区分假名，区分全半角 | 
| Arabic\$1100\$1CI\$1AI\$1KS\$1WS\$1SC | Arabic-100，不区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| Arabic\$1100\$1CI\$1AI\$1KS\$1WS\$1SC\$1UTF8 | Arabic-100，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CI\$1AI\$1SC | Arabic-100，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| Arabic\$1100\$1CI\$1AI\$1SC\$1UTF8 | Arabic-100，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CI\$1AI\$1WS | Arabic-100，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| Arabic\$1100\$1CI\$1AI\$1WS\$1SC | Arabic-100，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| Arabic\$1100\$1CI\$1AI\$1WS\$1SC\$1UTF8 | Arabic-100，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CI\$1AS | Arabic-100，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Arabic\$1100\$1CI\$1AS\$1KS | Arabic-100，不区分大小写，区分重音，区分假名，不区分全半角 | 
| Arabic\$1100\$1CI\$1AS\$1KS\$1SC | Arabic-100，不区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| Arabic\$1100\$1CI\$1AS\$1KS\$1SC\$1UTF8 | Arabic-100，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CI\$1AS\$1KS\$1WS | Arabic-100，不区分大小写，区分重音，区分假名，区分全半角 | 
| Arabic\$1100\$1CI\$1AS\$1KS\$1WS\$1SC | Arabic-100，不区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| Arabic\$1100\$1CI\$1AS\$1KS\$1WS\$1SC\$1UTF8 | Arabic-100，不区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CI\$1AS\$1SC | Arabic-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| Arabic\$1100\$1CI\$1AS\$1SC\$1UTF8 | Arabic-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CI\$1AS\$1WS | Arabic-100，不区分大小写，区分重音，不区分假名，区分全半角 | 
| Arabic\$1100\$1CI\$1AS\$1WS\$1SC | Arabic-100，不区分大小写，区分重音，不区分假名，区分全半角，补充字符 | 
| Arabic\$1100\$1CI\$1AS\$1WS\$1SC\$1UTF8 | Arabic-100，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CS\$1AI | Arabic-100，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Arabic\$1100\$1CS\$1AI\$1KS | Arabic-100，区分大小写，不区分重音，区分假名，不区分全半角 | 
| Arabic\$1100\$1CS\$1AI\$1KS\$1SC | Arabic-100，区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| Arabic\$1100\$1CS\$1AI\$1KS\$1SC\$1UTF8 | Arabic-100，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CS\$1AI\$1KS\$1WS | Arabic-100，区分大小写，不区分重音，区分假名，区分全半角 | 
| Arabic\$1100\$1CS\$1AI\$1KS\$1WS\$1SC | Arabic-100，区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| Arabic\$1100\$1CS\$1AI\$1KS\$1WS\$1SC\$1UTF8 | Arabic-100，区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CS\$1AI\$1SC | Arabic-100，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| Arabic\$1100\$1CS\$1AI\$1SC\$1UTF8 | Arabic-100，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CS\$1AI\$1WS | Arabic-100，区分大小写，不区分重音，不区分假名，区分全半角 | 
| Arabic\$1100\$1CS\$1AI\$1WS\$1SC | Arabic-100，区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| Arabic\$1100\$1CS\$1AI\$1WS\$1SC\$1UTF8 | Arabic-100，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CS\$1AS | Arabic-100，区分大小写，区分重音，不区分假名，不区分全半角 | 
| Arabic\$1100\$1CS\$1AS\$1KS | Arabic-100，区分大小写，区分重音，区分假名，不区分全半角 | 
| Arabic\$1100\$1CS\$1AS\$1KS\$1SC | Arabic-100，区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| Arabic\$1100\$1CS\$1AS\$1KS\$1SC\$1UTF8 | Arabic-100，区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CS\$1AS\$1KS\$1WS | Arabic-100，区分大小写，区分重音，区分假名，区分全半角 | 
| Arabic\$1100\$1CS\$1AS\$1KS\$1WS\$1SC | Arabic-100，区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| Arabic\$1100\$1CS\$1AS\$1KS\$1WS\$1SC\$1UTF8 | Arabic-100，区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CS\$1AS\$1SC | Arabic-100，区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| Arabic\$1100\$1CS\$1AS\$1SC\$1UTF8 | Arabic-100，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Arabic\$1100\$1CS\$1AS\$1WS | Arabic-100，区分大小写，区分重音，不区分假名，区分全半角 | 
| Arabic\$1100\$1CS\$1AS\$1WS\$1SC | Arabic-100，区分大小写，区分重音，不区分假名，区分全半角，补充字符 | 
| Arabic\$1100\$1CS\$1AS\$1WS\$1SC\$1UTF8 | Arabic-100，区分大小写，区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Arabic\$1BIN | Arabic，二进制排序 | 
| Arabic\$1BIN2 | Arabic，二进制代码点比较排序 | 
| Arabic\$1CI\$1AI | Arabic，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Arabic\$1CI\$1AI\$1KS | Arabic，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| Arabic\$1CI\$1AI\$1KS\$1WS | Arabic，不区分大小写，不区分重音，区分假名，区分全半角 | 
| Arabic\$1CI\$1AI\$1WS | Arabic，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| Arabic\$1CI\$1AS | Arabic，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Arabic\$1CI\$1AS\$1KS | Arabic，不区分大小写，区分重音，区分假名，不区分全半角 | 
| Arabic\$1CI\$1AS\$1KS\$1WS | Arabic，不区分大小写，区分重音，区分假名，区分全半角 | 
| Arabic\$1CI\$1AS\$1WS | Arabic，不区分大小写，区分重音，不区分假名，区分全半角 | 
| Arabic\$1CS\$1AI | Arabic，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Arabic\$1CS\$1AI\$1KS | Arabic，区分大小写，不区分重音，区分假名，不区分全半角 | 
| Arabic\$1CS\$1AI\$1KS\$1WS | Arabic，区分大小写，不区分重音，区分假名，区分全半角 | 
| Arabic\$1CS\$1AI\$1WS | Arabic，区分大小写，不区分重音，不区分假名，区分全半角 | 
| Arabic\$1CS\$1AS | Arabic，区分大小写，区分重音，不区分假名，不区分全半角 | 
| Arabic\$1CS\$1AS\$1KS | Arabic，区分大小写，区分重音，区分假名，不区分全半角 | 
| Arabic\$1CS\$1AS\$1KS\$1WS | Arabic，区分大小写，区分重音，区分假名，区分全半角 | 
| Arabic\$1CS\$1AS\$1WS | Arabic，区分大小写，区分重音，不区分假名，区分全半角 | 
| Chinese\$1PRC\$1BIN2 | Chinese-PRC，二进制代码点比较排序 | 
| Chinese\$1PRC\$1CI\$1AS | Chinese-PRC，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Chinese\$1Taiwan\$1Stroke\$1CI\$1AS | Chinese-Taiwan-Stroke，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Danish\$1Norwegian\$1CI\$1AS | Danish-Norwegian，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Finnish\$1Swedish\$1CI\$1AS | Finnish-Swedish，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| French\$1CI\$1AS | French，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1BIN | German-PhoneBook-100，二进制排序 | 
| German\$1PhoneBook\$1100\$1BIN2 | German-PhoneBook-100，二进制代码点比较排序 | 
| German\$1PhoneBook\$1100\$1CI\$1AI | German-PhoneBook-100，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1KS | German-PhoneBook-100，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1KS\$1SC | German-PhoneBook-100，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1KS\$1SC\$1UTF8 | German-PhoneBook-100，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1KS\$1WS | German-PhoneBook-100，不区分大小写，不区分重音，区分假名，区分全半角 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1KS\$1WS\$1SC | German-PhoneBook-100，不区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1KS\$1WS\$1SC\$1UTF8 | German-PhoneBook-100，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1SC | German-PhoneBook-100，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1SC\$1UTF8 | German-PhoneBook-100，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1WS | German-PhoneBook-100，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1WS\$1SC | German-PhoneBook-100，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CI\$1AI\$1WS\$1SC\$1UTF8 | German-PhoneBook-100，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CI\$1AS | German-PhoneBook-100，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1KS | German-PhoneBook-100，不区分大小写，区分重音，区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1KS\$1SC | German-PhoneBook-100，不区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1KS\$1SC\$1UTF8 | German-PhoneBook-100，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1KS\$1WS | German-PhoneBook-100，不区分大小写，区分重音，区分假名，区分全半角 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1KS\$1WS\$1SC | German-PhoneBook-100，不区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1KS\$1WS\$1SC\$1UTF8 | German-PhoneBook-100，不区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1SC | German-PhoneBook-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1SC\$1UTF8 | German-PhoneBook-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1WS | German-PhoneBook-100，不区分大小写，区分重音，不区分假名，区分全半角 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1WS\$1SC | German-PhoneBook-100，不区分大小写，区分重音，不区分假名，区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CI\$1AS\$1WS\$1SC\$1UTF8 | German-PhoneBook-100，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CS\$1AI | German-PhoneBook-100，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1KS | German-PhoneBook-100，区分大小写，不区分重音，区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1KS\$1SC | German-PhoneBook-100，区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1KS\$1SC\$1UTF8 | German-PhoneBook-100，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1KS\$1WS | German-PhoneBook-100，区分大小写，不区分重音，区分假名，区分全半角 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1KS\$1WS\$1SC | German-PhoneBook-100，区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1KS\$1WS\$1SC\$1UTF8 | German-PhoneBook-100，区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1SC | German-PhoneBook-100，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1SC\$1UTF8 | German-PhoneBook-100，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1WS | German-PhoneBook-100，区分大小写，不区分重音，不区分假名，区分全半角 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1WS\$1SC | German-PhoneBook-100，区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CS\$1AI\$1WS\$1SC\$1UTF8 | German-PhoneBook-100，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CS\$1AS | German-PhoneBook-100，区分大小写，区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1CS\$1AS\$1KS | German-PhoneBook-100，区分大小写，区分重音，区分假名，不区分全半角 | 
| German\$1PhoneBook\$1100\$1CS\$1AS\$1KS\$1SC | German-PhoneBook-100，区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CS\$1AS\$1KS\$1SC\$1UTF8 | German-PhoneBook-100，区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1100\$1CS\$1AS\$1KS\$1WS | German-PhoneBook-100，区分大小写，区分重音，区分假名，区分全半角 | 
| German\$1PhoneBook\$1100\$1CS\$1AS\$1KS\$1WS\$1SC | German-PhoneBook-100，区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| German\$1PhoneBook\$1100\$1CS\$1AS\$1KS\$1WS\$1SC\$1UTF8 | German-PhoneBook-100，区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| German\$1PhoneBook\$1BIN | German-PhoneBook，二进制排序 | 
| German\$1PhoneBook\$1BIN2 | German-PhoneBook，二进制代码点比较排序 | 
| German\$1PhoneBook\$1CI\$1AI | German-PhoneBook，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1CI\$1AI\$1KS | German-PhoneBook，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| German\$1PhoneBook\$1CI\$1AI\$1KS\$1WS | German-PhoneBook，不区分大小写，不区分重音，区分假名，区分全半角 | 
| German\$1PhoneBook\$1CI\$1AI\$1WS | German-PhoneBook，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| German\$1PhoneBook\$1CI\$1AS | German-PhoneBook，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1CI\$1AS\$1KS | German-PhoneBook，不区分大小写，区分重音，区分假名，不区分全半角 | 
| German\$1PhoneBook\$1CI\$1AS\$1KS\$1WS | German-PhoneBook，不区分大小写，区分重音，区分假名，区分全半角 | 
| German\$1PhoneBook\$1CI\$1AS\$1WS | German-PhoneBook，不区分大小写，区分重音，不区分假名，区分全半角 | 
| German\$1PhoneBook\$1CS\$1AI | German-PhoneBook，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1CS\$1AI\$1KS | German-PhoneBook，区分大小写，不区分重音，区分假名，不区分全半角 | 
| German\$1PhoneBook\$1CS\$1AI\$1KS\$1WS | German-PhoneBook，区分大小写，不区分重音，区分假名，区分全半角 | 
| German\$1PhoneBook\$1CS\$1AI\$1WS | German-PhoneBook，区分大小写，不区分重音，不区分假名，区分全半角 | 
| German\$1PhoneBook\$1CS\$1AS | German-PhoneBook，区分大小写，区分重音，不区分假名，不区分全半角 | 
| German\$1PhoneBook\$1CS\$1AS\$1KS | German-PhoneBook，区分大小写，区分重音，区分假名，不区分全半角 | 
| German\$1PhoneBook\$1CS\$1AS\$1KS\$1WS | German-PhoneBook，区分大小写，区分重音，区分假名，区分全半角 | 
| German\$1PhoneBook\$1CS\$1AS\$1WS | German-PhoneBook，区分大小写，区分重音，不区分假名，区分全半角 | 
| Hebrew\$1BIN | Hebrew，二进制排序 | 
| Hebrew\$1CI\$1AS | Hebrew，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$190\$1BIN | Japanese-90，二进制排序 | 
| Japanese\$190\$1BIN2 | Japanese-90，二进制代码点比较排序 | 
| Japanese\$190\$1CI\$1AI | Japanese-90，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$190\$1CI\$1AI\$1KS | Japanese-90，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$190\$1CI\$1AI\$1KS\$1SC | Japanese-90，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$190\$1CI\$1AI\$1KS\$1SC\$1UTF8 | Japanese-90，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CI\$1AI\$1KS\$1WS | Japanese-90，不区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$190\$1CI\$1AI\$1KS\$1WS\$1SC | Japanese-90，不区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$190\$1CI\$1AI\$1KS\$1WS\$1SC\$1UTF8 | Japanese-90，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CI\$1AI\$1SC | Japanese-90，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$190\$1CI\$1AI\$1SC\$1UTF8 | Japanese-90，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CI\$1AI\$1WS | Japanese-90，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$190\$1CI\$1AI\$1WS\$1SC | Japanese-90，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$190\$1CI\$1AI\$1WS\$1SC\$1UTF8 | Japanese-90，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CI\$1AS | Japanese-90，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$190\$1CI\$1AS\$1KS | Japanese-90，不区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$190\$1CI\$1AS\$1KS\$1SC | Japanese-90，不区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$190\$1CI\$1AS\$1KS\$1SC\$1UTF8 | Japanese-90，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CI\$1AS\$1KS\$1WS | Japanese-90，不区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$190\$1CI\$1AS\$1KS\$1WS\$1SC | Japanese-90，不区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$190\$1CI\$1AS\$1KS\$1WS\$1SC\$1UTF8 | Japanese-90，不区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CI\$1AS\$1SC | Japanese-90，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$190\$1CI\$1AS\$1SC\$1UTF8 | Japanese-90，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CI\$1AS\$1WS | Japanese-90，不区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$190\$1CI\$1AS\$1WS\$1SC | Japanese-90，不区分大小写，区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$190\$1CI\$1AS\$1WS\$1SC\$1UTF8 | Japanese-90，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CS\$1AI | Japanese-90，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$190\$1CS\$1AI\$1KS | Japanese-90，区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$190\$1CS\$1AI\$1KS\$1SC | Japanese-90，区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$190\$1CS\$1AI\$1KS\$1SC\$1UTF8 | Japanese-90，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CS\$1AI\$1KS\$1WS | Japanese-90，区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$190\$1CS\$1AI\$1KS\$1WS\$1SC | Japanese-90，区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$190\$1CS\$1AI\$1KS\$1WS\$1SC\$1UTF8 | Japanese-90，区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CS\$1AI\$1SC | Japanese-90，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$190\$1CS\$1AI\$1SC\$1UTF8 | Japanese-90，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CS\$1AI\$1WS | Japanese-90，区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$190\$1CS\$1AI\$1WS\$1SC | Japanese-90，区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$190\$1CS\$1AI\$1WS\$1SC\$1UTF8 | Japanese-90，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CS\$1AS | Japanese-90，区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$190\$1CS\$1AS\$1KS | Japanese-90，区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$190\$1CS\$1AS\$1KS\$1SC | Japanese-90，区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$190\$1CS\$1AS\$1KS\$1SC\$1UTF8 | Japanese-90，区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CS\$1AS\$1KS\$1WS | Japanese-90，区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$190\$1CS\$1AS\$1KS\$1WS\$1SC | Japanese-90，区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$190\$1CS\$1AS\$1KS\$1WS\$1SC\$1UTF8 | Japanese-90，区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CS\$1AS\$1SC | Japanese-90，区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$190\$1CS\$1AS\$1SC\$1UTF8 | Japanese-90，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$190\$1CS\$1AS\$1WS | Japanese-90，区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$190\$1CS\$1AS\$1WS\$1SC | Japanese-90，区分大小写，区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$190\$1CS\$1AS\$1WS\$1SC\$1UTF8 | Japanese-90，区分大小写，区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1BIN | Japanese，二进制排序 | 
| Japanese\$1BIN2 | Japanese，二进制代码点比较排序 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1BIN | Japanese-Bushu-Kakusu-100，二进制排序 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1BIN2 | Japanese-Bushu-Kakusu-100，二进制代码点比较排序 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1KS | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1KS\$1SC | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1KS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1KS\$1WS | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1KS\$1WS\$1SC | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1KS\$1WS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1SC | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1WS | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1WS\$1SC | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AI\$1WS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1KS | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1KS\$1SC | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1KS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1KS\$1WS | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1KS\$1WS\$1SC | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1KS\$1WS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1SC | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1WS | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1WS\$1SC | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CI\$1AS\$1WS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1KS | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1KS\$1SC | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1KS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1KS\$1WS | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1KS\$1WS\$1SC | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1KS\$1WS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1SC | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1WS | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1WS\$1SC | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AI\$1WS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1KS | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1KS\$1SC | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1KS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1KS\$1WS | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1KS\$1WS\$1SC | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1KS\$1WS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1SC | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1WS | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1WS\$1SC | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$1Bushu\$1Kakusu\$1100\$1CS\$1AS\$1WS\$1SC\$1UTF8 | Japanese-Bushu-Kakusu-100，区分大小写，区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1BIN | Japanese-Bushu-Kakusu-140，二进制排序 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1BIN2 | Japanese-Bushu-Kakusu-140，二进制代码点比较排序 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1KS | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1KS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1KS\$1VSS | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1KS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1KS\$1WS | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1KS\$1WS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1KS\$1WS\$1VSS | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1KS\$1WS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1VSS | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1WS | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1WS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1WS\$1VSS | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AI\$1WS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1KS | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1KS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1KS\$1VSS | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1KS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1KS\$1WS | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1KS\$1WS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1KS\$1WS\$1VSS | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1KS\$1WS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1VSS | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1WS | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1WS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1WS\$1VSS | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CI\$1AS\$1WS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1KS | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1KS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1KS\$1VSS | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1KS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1KS\$1WS | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1KS\$1WS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1KS\$1WS\$1VSS | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1KS\$1WS\$1VSS\$1UTF8 | Japanese-Bushu-Kaku su-140，区分大小写，不区分重音，区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1VSS | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1WS | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1WS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1WS\$1VSS | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AI\$1WS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1KS | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1KS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1KS\$1VSS | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1KS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1KS\$1WS | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1KS\$1WS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1KS\$1WS\$1VSS | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1KS\$1WS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1VSS | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1WS | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1WS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1WS\$1VSS | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，不区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1Bushu\$1Kakusu\$1140\$1CS\$1AS\$1WS\$1VSS\$1UTF8 | Japanese-Bushu-Kakusu-140，区分大小写，区分重音，不区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1CI\$1AI | Japanese，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$1CI\$1AI\$1KS | Japanese，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$1CI\$1AI\$1KS\$1WS | Japanese，不区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$1CI\$1AI\$1WS | Japanese，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$1CI\$1AS | Japanese，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$1CI\$1AS\$1KS | Japanese，不区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$1CI\$1AS\$1KS\$1WS | Japanese，不区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$1CI\$1AS\$1WS | Japanese，不区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$1CS\$1AI | Japanese，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$1CS\$1AI\$1KS | Japanese，区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$1CS\$1AI\$1KS\$1WS | Japanese，区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$1CS\$1AI\$1WS | Japanese，区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$1CS\$1AS | Japanese，区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$1CS\$1AS\$1KS | Japanese，区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$1CS\$1AS\$1KS\$1WS | Japanese，区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$1CS\$1AS\$1WS | Japanese，区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$1Unicode\$1BIN | Japanese-Unicode，二进制排序 | 
| Japanese\$1Unicode\$1BIN2 | Japanese-Unicode，二进制代码点比较排序 | 
| Japanese\$1Unicode\$1CI\$1AI | Japanese-Unicode，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$1Unicode\$1CI\$1AI\$1KS | Japanese-Unicode，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$1Unicode\$1CI\$1AI\$1KS\$1WS | Japanese-Unicode，不区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$1Unicode\$1CI\$1AI\$1WS | Japanese-Unicode，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$1Unicode\$1CI\$1AS | Japanese-Unicode，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$1Unicode\$1CI\$1AS\$1KS | Japanese-Unicode，不区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$1Unicode\$1CI\$1AS\$1KS\$1WS | Japanese-Unicode，不区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$1Unicode\$1CI\$1AS\$1WS | Japanese-Unicode，不区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$1Unicode\$1CS\$1AI | Japanese-Unicode，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$1Unicode\$1CS\$1AI\$1KS | Japanese-Unicode，区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$1Unicode\$1CS\$1AI\$1KS\$1WS | Japanese-Unicode，区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$1Unicode\$1CS\$1AI\$1WS | Japanese-Unicode，区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$1Unicode\$1CS\$1AS | Japanese-Unicode，区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$1Unicode\$1CS\$1AS\$1KS | Japanese-Unicode，区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$1Unicode\$1CS\$1AS\$1KS\$1WS | Japanese-Unicode，区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$1Unicode\$1CS\$1AS\$1WS | Japanese-Unicode，区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$1XJIS\$1100\$1BIN | Japanese-XJIS-100，二进制排序 | 
| Japanese\$1XJIS\$1100\$1BIN2 | Japanese-XJIS-100，二进制代码点比较排序 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI | Japanese-XJIS-100，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1KS | Japanese-XJIS-100，不区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1KS\$1SC | Japanese-XJIS-100，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1KS\$1SC\$1UTF8 | Japanese-XJIS-100，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1KS\$1WS | Japanese-XJIS-100，不区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1KS\$1WS\$1SC | Japanese-XJIS-100，不区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1KS\$1WS\$1SC\$1UTF8 | Japanese-XJIS-100，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1SC | Japanese-XJIS-100，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1SC\$1UTF8 | Japanese-XJIS-100，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1WS | Japanese-XJIS-100，不区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1WS\$1SC | Japanese-XJIS-100，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CI\$1AI\$1WS\$1SC\$1UTF8 | Japanese-XJIS-100，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS | Japanese-XJIS-100，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1KS | Japanese-XJIS-100，不区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1KS\$1SC | Japanese-XJIS-100，不区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1KS\$1SC\$1UTF8 | Japanese-XJIS-100，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1KS\$1WS | Japanese-XJIS-100，不区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1KS\$1WS\$1SC | Japanese-XJIS-100，不区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1KS\$1WS\$1SC\$1UTF8 | Japanese-XJIS-100，不区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1SC | Japanese-XJIS-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1SC\$1UTF8 | Japanese-XJIS-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1WS | Japanese-XJIS-100，不区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1WS\$1SC | Japanese-XJIS-100，不区分大小写，区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CI\$1AS\$1WS\$1SC\$1UTF8 | Japanese-XJIS-100，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI | Japanese-XJIS-100，区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1KS | Japanese-XJIS-100，区分大小写，不区分重音，区分假名，不区分全半角 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1KS\$1SC | Japanese-XJIS-100，区分大小写，不区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1KS\$1SC\$1UTF8 | Japanese-XJIS-100，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1KS\$1WS | Japanese-XJIS-100，区分大小写，不区分重音，区分假名，区分全半角 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1KS\$1WS\$1SC | Japanese-XJIS-100，区分大小写，不区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1KS\$1WS\$1SC\$1UTF8 | Japanese-XJIS-100，区分大小写，不区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1SC | Japanese-XJIS-100，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1SC\$1UTF8 | Japanese-XJIS-100，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1WS | Japanese-XJIS-100，区分大小写，不区分重音，不区分假名，区分全半角 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1WS\$1SC | Japanese-XJIS-100，区分大小写，不区分重音，不区分假名，区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CS\$1AI\$1WS\$1SC\$1UTF8 | Japanese-XJIS-100，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS | Japanese-XJIS-100，区分大小写，区分重音，不区分假名，不区分全半角 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1KS | Japanese-XJIS-100，区分大小写，区分重音，区分假名，不区分全半角 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1KS\$1SC | Japanese-XJIS-100，区分大小写，区分重音，区分假名，不区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1KS\$1SC\$1UTF8 | Japanese-XJIS-100，区分大小写，区分重音，区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1KS\$1WS | Japanese-XJIS-100，区分大小写，区分重音，区分假名，区分全半角 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1KS\$1WS\$1SC | Japanese-XJIS-100，区分大小写，区分重音，区分假名，区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1KS\$1WS\$1SC\$1UTF8 | Japanese-XJIS-100，区分大小写，区分重音，区分假名，区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1SC | Japanese-XJIS-100，区分大小写，区分重音，不区分假名，不区分全半角，补充字符 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1SC\$1UTF8 | Japanese-XJIS-100，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Japanese\$1XJIS\$1100\$1CS\$1AS\$1WS | Japanese-XJIS-100，区分大小写，区分重音，不区分假名，区分全半角 | 
| Japanese\$1XJIS\$1140\$1BIN | Japanese-XJIS-140，二进制排序 | 
| Japanese\$1XJIS\$1140\$1BIN2 | Japanese-XJIS-140，二进制代码点比较排序 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI | Japanese-XJIS-140，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1KS | Japanese-XJIS-140，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1KS\$1UTF8 | Japanese-XJIS-140，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1KS\$1VSS | Japanese-XJIS-140，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1KS\$1VSS\$1UTF8 | Japanese-XJIS-140，不区分大小写，不区分重音，区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1KS\$1WS | Japanese-XJIS-140，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1KS\$1WS\$1UTF8 | Japanese-XJIS-140，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1KS\$1WS\$1VSS | Japanese-XJIS-140，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1KS\$1WS\$1VSS\$1UTF8 | Japanese-XJIS-140，不区分大小写，不区分重音，区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1UTF8 | Japanese-XJIS-140，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1VSS | Japanese-XJIS-140，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1VSS\$1UTF8 | Japanese-XJIS-140，不区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1WS | Japanese-XJIS-140，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1WS\$1UTF8 | Japanese-XJIS-140，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1WS\$1VSS | Japanese-XJIS-140，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AI\$1WS\$1VSS\$1UTF8 | Japanese-XJIS-140，不区分大小写，不区分重音，不区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS | Japanese-XJIS-140，不区分大小写，区分重音，不区分假名类型，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS | Japanese-XJIS-140，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1UTF8 | Japanese-XJIS-140，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1VSS | Japanese-XJIS-140，不区分大小写，区分重音，区分假名类型，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1VSS\$1UTF8 | Japanese-XJIS-140，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1WS | Japanese-XJIS-140，不区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1WS\$1UTF8 | Japanese-XJIS-140，不区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1WS\$1VSS | Japanese-XJIS-140，不区分大小写，区分重音，区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1WS\$1VSS\$1UTF8 | Japanese-XJIS-140，不区分大小写，区分重音，区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1UTF8 | Japanese-XJIS-140，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1VSS | Japanese-XJIS-140，不区分大小写，区分重音，不区分假名类型，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1VSS\$1UTF8 | Japanese-XJIS-140，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1WS | Japanese-XJIS-140，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1WS\$1UTF8 | Japanese-XJIS-140，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1WS\$1VSS | Japanese-XJIS-140，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CI\$1AS\$1WS\$1VSS\$1UTF8 | Japanese-XJIS-140，不区分大小写，区分重音，不区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI | Japanese-XJIS-140，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1KS | Japanese-XJIS-140，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1KS\$1UTF8 | Japanese-XJIS-140，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1KS\$1VSS | Japanese-XJIS-140，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1KS\$1VSS\$1UTF8 | Japanese-XJIS-140，区分大小写，不区分重音，区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1KS\$1WS | Japanese-XJIS-140，区分大小写，不区分重音，区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1KS\$1WS\$1UTF8 | Japanese-XJIS-140，区分大小写，不区分重音，区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1KS\$1WS\$1VSS | Japanese-XJIS-140，区分大小写，不区分重音，区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1KS\$1WS\$1VSS\$1UTF8 | Japanese-XJIS-140，区分大小写，不区分重音，区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1UTF8 | Japanese-XJIS-140，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1VSS | Japanese-XJIS-140，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1VSS\$1UTF8 | Japanese-XJIS-140，区分大小写，不区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1WS | Japanese-XJIS-140，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1WS\$1UTF8 | Japanese-XJIS-140，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1WS\$1VSS | Japanese-XJIS-140，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AI\$1WS\$1VSS\$1UTF8 | Japanese-XJIS-140，区分大小写，不区分重音，不区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS | Japanese-XJIS-140，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS | Japanese-XJIS-140，区分大小写，区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1UTF8 | Japanese-XJIS-140，区分大小写，区分重音，区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1VSS | Japanese-XJIS-140，区分大小写，区分重音，区分假名，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1VSS\$1UTF8 | Japanese-XJIS-140，区分大小写，区分重音，区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1WS | Japanese-XJIS-140，区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1WS\$1UTF8 | Japanese-XJIS-140，区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1WS\$1VSS | Japanese-XJIS-140，区分大小写，区分重音，区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1WS\$1VSS\$1UTF8 | Japanese-XJIS-140，区分大小写，区分重音，区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1UTF8 | Japanese-XJIS-140，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1VSS | Japanese-XJIS-140，区分大小写，区分重音，不区分假名类型，不区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1VSS\$1UTF8 | Japanese-XJIS-140，区分大小写，区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1WS | Japanese-XJIS-140，区分大小写，区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1WS\$1UTF8 | Japanese-XJIS-140，区分大小写，区分重音，不区分假名，区分全半角，补充字符，不区分变体选择器，UTF8 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1WS\$1VSS | Japanese-XJIS-140，区分大小写，区分重音，不区分假名，区分全半角，补充字符，区分变体选择器 | 
| Japanese\$1XJIS\$1140\$1CS\$1AS\$1WS\$1VSS\$1UTF8 | Japanese-XJIS-140，区分大小写，区分重音，不区分假名，区分全半角，补充字符，区分变体选择器，UTF8 | 
| Korean\$1Wansung\$1CI\$1AS | Korean\$1Wansung，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Latin1\$1General\$1100\$1BIN | Latin1-General-100，二进制排序 | 
| Latin1\$1General\$1100\$1BIN2 | Latin1-General-100，二进制代码点比较排序 | 
| Latin1\$1General\$1100\$1BIN2\$1UTF8 | Latin1-General-100，二进制代码点比较排序，UTF8 | 
| Latin1\$1General\$1100\$1CI\$1AS | Latin1-General-100，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Latin1\$1General\$1100\$1CI\$1AS\$1SC\$1UTF8 | Latin1-General-100，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，UTF8 | 
| Latin1\$1General\$1BIN | Latin1-General，二进制排序 | 
| Latin1\$1General\$1BIN2 | Latin1-General，二进制代码点比较排序 | 
| Latin1\$1General\$1CI\$1AI | Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角 | 
| Latin1\$1General\$1CI\$1AS | Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| Latin1\$1General\$1CI\$1AS\$1KS | Latin1-General，不区分大小写，区分重音，区分假名，不区分全半角 | 
| Latin1\$1General\$1CS\$1AS | Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角 | 
| Modern\$1Spanish\$1CI\$1AS | Modern\$1Spanish，不区分大小写，区分重音，不区分假名，不区分全半角 | 
| SQL\$11xCompat\$1CP850\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 49 | 
| SQL\$1Latin1\$1General\$1CP1\$1CI\$1AI | 对于 Unicode 数据为 Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1252 上的 SQL Server 排序顺序 54 | 
| SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1252 上的 SQL Server 排序顺序 52 | 
| SQL\$1Latin1\$1General\$1CP1\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1252 上的 SQL Server 排序顺序 51 | 
| SQL\$1Latin1\$1General\$1CP1250\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1250 上的 SQL Server 排序顺序 82 | 
| SQL\$1Latin1\$1General\$1CP1250\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1250 上的 SQL Server 排序顺序 81 | 
| SQL\$1Latin1\$1General\$1CP1251\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1251 上的 SQL Server 排序顺序 106 | 
| SQL\$1Latin1\$1General\$1CP1251\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1251 上的 SQL Server 排序顺序 105 | 
| SQL\$1Latin1\$1General\$1CP1253\$1CI\$1AI | 对于 Unicode 数据为 Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1253 上的 SQL Server 排序顺序 124 | 
| SQL\$1Latin1\$1General\$1CP1253\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1253 上的 SQL Server 排序顺序 114 | 
| SQL\$1Latin1\$1General\$1CP1253\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1253 上的 SQL Server 排序顺序 113 | 
| SQL\$1Latin1\$1General\$1CP1254\$1CI\$1AS | 对于 Unicode 数据为 Turkish，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 1254 上的 SQL Server 排序顺序 130 | 
| SQL\$1Latin1\$1General\$1CP1254\$1CS\$1AS | 对于 Unicode 数据为 Turkish，区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 1254 上的 SQL Server 排序顺序 129 | 
| SQL\$1Latin1\$1General\$1CP1255\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1255 上的 SQL Server 排序顺序 138 | 
| SQL\$1Latin1\$1General\$1CP1255\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1255 上的 SQL Server 排序顺序 137 | 
| SQL\$1Latin1\$1General\$1CP1256\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1256 上的 SQL Server 排序顺序 146 | 
| SQL\$1Latin1\$1General\$1CP1256\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1256 上的 SQL Server 排序顺序 145 | 
| SQL\$1Latin1\$1General\$1CP1257\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1257 上的 SQL Server 排序顺序 154 | 
| SQL\$1Latin1\$1General\$1CP1257\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1257 上的 SQL Server 排序顺序 153 | 
| SQL\$1Latin1\$1General\$1CP437\$1BIN | 对于 Unicode 数据为 Latin1-General，二进制排序，对于非 Unicode 数据为代码页 437 上的 SQL Server 排序顺序 30 | 
| SQL\$1Latin1\$1General\$1CP437\$1BIN2 | 对于 Unicode 数据为 Latin1-General，二进制代码点比较排序，对于非 Unicode 数据为代码页 437 上的 SQL Server 排序顺序 30 | 
| SQL\$1Latin1\$1General\$1CP437\$1CI\$1AI | 对于 Unicode 数据为 Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 437 上的 SQL Server 排序顺序 34 | 
| SQL\$1Latin1\$1General\$1CP437\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 437 上的 SQL Server 排序顺序 32 | 
| SQL\$1Latin1\$1General\$1CP437\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 437 上的 SQL Server 排序顺序 31 | 
| SQL\$1Latin1\$1General\$1CP850\$1BIN | 对于 Unicode 数据为 Latin1-General，二进制排序，对于非 Unicode 数据为代码页 850 上的 SQL Server 排序顺序 40 | 
| SQL\$1Latin1\$1General\$1CP850\$1BIN2 | 对于 Unicode 数据为 Latin1-General，二进制代码点比较排序，对于非 Unicode 数据为代码页 850 上的 SQL Server 排序顺序 40 | 
| SQL\$1Latin1\$1General\$1CP850\$1CI\$1AI | 对于 Unicode 数据为 Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 44 | 
| SQL\$1Latin1\$1General\$1CP850\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 42 | 
| SQL\$1Latin1\$1General\$1CP850\$1CS\$1AS | 对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 41 | 
| SQL\$1Latin1\$1General\$1Pref\$1CP1\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1252 上的 SQL Server 排序顺序 53 | 
| SQL\$1Latin1\$1General\$1Pref\$1CP437\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 437 上的 SQL Server 排序顺序 33 | 
| SQL\$1Latin1\$1General\$1Pref\$1CP850\$1CI\$1AS | 对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 43 | 
| Thai\$1CI\$1AS | Thai，不区分大小写，区分重音，不区分假名，不区分全半角 | 

# RDS Custom for SQL Server 数据库实例的本地时区
<a name="custom-reqs-limits-MS.TimeZone"></a>

原定设置情况下，已设置 RDS Custom for SQL Server 数据库实例的时区。当前默认值为协调世界时 (UTC)。您可改为将数据库实例的时区设置为本地时区以匹配应用程序的时区。

首次创建数据库实例时将设置时区。您可以使用 [AWS 管理控制台](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)、Amazon RDS API [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html.html) 操作或 AWS CLI [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 命令创建数据库实例。

如果数据库实例是多可用区部署的一部分，则当您进行故障转移时，您的时区将保留您设置的本地时区。

在请求时间点还原时，请指定要还原到的时间。时间以您的当地时区显示。有关更多信息，请参阅“[将 Amazon RDS 的数据库实例还原到指定时间](USER_PIT.md)”。

下面是在数据库实例上设置本地时区时的限制：
+ 您可以在实例创建期间为数据库实例配置时区，但不能修改现有 RDS Custom for SQL Server 数据库实例的时区。
+ 如果修改了现有 RDS Custom for SQL Server 数据库实例的时区，则 RDS Custom 会将数据库实例状态更改为 `unsupported-configuration`，并发送事件通知。
+ 您无法将快照从一个时区的数据库实例还原至另一个时区的数据库实例。
+ 强烈建议您不要将备份文件从一个时区还原到另一个时区。如果您将备份文件从一个时区还原至为另一个时区，则必须审查您的查询和应用程序来查看时区更改的效果。有关更多信息，请参阅“[使用本机备份和还原导入和导出 SQL Server 数据库](SQLServer.Procedural.Importing.md)”。

## 支持的时区
<a name="custom-reqs-limits-MS.TimeZone.Zones"></a>

您可以将本地时区设置为下表中列出的值之一。


| 时区 | 标准时间偏差 | 描述 | 备注 | 
| --- | --- | --- | --- | 
| 阿富汗标准时间 | (UTC\$104:30) | 喀布尔 | 此时区不遵守夏令时。 | 
| 阿拉斯加标准时间 | (UTC–09:00) | 阿拉斯加州 |  | 
| 阿留申群岛标准时间 | (UTC–10:00) | 阿留申群岛 |  | 
| 阿尔泰标准时间 | (UTC\$107:00) | 巴尔瑙尔，戈尔诺-阿尔泰斯克 |  | 
| 阿拉伯标准时间 | (UTC\$103:00) | 科威特，利雅得 | 此时区不遵守夏令时。 | 
| 阿拉伯标准时间 | (UTC\$104:00) | 阿布扎比、马斯喀特 |  | 
| 阿拉伯标准时间 | (UTC\$103:00) | 巴格达 | 此时区不遵守夏令时。 | 
| 阿根廷标准时间 | (UTC–03:00) | 布宜诺斯艾利斯市 | 此时区不遵守夏令时。 | 
| 阿斯特拉罕标准时间 | (UTC\$104:00) | 阿斯特拉罕，乌里扬诺夫斯克 |  | 
| 大西洋标准时间 | (UTC–04:00) | 大西洋时间 (加拿大) |  | 
| 澳大利亚中部标准时间 | (UTC\$109:30) | 达尔文 | 此时区不遵守夏令时。 | 
| 澳大利亚中西部标准时间 | (UTC\$108:45) | 尤克拉 |  | 
| 澳大利亚东部标准时间 | (UTC\$110:00) | 堪培拉、墨尔本、悉尼 |  | 
| 阿塞拜疆标准时间 | (UTC\$104:00) | 巴库 |  | 
| 亚速尔群岛标准时间 | (UTC–01:00) | 亚速尔群岛 |  | 
| 巴伊亚标准时间 | (UTC–03:00) | 萨尔瓦多 |  | 
| 孟加拉国标准时间 | (UTC\$106:00) | 达卡 | 此时区不遵守夏令时。 | 
| 白俄罗斯标准时间 | (UTC\$103:00) | 明斯克 | 此时区不遵守夏令时。 | 
| 布干维尔岛标准时间 | (UTC\$111:00) | 布干维尔岛 |  | 
| 加拿大中部标准时间 | (UTC–06:00) | 萨斯喀彻温省 | 此时区不遵守夏令时。 | 
| 佛得角标准时间 | (UTC–01:00) | 佛得角群岛 | 此时区不遵守夏令时。 | 
| 高加索标准时间 | (UTC\$104:00) | 埃里温 |  | 
| 澳大 利亚中部标准时间 | (UTC\$109:30) | 阿德莱德 |  | 
| 中美洲标准时间 | (UTC–06:00) | 中美洲 | 此时区不遵守夏令时。 | 
| 中亚标准时间 | (UTC\$106:00) | 阿斯塔纳 | 此时区不遵守夏令时。 | 
| 巴西中部标准时间 | (UTC–04:00) | 库亚巴 |  | 
| 中欧标准时间 | (UTC\$101:00) | 贝尔格莱德、布拉迪斯拉发、布达佩斯、卢布尔雅那、布拉格 |  | 
| 中欧标准时间 | (UTC\$101:00) | 萨拉热窝、斯科普里、华沙、萨格勒布 |  | 
| 太平洋中部标准时间 | (UTC\$111:00) | 索罗门群岛、新喀里多尼亚 | 此时区不遵守夏令时。 | 
| 中部标准时间 | (UTC–06:00) | 中部时间 (美国和加拿大) |  | 
| 中部标准时间（墨西哥） | (UTC–06:00) | 瓜达拉哈拉、墨西哥城、蒙特雷 |  | 
| 查塔姆群岛标准时间 | (UTC\$112:45) | 查塔姆群岛 |  | 
| 中国标准时间 | (UTC\$108:00) | 北京、重庆、香港特别行政区、乌鲁木齐 | 此时区不遵守夏令时。 | 
| 古巴标准时间 | (UTC–05:00) | 哈瓦那 |  | 
| 国际日期变更线标准时间 | (UTC–12:00) | 国际日期变更线西 | 此时区不遵守夏令时。 | 
| 东非标准时间 | (UTC\$103:00) | 内罗毕 | 此时区不遵守夏令时。 | 
| 澳大利亚东部标准时间 | (UTC\$110:00) | 布里斯班 | 此时区不遵守夏令时。 | 
| 东欧标准时间 | (UTC\$102:00) | 基希讷乌 |  | 
| 东部南美洲标准时间 | (UTC–03:00) | 巴西利亚 |  | 
| 复活节岛标准时间 | (UTC–06:00) | 复活节岛 |  | 
| 东部标准时间 | (UTC–05:00) | 东部时间 (美国和加拿大) |  | 
| 东部标准时间（墨西哥） | (UTC–05:00) | 切图马尔 |  | 
| 埃及标准时间 | (UTC\$102:00) | 开罗 |  | 
| 叶卡捷琳堡标准时间 | (UTC\$105:00) | 叶卡捷琳堡 |  | 
| 斐济标准时间 | (UTC\$112:00) | 斐济 |  | 
| FLE 标准时间 | (UTC\$102:00) | 赫尔辛基，基辅，里加，索非亚，塔林，维尔纽斯 |  | 
| 格鲁吉亚标准时间 | (UTC\$104:00) | 第比利斯 | 此时区不遵守夏令时。 | 
| GMT 标准时间 | (UTC) | 都柏林、爱丁堡、里斯本、伦敦 |  此时区与格林威治标准时间不同。此时区遵守夏令时。 | 
| 格陵兰标准时间 | (UTC–03:00) | 格陵兰 |  | 
| 格林威治标准时间 | (UTC) | 蒙罗维亚、雷克雅未克 | 此时区不遵守夏令时。 | 
| GTB 标准时间 | (UTC\$102:00) | 雅典、布加勒斯特 |  | 
| 海地标准时间 | (UTC–05:00) | 海地 |  | 
| 夏威夷标准时间 | (UTC–10:00) | 夏威夷州 |  | 
| 印度标准时间 | (UTC\$105:30) | 钦奈、加尔各答、孟买、新德里 | 此时区不遵守夏令时。 | 
| 伊朗标准时间 | (UTC\$103:30) | 德黑兰 |  | 
| 以色列标准时间 | (UTC\$102:00) | 耶路撒冷 |  | 
| 约旦标准时间 | (UTC\$102:00) | 阿曼 |  | 
| 加里宁格勒标准时间 | (UTC\$102:00) | 加里宁格勒 |  | 
| 堪察加标准时间 | (UTC\$112:00) | 彼得罗巴甫洛夫斯克-堪察加 – 旧 |  | 
| 韩国标准时间 | (UTC\$109:00) | 首尔 | 此时区不遵守夏令时。 | 
| 利比亚标准时间 | (UTC\$102:00) | 的黎波里 |  | 
| 莱恩群岛标准时间 | (UTC\$114:00) | 圣诞岛 |  | 
| 豪勋爵岛标准时间 | (UTC\$110:30) | 豪勋爵岛 |  | 
| 马加丹标准时间 | (UTC\$111:00) | 马加丹 | 此时区不遵守夏令时。 | 
| 麦哲伦标准时间 | (UTC–03:00) | 蓬塔阿雷纳斯 |  | 
| 马克萨斯群岛标准时间 | (UTC–09:30) | 马克萨斯群岛 |  | 
| 毛里求斯标准时间 | (UTC\$104:00) | 路易港 | 此时区不遵守夏令时。 | 
| 中东标准时间 | (UTC\$102:00) | 贝鲁特 |  | 
| 蒙得维的亚标准时间 | (UTC–03:00) | 蒙得维的亚 |  | 
| 摩洛哥标准时间 | (UTC\$101:00) | 卡萨布兰卡 |  | 
| 山地标准时间 | (UTC–07:00) | 山区时间 (美国和加拿大) |  | 
| 山地标准时间（墨西哥） | (UTC–07:00) | 奇瓦瓦、拉巴斯、马萨特兰 |  | 
| 缅甸标准时间 | (UTC\$106:30) | 仰光 | 此时区不遵守夏令时。 | 
| 中亚北部标准时间 | (UTC\$107:00) | 新西伯利亚 |  | 
| 纳米比亚标准时间 | (UTC\$102:00) | 温得和克 |  | 
| 尼泊尔标准时间 | (UTC\$105:45) | 加德满都 | 此时区不遵守夏令时。 | 
| 新西兰标准时间 | (UTC\$112:00) | 奥克兰、惠灵顿 |  | 
| 纽芬兰标准时间 | (UTC–03:30) | 纽芬兰省 |  | 
| 诺福克岛标准时间 | (UTC\$111:00) | 诺福克岛 |  | 
| 北亚东部标准时间 | (UTC\$108:00) | 伊尔库茨克 |  | 
| 北亚标准时间 | (UTC\$107:00) | 克拉斯诺亚尔斯克 |  | 
| 朝鲜标准时间 | (UTC\$109:00) | 平壤 |  | 
| 鄂木斯克标准时间 | (UTC\$106:00) | 鄂木斯克 |  | 
| 太平洋 SA 标准时间 | (UTC–03:00) | 圣地亚哥 |  | 
| 太平洋标准时间 | (UTC–08:00) | 太平洋时间 (美国和加拿大) |  | 
| 太平洋标准时间（墨西哥） | (UTC–08:00) | 下加利福尼亚州 |  | 
| 巴基斯坦标准时间 | (UTC\$105:00) | 伊斯兰堡，卡拉奇 | 此时区不遵守夏令时。 | 
| 巴拉圭标准时间 | (UTC–04:00) | 亚松森 |  | 
| 罗马标准时间 | (UTC\$101:00) | 布鲁塞尔，哥本哈根，马德里，巴黎 |  | 
| 俄罗斯时区 10 | (UTC\$111:00) | 乔库尔达赫 |  | 
| 俄罗斯时区 11 | (UTC\$112:00) | 阿纳德尔，堪察加彼得罗巴甫洛夫斯克 |  | 
| 俄罗斯时区 3 | (UTC\$104:00) | 伊热夫斯克，萨马拉 |  | 
| 俄罗斯标准时间 | (UTC\$103:00) | 莫斯科、圣彼德堡、伏尔加格勒 | 此时区不遵守夏令时。 | 
| 南美洲东部标准时间 | (UTC–03:00) | 卡宴，福塔雷萨 | 此时区不遵守夏令时。 | 
| SA 太平洋标准时间 | (UTC–05:00) | 波哥大、利马、基多、里约布兰科 |  此时区不遵守夏令时。 | 
| 南美洲西部标准时间 | (UTC–04:00) | 乔治敦，拉巴斯，马瑙斯，圣胡安 | 此时区不遵守夏令时。 | 
| 圣皮埃尔标准时间 | (UTC–03:00) | 圣皮埃尔和密克隆群岛 |  | 
| 萨哈林标准时间 | (UTC\$111:00) | 萨哈林 |  | 
| 萨摩亚群岛标准时间 | (UTC\$113:00) | 萨摩亚群岛 |  | 
| 圣多美标准时间 | (UTC\$101:00) | 圣多美 |  | 
| 萨拉托夫标准时间 | (UTC\$104:00) | 萨拉托夫 |  | 
| 东南亚标准时间 | (UTC\$107:00) | 曼谷、河内、雅加达 | 此时区不遵守夏令时。 | 
| 新加坡标准时间 | (UTC\$108:00) | 吉隆坡、新加坡 | 此时区不遵守夏令时。 | 
| 南非标准时间 | (UTC\$102:00) | 哈拉雷，比勒陀利亚 | 此时区不遵守夏令时。 | 
| 斯里兰卡标准时间 | (UTC\$105:30) | 斯里哈亚华登尼普拉 | 此时区不遵守夏令时。 | 
| 苏丹标准时间 | (UTC\$102:00) | 喀土穆 |  | 
| 叙利亚标准时间 | (UTC\$102:00) | 大马士革 |  | 
| 台北标准时间 | (UTC\$108:00) | 台北 | 此时区不遵守夏令时。 | 
| 塔斯马尼亚岛标准时间 | (UTC\$110:00) | 霍巴特 |  | 
| 托坎廷斯标准时间 | (UTC–03:00) | 阿拉瓜伊纳 |  | 
| 东京标准时间 | (UTC\$109:00) | 大坂、札幌、东京 | 此时区不遵守夏令时。 | 
| 托木斯克标准时间 | (UTC\$107:00) | 托木斯克 |  | 
| 汤加标准时间 | (UTC\$113:00) | 努库阿洛法 | 此时区不遵守夏令时。 | 
| 外贝加尔标准时间 | (UTC\$109:00) | 赤塔市 |  | 
| 土耳其标准时间 | (UTC\$103:00) | 伊斯坦布尔 |  | 
| 特克斯和凯科斯群岛标准时间 | (UTC–05:00) | 特克斯和凯科斯群岛 |  | 
| 乌兰巴托标准时间 | (UTC\$108:00) | 乌兰巴托 | 此时区不遵守夏令时。 | 
| 美国东部标准时间 | (UTC–05:00) | 印第安纳 (东部) |  | 
| 美国山地标准时间 | (UTC–07:00) | 亚利桑那州 | 此时区不遵守夏令时。 | 
| UTC | UTC | 协调世界时 | 此时区不遵守夏令时。 | 
| UTC–02 | (UTC–02:00) | 协调世界时–02 | 此时区不遵守夏令时。 | 
| UTC–08 | (UTC–08:00) | 协调世界时–08 |  | 
| UTC–09 | (UTC–09:00) | 协调世界时–09 |  | 
| UTC–11 | (UTC–11:00) | 协调世界时–11 | 此时区不遵守夏令时。 | 
| UTC\$112 | (UTC\$112:00) | 协调世界时\$112 | 此时区不遵守夏令时。 | 
| UTC\$113 | (UTC\$113:00) | 协调世界时\$113 |  | 
| 委内瑞拉标准时间 | (UTC–04:00) | 加拉加斯 | 此时区不遵守夏令时。 | 
| 符拉迪沃斯托克标准时间 | (UTC\$110:00) | 符拉迪沃斯托克 |  | 
| 伏尔加格勒标准时间 | (UTC\$104:00) | 伏尔加格勒 |  | 
| 澳大利亚西部标准时间 | (UTC\$108:00) | 珀斯 | 此时区不遵守夏令时。 | 
| 中非西部标准时间 | (UTC\$101:00) | 中非西部 | 此时区不遵守夏令时。 | 
| 西欧标准时间 | (UTC\$101:00) | 阿姆斯特丹、柏林、伯尔尼、罗马、斯德哥尔摩、维也纳 |  | 
| 西蒙古标准时间 | (UTC\$107:00) | 科布多 |  | 
| 西亚标准时间 | (UTC\$105:00) | 阿什哈巴德，塔什干 | 此时区不遵守夏令时。 | 
| 西岸标准时间 | (UTC\$102:00) | 加沙，希伯伦 |  | 
| 西太平洋标准时间 | (UTC\$110:00) | 关岛，莫尔兹比港 | 此时区不遵守夏令时。 | 
| 雅库茨克标准时间 | (UTC\$109:00) | 雅库茨克 |  | 

# 在 RDS Custom for SQL Server 中使用服务主密钥
<a name="custom-sqlserver-features.smk"></a>

RDS Custom for SQL Server 支持使用服务主密钥（SMK）。RDS Custom 在 RDS Custom for SQL Server 数据库实例的整个生命周期中保留相同的 SMK。通过保留相同的 SMK，您的数据库实例可以使用通过 SMK 加密的对象，例如链接服务器密码和凭证。如果您使用多可用区部署，RDS Custom 还会在主和辅助数据库实例之间同步和维护 SMK。

**Topics**
+ [区域和版本可用性](#custom-sqlserver-features.smk.list)
+ [支持的特征](#custom-sqlserver-features.smk.supportedfeatures)
+ [使用 TDE](#custom-sqlserver-features.smk.tde)
+ [配置功能](#custom-sqlserver-features.smk.configuringfeatures)
+ [要求和限制](#custom-sqlserver-features.smk.reqlimits)

## 区域和版本可用性
<a name="custom-sqlserver-features.smk.list"></a>

对于 RDS Custom 上提供的所有 SQL Server 版本，在所有提供 RDS Custom for SQL Server 的区域中都支持使用 SMK。有关适用于 RDS Custom for SQL Server 的 Amazon RDS 的版本和区域可用性的更多信息，请参阅[支持 RDS Custom for SQL Server 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.sq)。

## 支持的特征
<a name="custom-sqlserver-features.smk.supportedfeatures"></a>

将 SMK 与 RDS Custom for SQL Server 一起使用时，支持以下功能：
+ 透明数据加密 (TDE)
+ 列级加密
+ 数据库邮件
+ 链接服务器
+ SQL Server Integration Services (SSIS)

## 使用 TDE
<a name="custom-sqlserver-features.smk.tde"></a>

SMK 支持配置透明数据加密（TDE），这种加密在数据写入存储之前对数据进行加密，并在从存储读取数据时自动解密数据。与 RDS for SQL Server 不同，在 RDS Custom for SQL Server 数据库实例上配置 TDE 不需要使用选项组。相反，创建证书和数据库加密密钥后，可以运行以下命令在数据库级别开启 TDE：

```
ALTER DATABASE [myDatabase] SET ENCRYPTION ON;
```

 有关将 TDE 与 RDS for SQL Server 一起使用的更多信息，请参阅[SQL Server 中的透明数据加密支持](Appendix.SQLServer.Options.TDE.md)。

 有关 Microsoft SQL Server 中的 TDE 的详细信息，请参阅 Microsoft 文档中的[透明数据加密](https://learn.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption?view=sql-server-ver15)。

## 配置功能
<a name="custom-sqlserver-features.smk.configuringfeatures"></a>

有关配置将 SMK 和 RDS Custom for SQL Server 结合使用的功能的详细步骤，您可以参阅 Amazon RDS 数据库博客中的以下博客：
+ 链接服务器：[Configuring linked servers on RDS Custom for SQL Server](https://aws.amazon.com/blogs/database/configure-linked-servers-on-amazon-rds-custom-for-sql-server/)。
+ SSIS：[Migrate SSIS packages to RDS Custom for SQL Server](https://aws.amazon.com/blogs/database/migrate-microsoft-sql-server-ssis-packages-to-amazon-rds-custom-for-sql-server/)。
+ TDE：[Secure your data using TDE on RDS Custom for SQL Server](https://aws.amazon.com/blogs/database/secure-your-data-at-rest-on-amazon-rds-custom-for-sql-server-using-transparent-data-encryption-tde-or-column-level-encryption-cle/)。

## 要求和限制
<a name="custom-sqlserver-features.smk.reqlimits"></a>

在 RDS Custom for SQL Server 数据库实例中使用 SMK 时，请记住以下要求和限制：
+ 如果您在数据库实例上重新生成 SMK，则应立即执行手动数据库快照。我们建议尽可能避免重新生成 SMK。
+ 必须保留服务器证书和数据库主密钥密码的备份。如果不维护这些内容的备份，可能会导致数据丢失。
+ 如果您配置 SSIS，则应使用 SSM 文档将 RDS Custom for SQL Server 数据库实例加入到域中，以防扩展计算或主机更换。
+ 启用 TDE 或列加密后，数据库备份会自动加密。当您执行快照还原或时间点恢复时，将还原源数据库实例的 SMK 以解密进行还原的数据，并生成一个新的 SMK 来重新加密已还原实例上的数据。

 有关 Microsoft SQL Server 中服务主密钥的更多信息，请参阅 Microsoft 文档中的 [SQL Server 和数据库加密密钥](https://learn.microsoft.com/en-us/sql/relational-databases/security/encryption/sql-server-and-database-encryption-keys-database-engine?view=sql-server-ver15)。

# RDS Custom for SQL Server 支持更改数据捕获（CDC）
<a name="custom-sqlserver-features.cdc"></a>

## 概览
<a name="custom-sqlserver-features.cdc.overview"></a>

RDS Custom for SQL Server 为更改数据捕获（CDC）提供原生支持，使您能够跟踪和捕获 SQL Server 表中的数据修改。CDC 存储有关这些更改的详细元数据，以供后续检索和分析。有关 CDC 功能的详细信息，请参阅 Microsoft 文档中的 [Change data capture](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server#Capture)。

在 SQL Server 中执行 CDC 操作时，需要确保 `sys.servers` 中*本地服务器*（具有 `server_id` = 0）的值与 `SERVERPROPERTY('ServerName')` 标识符的值相匹配。RDS Custom for SQL Server 在实例的整个生命周期中自动保持这种同步，以确保 CDC 持续正常运行，即使在维护或恢复操作期间更换了主机也是如此。

**重要**  
在多可用区实例失效转移后，`SERVERPROPERTY('Servername')` 功能会自动反映网络/计算机名称的更改。但是，在重新启动 `MSSQLSERVER` 服务之前，`@@SERVERNAME` 函数会保留旧的服务器名称。失效转移后，查询 @@SERVERNAME 会返回先前的服务器名称。要在失效转移后获得准确的服务器名称，请使用以下 SQL 查询：  

```
SELECT name FROM sys.servers WHERE server_id=0
```
此查询无需重新启动服务，即可提供最新的服务器名称信息。

## 区域和版本可用性
<a name="custom-sqlserver-features.cdc.regionAvail"></a>

在 RDS Custom for SQL Server 可用的所有 AWS 区域中，对于 RDS Custom 支持的所有 SQL Server 版本，均支持 CDC 功能。有关 RDS Custom for SQL Server 支持的版本和区域可用性的更多信息，请参阅[支持 RDS Custom for SQL Server 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.sq)。

## 要求和限制
<a name="custom-sqlserver-features.cdc.reqsLims"></a>

在 RDS Custom for SQL Server 上实施 CDC 时，请注意以下关键注意事项：
+ 如果您在 `sys.servers` 中手动设置 `@@SERVERNAME` 和/或*本地服务器*以使用 MS 复制等功能，并且 `sys.servers` 中本地服务器（具有 `server_id = 0`）的值设置为与 `*.rds.amazonaws.com` 或 `*.awsrds.*.com` 匹配的格式，则 RDS Custom for SQL Server 不会尝试将其修改为与 `SERVERPROPERTY('ServerName')` 匹配。
+ 当远程登录名或链接服务器当前正在使用旧主机名时，RDS 无法将 `sys.servers` 中的本地服务器（具有 `server_id = 0`）修改为新主机名。此限制适用于两种情况：
  + 当链接服务器使用与旧主机名关联的远程登录名与本地服务器建立连接时
  + 当 RDS Custom for SQL Server 实例充当发布者或分发者，并对其订阅用户实例具有与旧主机名关联的链接登录名时。

## 故障排除
<a name="custom-sqlserver-features.cdc.Troubleshooting"></a>

要识别与旧服务器名称关联的远程登录名或链接登录名，请使用以下查询。验证结果并移除这些登录名，以确保 CDC 功能正常。

```
SELECT * FROM sys.remote_logins WHERE server_id=0
```

或

```
select sss.srvname,ssp.name,srl.remote_name  from sys.server_principals ssp 
inner join sys.remote_logins srl on srl.local_principal_id=ssp.principal_id
inner join sys.sysservers sss  on srl.server_id = sss.srvid
where sss.srvname = @@SERVERNAME
```

# 为 Amazon RDS Custom for SQL Server 设置环境
<a name="custom-setup-sqlserver"></a>

在为 Amazon RDS Custom for SQL Server 数据库实例创建和管理数据库实例之前，请确保执行以下任务。

**Contents**
+ [设置 RDS Custom for SQL Server 的先决条件](#custom-setup-sqlserver.review)
  + [使用 AWS 管理控制台自动创建实例配置文件](#custom-setup-sqlserver.instanceProfileCreation)
+ [步骤 1：为您的 IAM 主体授予所需的权限](#custom-setup-sqlserver.iam-user)
+ [步骤 2：配置网络、实例配置文件和加密](#custom-setup-sqlserver.iam-vpc)
  + [使用 CloudFormation 进行配置](#custom-setup-sqlserver.cf)
    + [CloudFormation 所需的参数](#custom-setup-sqlserver.cf.params)
    + [下载 CloudFormation 模板文件](#custom-setup-sqlserver.cf.download)
    + [使用 CloudFormation 配置资源](#custom-setup-sqlserver.cf.config)
  + [手动配置](#custom-setup-sqlserver.manual)
    + [请确保您有对称的加密 AWS KMS 密钥](#custom-setup-sqlserver.cmk)
    + [手动创建您的 IAM 角色和实例配置文件](#custom-setup-sqlserver.iam)
      + [创建 AWSRDSCustomSQLServerInstanceRole IAM 角色](#custom-setup-sqlserver.iam.create-role)
      + [将访问策略添加到 AWSRDSCustomSQLServerInstanceRole](#custom-setup-sqlserver.iam.add-policy)
      + [创建您的 RDS Custom for SQL Server 实例配置文件](#custom-setup-sqlserver.iam.create-profile)
      + [请将 AWSRDSCustomSQLServerInstanceRole 添加到您的 RDS Custom for SQL Server 实例配置文件中](#custom-setup-sqlserver.iam.add-profile)
    + [手动配置您的 VPC](#custom-setup-sqlserver.vpc)
      + [配置您的 VPC 安全组](#custom-setup-sqlserver.vpc.sg)
      + [为依赖项 AWS 服务配置端点](#custom-setup-sqlserver.vpc.endpoints)
      + [配置实例元数据服务](#custom-setup-sqlserver.vpc.imds)
+ [跨实例限制](#custom-setup-sqlserver.cross-instance-restriction)

**注意**  
有关如何设置先决条件和启动 Amazon RDS Custom for SQL Server 的分步教程，请参阅[通过 CloudFormation 模板开始使用 Amazon RDS Custom for SQL Server（网络设置）](https://aws.amazon.com/blogs/database/get-started-with-amazon-rds-custom-for-sql-server-using-an-aws-cloudformation-template-network-setup/)和[了解创建 Amazon RDS Custom for SQL Server 实例需满足的先决条件](https://aws.amazon.com/blogs/database/explore-the-prerequisites-required-to-create-an-amazon-rds-custom-for-sql-server-instance/)。

## 设置 RDS Custom for SQL Server 的先决条件
<a name="custom-setup-sqlserver.review"></a>

在创建 RDS Custom for SQL Server 数据库实例之前，请确保您的环境符合本主题中描述的要求。也可以使用 CloudFormation 模板在您的AWS 账户中设置先决条件。有关更多信息，请参阅[使用 CloudFormation 进行配置](#custom-setup-sqlserver.cf)

RDS Custom for SQL Server 要求您配置以下先决条件：
+ 配置创建实例所需的 AWS Identity and Access Management（IAM）权限。这是向 RDS 发出 `create-db-instance` 请求所需的 AWS Identity and Access Management（IAM）用户或角色。
+ 配置 RDS Custom for SQL Server 数据库实例所需的必备资源：
  + 配置加密 RDS Custom 实例所需的 AWS KMS 密钥。RDS Custom 在创建实例时需要使用客户托管密钥进行加密。KMS 密钥 ARN、ID、别名 ARN 或别名在创建 RDS Custom 数据库实例的请求中作为 `kms-key-id` 参数传递。
  + 在 RDS Custom for SQL Server 数据库实例中配置所需的权限。RDS Custom 在创建实例时会将实例配置文件附加到数据库实例，并使用它在数据库实例中进行自动化。在 RDS Custom 创建请求中，实例配置文件名称设置为 `custom-iam-instance-profile`。可以从 AWS 管理控制台创建实例配置文件或手动创建实例配置文件。有关更多信息，请参阅[使用 AWS 管理控制台自动创建实例配置文件](#custom-setup-sqlserver.instanceProfileCreation)和[手动创建您的 IAM 角色和实例配置文件](#custom-setup-sqlserver.iam)。
  + 根据对 RDS Custom for SQL Server 的要求配置网络设置。RDS Custom 实例位于您在创建实例时提供的子网中（配置有数据库子网组）。这些子网必须允许 RDS Custom 实例与实现 RDS 自动化所需的服务进行通信。

**注意**  
要满足上述要求，请确保没有任何限制账户级别权限的服务控制策略（SCP）。  
如果您使用的账户属于 AWS 组织，则该账户可能具有限制账户级别权限的服务控制策略（SCP）。确保 SCP 不会限制对于您使用以下过程创建的用户和角色的权限。  
有关 SCP 的更多信息，请参阅《AWS Organizations 用户指南》**中的[服务控制策略 (SCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。使用 AWS CLI 命令 [describe-organization](https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organization.html) 检查您的账户是否属于 AWS 组织。  
有关 AWS Organizations 的更多信息，请参阅《AWS Organizations 用户指南》**中的[什么是 AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)。

有关 RDS Custom for SQL Server 的一般要求，请参阅 [RDS Custom for SQL Server 的一般要求](custom-reqs-limits-MS.md#custom-reqs-limits.reqsMS)。

### 使用 AWS 管理控制台自动创建实例配置文件
<a name="custom-setup-sqlserver.instanceProfileCreation"></a>

RDS Custom 要求您创建和配置实例配置文件以启动任何 RDS Custom for SQL Server 数据库实例。使用 AWS 管理控制台只需一个步骤即可创建和附加新的实例配置文件。此选项位于**创建数据库**、**还原快照**和**还原到时间点**控制台页面的“RDS Custom 安全性”部分。选择**创建新的实例配置文件**以提供实例配置文件名称后缀。AWS 管理控制台将创建新的实例配置文件，该配置文件具有执行 RDS Custom 自动化任务所需的权限。要自动创建新的实例配置文件，您的登录 AWS 管理控制台用户必须具有 `iam:CreateInstanceProfile`、`iam:AddRoleToInstanceProfile`、`iam:CreateRole` 和 `iam:AttachRolePolicy` 权限。

**注意**  
此选项只在 AWS 管理控制台中可用。如果您使用的是 CLI 或 SDK，请使用 RDS Custom 提供的 CloudFormation 模板或手动创建实例配置文件。有关更多信息，请参阅[手动创建您的 IAM 角色和实例配置文件](#custom-setup-sqlserver.iam)。

## 步骤 1：为您的 IAM 主体授予所需的权限
<a name="custom-setup-sqlserver.iam-user"></a>

确保您有足够的访问权限来创建 RDS Custom 实例。可以使用控制台或 CLI 创建 RDS Custom for SQL Server 数据库实例的 IAM 用户或 IAM 角色（称为 *IAM 主体*）必须实施以下任一策略，才能成功创建数据库实例：
+ `AdministratorAccess` 策略
+ 具有以下其他权限的 `AmazonRDSFullAccess` 策略：

  ```
  iam:SimulatePrincipalPolicy
  cloudtrail:CreateTrail
  cloudtrail:StartLogging
  s3:CreateBucket
  s3:PutBucketPolicy
  s3:PutBucketObjectLockConfiguration
  s3:PutBucketVersioning 
  kms:CreateGrant
  kms:DescribeKey
  kms:Decrypt
  kms:ReEncryptFrom
  kms:ReEncryptTo
  kms:GenerateDataKeyWithoutPlaintext
  kms:GenerateDataKey
  ec2:DescribeImages
  ec2:RunInstances
  ec2:CreateTags
  ```

  RDS Custom 在创建实例期间使用这些权限。这些权限在您的账户中配置执行 RDS Custom 操作所需的资源。

  有关 `kms:CreateGrant` 权限的更多信息，请参阅 [AWS KMS key 管理](Overview.Encryption.Keys.md)。

以下示例 JSON 策略授予所需的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ValidateIamRole",
            "Effect": "Allow",
            "Action": "iam:SimulatePrincipalPolicy",
            "Resource": "*"
        },
        {
            "Sid": "CreateCloudTrail",
            "Effect": "Allow",
            "Action": [
                "cloudtrail:CreateTrail",
                "cloudtrail:StartLogging"
            ],
            "Resource": "arn:aws:cloudtrail:*:*:trail/do-not-delete-rds-custom-*"
        },
        {
            "Sid": "CreateS3Bucket",
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:PutBucketPolicy",
                "s3:PutBucketObjectLockConfiguration",
                "s3:PutBucketVersioning"
            ],
            "Resource": "arn:aws:s3:::do-not-delete-rds-custom-*"
        },
        {
            "Sid": "CreateKmsGrant",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        }
    ]
}
```

------

IAM 主体需要以下额外权限，才能使用自定义引擎版本（CEV）：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ConfigureKmsKeyEncryptionPermission",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:DescribeKey",
                "kms:Decrypt",
                "kms:ReEncryptFrom",
                "kms:ReEncryptTo",
                "kms:GenerateDataKeyWithoutPlaintext",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key_id"
        },
        {
            "Sid": "CreateEc2Instance",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeImages",
                "ec2:RunInstances",
                "ec2:CreateTags"
            ],
            "Resource": "*"
        }
    ]
}
```

------

将 *111122223333* 替换为您用来创建实例的账户 ID。将 *us-east-1* 替换为您用来创建实例的 AWS 区域。将 *key\$1id* 替换为客户自主管理型密钥 ID。可以根据需要添加多个密钥。

有关启动 EC2 实例所需的资源级权限的更多信息，请参阅[启动实例（RunInstances）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-runinstances)。

此外，IAM 主体需要对 IAM 角色具有 `iam:PassRole` 权限。必须将其附加到在请求的 `custom-iam-instance-profile` 参数中传递的实例配置文件，以创建 RDS Custom 数据库实例。实例配置文件及其附加的角色稍后将在[步骤 2：配置网络、实例配置文件和加密](#custom-setup-sqlserver.iam-vpc)中创建。

**注意**  
确保之前列出的权限不受服务控制策略 (SCP)、权限边界或与 IAM 主体关联的会话策略的限制。

## 步骤 2：配置网络、实例配置文件和加密
<a name="custom-setup-sqlserver.iam-vpc"></a>

您可以使用以下任一过程来配置 IAM 实例配置文件角色、虚拟私有云 (VPC) 和 AWS KMS 对称加密密钥：
+ [使用 CloudFormation 进行配置](#custom-setup-sqlserver.cf)（推荐）
+ [手动配置](#custom-setup-sqlserver.manual)

**注意**  
如果您的账户属于任一 AWS Organizations，请确保实例配置文件角色所需的权限不受服务控制策略（SCP）限制。  
此主题中的网络配置在与不公开访问的数据库实例配合使用时效果最佳。您无法从 VPC 外部直接连接到此类数据库实例。

### 使用 CloudFormation 进行配置
<a name="custom-setup-sqlserver.cf"></a>

为了简化设置，您可以使用 CloudFormation 模板文件创建 CloudFormation 堆栈。CloudFormation 模板根据 RDS Custom 的要求创建所有网络配置、实例配置文件和加密资源。

要了解如何创建堆栈，请参阅《CloudFormation 用户指南》**中的[在 CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)。

有关如何使用 CloudFormation 模板启动 Amazon RDS Custom for SQL Server 的教程，请参阅 *AWS 数据库博客* 中的[通过 CloudFormation 模板开始使用 Amazon RDS Custom for SQL Server](https://aws.amazon.com/blogs/database/get-started-with-amazon-rds-custom-for-sql-server-using-an-aws-cloudformation-template-network-setup/)。

**Topics**
+ [CloudFormation 所需的参数](#custom-setup-sqlserver.cf.params)
+ [下载 CloudFormation 模板文件](#custom-setup-sqlserver.cf.download)
+ [使用 CloudFormation 配置资源](#custom-setup-sqlserver.cf.config)

#### CloudFormation 所需的参数
<a name="custom-setup-sqlserver.cf.params"></a>

使用 CloudFormation 配置 RDS Custom 必备资源需要以下参数：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-setup-sqlserver.html)

#### CloudFormation 创建的资源
<a name="custom-setup-sqlserver.cf.list"></a>

使用默认设置成功创建 CloudFormation 堆栈会在您的 AWS 账户中创建以下资源：
+ 对称加密 KMS 密钥，用于加密 RDS Custom 管理的数据。
+ 使用 `AmazonRDSCustomInstanceProfileRolePolicy` 将实例配置文件与 IAM 角色相关联，以提供 RDS Custom 所需的权限。有关更多信息，请参阅《AWS 托管策略参考指南》**中的 [AmazonRDSCustomServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSCustomServiceRolePolicy.html)。
+ 将 CIDR 范围指定为 CloudFormation 参数的 VPC。默认值为 `10.0.0.0/16`。
+ 在参数中指定了 CIDR 范围的两个私有子网，以及 AWS 区域中的两个不同可用区。子网 CIDR 的默认值为 `10.0.128.0/20` 和 `10.0.144.0/20`。
+ 一个在参数中指定了 CIDR 范围的公有子网。子网 CIDR 的默认值为 10.0.0.0/20。EC2 实例位于此子网中，可用于连接到 RDS Custom 实例。
+ 为 VPC 设置了 DHCP 选项，域名解析为 Amazon 域名系统 (DNS) 服务器。
+ 与两个私有子网关联但无法访问互联网的路由表。
+ 与公有子网关联且可以访问互联网的路由表。
+ 与 VPC 关联且允许互联网访问公有子网的互联网网关。
+ 网络访问控制列表（ACL），与两个私有子网关联并且在 VPC 内只能访问 HTTPS 和数据库端口。
+ 要与 RDS Custom 实例关联的 VPC 安全组。限制对 RDS Custom 所需的 AWS 服务端点的出站 HTTPS 访问，以及对 EC2 实例安全组的入站数据库端口的访问。
+ 要与公有子网中的 EC2 实例关联的 VPC 安全组。限制出站数据库端口对 RDS Custom 实例安全组的访问。
+ 对于为 RDS Custom 所需的 AWS 服务端点创建的 VPC 端点，要与它们关联的 VPC 安全组。
+ 在其中创建 RDS Custom 实例的数据库子网组。此模板创建的两个私有子网已添加到数据库子网组中。
+ 对应于 RDS Custom 所需的每个 AWS 服务端点的 VPC 端点。

除了上述列表之外，将可用性配置设置为多可用区还会创建以下资源：
+ 允许私有子网之间通信的网络 ACL 规则。
+ 对与 RDS Custom 实例关联的 VPC 安全组中多可用区端口的入站和出站访问权限。
+ 与进行多可用区通信所需的 AWS 服务端点连接的 VPC 端点。

此外，设置 RDP 访问配置还会创建以下资源：
+ 配置从您的源 IP 地址对公有子网的 RDP 访问权限：
  + 允许建立从您的源 IP 到公有子网的 RDP 连接的网络 ACL 规则。
  + 对从您的源 IP 连接到与 EC2 实例关联的 VPC 安全组的 RDP 端口进行入口访问。
+ 配置从公有子网中的 EC2 实例到私有子网中的 RDS Custom 实例的 RDP 访问权限：
  + 允许建立从公有子网到私有子网的 RDP 连接的网络 ACL 规则。
  + 对从与 EC2 实例关联的 VPC 安全组连接到与 RDS Custom 实例关联的 VPC 安全组的 RDP 端口进行入站访问

使用以下过程为 RDS Custom for SQL Server 创建 CloudFormation 堆栈。

#### 下载 CloudFormation 模板文件
<a name="custom-setup-sqlserver.cf.download"></a>

**下载模板文件**

1. 打开链接 [custom-sqlserver-onboard.zip](samples/custom-sqlserver-onboard.zip) 的上下文（右键单击）菜单，然后选择 **Save Link As**（将链接另存为）。

1. 将文件保存并提取到您的计算机中。

#### 使用 CloudFormation 配置资源
<a name="custom-setup-sqlserver.cf.config"></a>

**使用 CloudFormation 配置资源**

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

1. 要启动 Create Stack（创建堆栈）向导，请选择 **Create Stack**（创建堆栈）。

   此时会显示 **Create stack**（创建快照）。

1. 对于 **Prerequisite - Prepare template**（先决条件 - 准备模板），请选择 **Template is ready**（模板已就绪）。

1. 对于 **Select Template**（选择模板），执行以下操作：

   1. 对于 **Template source**(模板来源)，选择 **Upload a template file**(上载模板文件)。

   1. 对于**选择文件**，请导航到并选择正确的文件。

1. 选择**下一步**。

   此时将出现 **Specify stack details**（指定堆栈详细信息）页面。

1. 对于**堆栈名称**，输入 **rds-custom-sqlserver**。

1. 对于 **Parameters**（参数），请执行以下操作：

   1. 要保留原定设置选项，请选择 **Next**（下一步)。

   1. 要更改选项，请选择相应的可用性配置、网络配置和 RDP 访问配置，然后选择**下一步**。

      在更改参数之前，请仔细阅读每个参数的说明。
**注意**  
如果您选择在此 CloudFormation 堆栈中至少创建一个多可用区实例，请确保 CloudFormation 堆栈参数**为先决条件设置选择可用性配置**设置为 `Multi-AZ`。如果您将 CloudFormation 堆栈创建为单可用区，请在创建第一个多可用区实例之前将 CloudFormation 堆栈更新为多可用区配置。

1. 在**配置堆栈选项**页面上，请选择**下一步**。

1. 在 **Review rds-custom-sqlserver**（查看 rds-custom-sqlserver）页面上，请执行以下操作：

   1. 对于**功能**，请选中****我确认 CloudFormation 可能使用自定义名称创建 IAM 资源****复选框。

   1. 选择**创建堆栈**。

**注意**  
请勿直接从资源页面更新从该 CloudFormation 堆栈创建的资源。这可以防止您使用 CloudFormation 模板将后续更新应用于这些资源。

CloudFormation 创建 RDS Custom for SQL Server 所需的资源。如果堆栈创建失败，请通读 **Events**（事件）选项卡，以查看哪项资源创建失败及其状态原因。

对于将作为参数传递以创建 RDS Custom for SQL Server 数据库实例的所有资源，控制台中此 CloudFormation 堆栈的 **Outputs**（输出）选项卡应包含有关它们的信息。确保使用 CloudFormation 为 RDS Custom 数据库实例创建的 VPC 安全组和数据库子网组。原定设置情况下，RDS 会尝试附加原定设置 VPC 安全组，该安全组可能没有您所需的访问权限。

如果您使用了 CloudFormation 来创建资源，则可以跳过[手动配置](#custom-setup-sqlserver.manual)。

#### 更新 CloudFormation 堆栈
<a name="custom-setup-sqlserver.cf.update"></a>

您还可以在创建后更新 CloudFormation 堆栈的一些相关配置。可以更新的配置包括：
+ RDS Custom for SQL Server 的可用性配置
  + **为先决条件设置选择可用性配置**：更新此参数可在单可用区和多可用区配置之间切换。如果您将此 CloudFormation 堆栈用于至少一个多可用区实例，则必须更新该堆栈以选择多可用区配置。
+ RDS Custom for SQL Server 的 RDP 访问配置
  + 您的源的 IPv4 CIDR 块：您可以通过更新此参数来更新您的源的 IPv4 CIDR 块（或 IP 地址范围）。将此参数设置为空白会删除从源 CIDR 块到公有子网的 RDP 访问配置。
  + 设置对 RDS Custom for SQL Server 的 RDP 访问：启用或禁用从 EC2 实例到 RDS Custom for SQL Server 实例的 RDP 连接。

#### 删除 CloudFormation 堆栈
<a name="custom-setup-sqlserver.cf.delete"></a>

在从 CloudFormation 堆栈中删除所有使用资源的 RDS Custom 实例后，即可删除该堆栈。RDS Custom 不会跟踪 CloudFormation 堆栈，因此当存在使用堆栈资源的数据库实例时，它不会阻止删除该堆栈。在删除该堆栈时，请确保没有使用堆栈资源的 RDS Custom 数据库实例。

**注意**  
当您删除 CloudFormation 堆栈时，该堆栈创建的所有资源都会被删除，但 KMS 密钥除外。KMS 密钥会进入等待删除状态并且将在 30 天后删除。要保留 KMS 密钥，请在 30 天宽限期内执行 [CancelKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html) 操作。

### 手动配置
<a name="custom-setup-sqlserver.manual"></a>

如果您选择手动配置资源，请执行以下任务。

**注意**  
为了简化设置，您可以使用 CloudFormation 模板文件来创建 CloudFormation 堆栈，而不是手动配置。有关更多信息，请参阅 [使用 CloudFormation 进行配置](#custom-setup-sqlserver.cf)。  
也可以使用 AWS CLI 来完成本部分的操作。如果是，请下载并安装最新的 CLI。

**Topics**
+ [请确保您有对称的加密 AWS KMS 密钥](#custom-setup-sqlserver.cmk)
+ [手动创建您的 IAM 角色和实例配置文件](#custom-setup-sqlserver.iam)
+ [手动配置您的 VPC](#custom-setup-sqlserver.vpc)

#### 请确保您有对称的加密 AWS KMS 密钥
<a name="custom-setup-sqlserver.cmk"></a>

RDS Custom 需要对称的加密 AWS KMS key。在创建 RDS Custom for SQL Server 数据库实例时，确保提供 KMS 密钥标识符做为参数 `kms-key-id`。有关更多信息，请参阅 [为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例](custom-creating-sqlserver.md)。

您有以下选项：
+ 如果您的 AWS 账户中有现有的客户自主管理型 KMS 密钥，则可以将其与 RDS Custom 一起使用。无需进一步操作。
+ 如果您已经为不同的 RDS Custom 引擎创建了客户自主管理型对称加密 KMS 密钥，可以重用相同的 KMS 密钥。无需进一步操作。
+ 如果您的账户中没有现有的客户自主管理型对称加密 KMS 密钥，请按照《AWS Key Management Service 开发人员指南》**的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)中的说明创建一个 KMS 密钥。
+ 如果您正在创建 CEV 或 RDS Custom 数据库实例，而您的 KMS 密钥位于其他 AWS 账户 中，请务必使用 AWS CLI。您不能将 AWS 控制台与跨账户 KMS 密钥一起使用。

**重要**  
RDS Custom 不支持 AWS 托管式 KMS 密钥。

确保您的对称加密密钥为 IAM 实例配置文件中的 `kms:Decrypt`（IAM）角色授予对 `kms:GenerateDataKey` 和 AWS Identity and Access Management 操作的访问权限。如果您的账户中有一个新的对称加密密钥，不需要进行任何更改。否则，请确保对称加密密钥的策略授予对这些操作的访问权限。

有关更多信息，请参阅 [步骤 4：为 RDS Custom for Oracle 配置 IAM](custom-setup-orcl.md#custom-setup-orcl.iam-vpc)。

#### 手动创建您的 IAM 角色和实例配置文件
<a name="custom-setup-sqlserver.iam"></a>

可以手动创建实例配置文件并使用它来启动 RDS Custom 实例。如果计划在 AWS 管理控制台中创建实例，请跳过此部分。AWS 管理控制台允许您创建实例配置文件并将其附加到 RDS Custom 数据库实例。有关更多信息，请参阅 [使用 AWS 管理控制台自动创建实例配置文件](#custom-setup-sqlserver.instanceProfileCreation)。

手动创建实例配置文件时，请将实例配置文件名称作为 `custom-iam-instance-profile` 参数传递给 `create-db-instance` CLI 命令。RDS Custom 使用与此实例配置文件关联的角色，通过运行自动化功能来管理实例。

**为 RDS Custom for SQL Server 创建 IAM 实例配置文件和 IAM 角色**

1. 创建名为 `AWSRDSCustomSQLServerInstanceRole` 的 IAM 角色，并带有信任策略，以便 Amazon EC2 可代入此角色。

1. 将 AWS 托管策略 `AmazonRDSCustomInstanceProfileRolePolicy` 添加到 `AWSRDSCustomSQLServerInstanceRole`。

1. 为名为 `AWSRDSCustomSQLServerInstanceProfile` 的 RDS Custom for SQL Server 创建 IAM 实例配置文件。

1. 将 `AWSRDSCustomSQLServerInstanceRole` 添加到实例配置文件。

##### 创建 AWSRDSCustomSQLServerInstanceRole IAM 角色
<a name="custom-setup-sqlserver.iam.create-role"></a>

以下示例将创建 `AWSRDSCustomSQLServerInstanceRole` 角色。信任策略将允许 Amazon EC2 代入该角色。

```
aws iam create-role \
    --role-name AWSRDSCustomSQLServerInstanceRole \
    --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                  "Service": "ec2.amazonaws.com"
              }
            }
          ]
        }'
```

##### 将访问策略添加到 AWSRDSCustomSQLServerInstanceRole
<a name="custom-setup-sqlserver.iam.add-policy"></a>

要提供所需的权限，请将 AWS 托管策略 `AmazonRDSCustomInstanceProfileRolePolicy` 附加到 `AWSRDSCustomSQLServerInstanceRole`。`AmazonRDSCustomInstanceProfileRolePolicy` 允许 RDS Custom 实例发送和接收消息，并执行各种自动化操作。

**注意**  
确保访问策略中的权限不受 SCP 或与实例配置文件角色关联的权限边境所限制。

以下示例将 AWS 托管策略 `AmazonRDSCustomInstanceProfileRolePolicy` 附加到 `AWSRDSCustomSQLServerInstanceRole` 角色。

```
aws iam attach-role-policy \
    --role-name AWSRDSCustomSQLServerInstanceRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonRDSCustomInstanceProfileRolePolicy
```

##### 创建您的 RDS Custom for SQL Server 实例配置文件
<a name="custom-setup-sqlserver.iam.create-profile"></a>

实例配置文件是包含单个 IAM 角色的容器。RDS Custom 使用实例配置文件将角色传递给实例。

如果使用 AWS 管理控制台创建 Amazon EC2 角色，该控制台会自动创建实例配置文件，将其命名为与所创建角色相同的名称。请按如下方式创建您的实例配置文件，将其命名为 `AWSRDSCustomSQLServerInstanceProfile`。

```
aws iam create-instance-profile \
    --instance-profile-name AWSRDSCustomSQLServerInstanceProfile
```

##### 请将 AWSRDSCustomSQLServerInstanceRole 添加到您的 RDS Custom for SQL Server 实例配置文件中
<a name="custom-setup-sqlserver.iam.add-profile"></a>

将 `AWSRDSCustomInstanceRoleForRdsCustomInstance` 角色添加到先前创建的 `AWSRDSCustomSQLServerInstanceProfile` 配置文件中。

```
aws iam add-role-to-instance-profile \
    --instance-profile-name AWSRDSCustomSQLServerInstanceProfile \
    --role-name AWSRDSCustomSQLServerInstanceRole
```

#### 手动配置您的 VPC
<a name="custom-setup-sqlserver.vpc"></a>

就像 Amazon EC2 实例或 Amazon RDS 实例一样，您的 RDS Custom 数据库实例位于基于 Amazon VPC 服务的虚拟私有云 (VPC) 中。您将提供并配置自己的 VPC。因此，您将能够完全控制实例联网设置。

RDS Custom 将通信从数据库实例发送到其他 AWS 服务。确保可以从您在其中创建 RDS Custom 数据库实例的子网访问以下服务：
+ Amazon CloudWatch (`com.amazonaws.region.monitoring`)
+ Amazon CloudWatch Logs (`com.amazonaws.region.logs`)
+ Amazon CloudWatch Events (`com.amazonaws.region.events`)
+ Amazon EC2（`com.amazonaws.region.ec2` 和 `com.amazonaws.region.ec2messages`）
+ Amazon S3 (`com.amazonaws.region.s3`)
+ AWS Secrets Manager (`com.amazonaws.region.secretsmanager`)
+ AWS Systems Manager（`com.amazonaws.region.ssm` 和 `com.amazonaws.region.ssmmessages`）

如果创建多可用区部署
+ Amazon Simple Queue Service (`com.amazonaws.region.sqs`)

如果 RDS Custom 无法与必需的服务通信，它会发布以下事件：

```
Database instance in incompatible-network. SSM Agent connection not available. Amazon RDS can't connect to the dependent AWS services.
```

```
Database instance in incompatible-network. Amazon RDS can't connect to dependent AWS services. Make sure port 443 (HTTPS) allows outbound connections, and try again. "Failed to connect to the following services: s3 events"
```

为避免 `incompatible-network` 错误，请确保您的 RDS Custom 数据库实例与 AWS 服务之间通信所涉及的 VPC 组件满足以下要求：
+ 数据库实例可以在端口 443 上建立到其他 AWS 服务的出站连接。
+ VPC 允许对源自 RDS Custom 数据库实例的请求进行传入响应。
+ RDS Custom 可以正确解析每个 AWS 服务的端点的域名。

如果您已经为其他 RDS Custom 数据库引擎配置了 VPC，可以重用该 VPC 并跳过此过程。

**Topics**
+ [配置您的 VPC 安全组](#custom-setup-sqlserver.vpc.sg)
+ [为依赖项 AWS 服务配置端点](#custom-setup-sqlserver.vpc.endpoints)
+ [配置实例元数据服务](#custom-setup-sqlserver.vpc.imds)

##### 配置您的 VPC 安全组
<a name="custom-setup-sqlserver.vpc.sg"></a>

*安全组*充当 VPC 实例的虚拟防火墙，以控制入站和出站流量。RDS Custom 数据库实例在其网络接口上附加了一个用于保护该实例的安全组。请确保该安全组允许通过 HTTPS 在 RDS Custom 和其他 AWS 服务之间传输流量。可以将此安全组作为实例创建请求中的 `vpc-security-group-ids` 参数进行传递。

**为 RDS Custom 配置安全组**

1. 登录到AWS 管理控制台并打开 Amazon VPC 控制台，网址：[https://console.aws.amazon.com/vpc](https://console.aws.amazon.com/vpc)。

1. 允许 RDS Custom 使用原定设置安全组，或创建您自己的安全组。

   有关详细说明，请参阅[通过创建安全组提供对 VPC 中的数据库实例的访问](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)。

1. 确保您的安全组允许在端口 443 上建立出站连接。RDS Custom 需要此端口来与依赖项 AWS 服务进行通信。

1. 如果您有私有 VPC 并且使用 VPC 端点，请确保与数据库实例关联的安全组允许在端口 443 上建立到 VPC 端点的出站连接。还要确保与 VPC 端点关联的安全组允许在端口 443 上建立来自数据库实例的入站连接。

   如果不允许传入连接，RDS Custom 实例将无法连接到 AWS Systems Manager 和 Amazon EC2 端点。有关更多信息，请参阅《AWS Systems Manager 用户指南》**中的[创建 Virtual Private Cloud 端点](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-create-vpc.html)。

1. 对于 RDS Custom for SQL Server 多可用区实例，请确保与数据库实例关联的安全组允许在端口 1120 上建立与该安全组本身的入站和出站连接。这是在多可用区 RDS Custom for SQL Server 数据库实例上建立对等主机连接所必需的。

有关安全组的更多信息，请参阅 [Amazon VPC 开发人员指南](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)中的*您的 VPC 的安全组*。

##### 为依赖项 AWS 服务配置端点
<a name="custom-setup-sqlserver.vpc.endpoints"></a>

我们建议您按照以下说明为 VPC 中的每项服务添加端点。但是，您也可以使用任何其他解决方案，只要使您的 VPC 能够与 AWS 服务端点通信即可。例如，您可以使用网络地址转换 (NAT) 或 AWS Direct Connect。

**为与 RDS Custom 配合使用的 AWS 服务配置端点**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航栏中，使用区域选择器来选择 AWS 区域。

1. 在导航窗格中，选择**端点**。在主窗格中，选择**创建端点**。

1. 对于 **Service category**（服务类别），选择 **AWS 服务**。

1. 对于 **Service Name**（服务名称），请选择表中显示的端点。

1. 对于 **VPC**，选择您的 VPC。

1. 对于**子网**，请从每个可用区中选择一个要包括的子网。

   VPC 端点可以跨越多个可用区。AWS 为您选择的每个子网中的 VPC 端点创建一个弹性网络接口。每个网络接口有一个域名系统 (DNS) 主机名和私有 IP 地址。

1. 对于 **Security group**（安全组），请选择或创建一个安全组。

   您可以使用安全组来控制对您的端点的访问，就像您使用防火墙一样。确保安全组允许端口 443 上来自数据库实例的入站连接。有关安全组的更多信息，请参阅 *Amazon VPC 用户指南* 中的[您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

1. 或者，您可以将策略附加到 VPC 端点。端点策略可以控制对您要连接到的 AWS 服务的访问权限。原定设置策略允许所有请求通过端点。如果您使用自定义策略，请确保策略中允许来自数据库实例的请求。

1. 选择**创建端点**。

下表说明了如何查找您的 VPC 用于出站通信所需的端点列表。


| 服务 | 端点格式 | 备注和链接 | 
| --- | --- | --- | 
|  AWS Systems Manager  |  采用以下端点格式： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-setup-sqlserver.html)  |  有关每个区域中端点的列表，请参阅《Amazon Web Services 一般参考》**中的 [AWS Systems Manager 端点和限额](https://docs.aws.amazon.com/general/latest/gr/ssm.html)。  | 
|  AWS Secrets Manager  |  采用端点格式 `secretsmanager.region.amazonaws.com`。  |  有关每个区域中端点的列表，请参阅《Amazon Web Services 一般参考》**中的 [AWS Secrets Manager 端点和限额](https://docs.aws.amazon.com/general/latest/gr/asm.html)。  | 
|  Amazon CloudWatch  |  采用以下端点格式： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-setup-sqlserver.html)  | 有关每个区域中的端点列表，请参阅：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-setup-sqlserver.html) | 
|  Amazon EC2  |  采用以下端点格式： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-setup-sqlserver.html)  |  有关每个区域中端点的列表，请参阅《Amazon Web Services 一般参考》**中的 [Amazon Elastic Compute Cloud 端点和限额](https://docs.aws.amazon.com/general/latest/gr/ec2-service.html)。  | 
|  Amazon S3  |  采用端点格式 `s3.region.amazonaws.com`。  |  有关每个区域中端点的列表，请参阅《Amazon Web Services 一般参考》**中的 [Amazon Simple Storage Service 端点和限额](https://docs.aws.amazon.com/general/latest/gr/s3.html)。 要了解 Amazon S3 的网关端点的更多信息，请参阅《Amazon VPC 开发人员指南**》中的 [Amazon S3 端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)。 要了解如何创建访问点，请参阅《Amazon VPC 开发人员指南**》中的[创建访问点](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/access-points-create-ap.html)。 要了解如何为 Amazon S3 创建网关端点，请参阅[网关 VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html)。  | 
|  Amazon Simple Queue Service  | 采用端点格式 sqs.region.amazonaws.com | 要查看每个区域中端点的列表，请参阅 [Amazon Simple Storage Service 端点和限额](https://docs.aws.amazon.com/general/latest/gr/sqs-service.html) | 

##### 配置实例元数据服务
<a name="custom-setup-sqlserver.vpc.imds"></a>

请确保您的实例可以执行以下操作：
+ 可使用 Instance Metadata Service Version 2 (IMDSv2) 来访问实例元数据服务。
+ 允许通过端口 80 (HTTP) 到 IMDS 链接 IP 地址的出站通信。
+ 从 `http://169.254.169.254` IMDSv2 链接请求实例元数据。

有关更多信息，请参阅《Amazon EC2 用户指南》**中的[使用 IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)。

## 跨实例限制
<a name="custom-setup-sqlserver.cross-instance-restriction"></a>

当您按照上述步骤创建实例配置文件时，系统会使用 AWS 托管策略 `AmazonRDSCustomInstanceProfileRolePolicy` 向 RDS Custom 提供实现实例管理和监控自动化所需的权限。该托管策略可确保这些权限仅允许访问 RDS Custom 运行自动化功能所需的资源。建议使用该托管策略来支持新功能并满足安全要求，这些要求会自动应用于现有的实例配置文件，无需人工干预。有关更多信息，请参阅[AWS 托管策略：AmazonRDSCustomInstanceProfileRolePolicy](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-security-iam-awsmanpol.html#rds-security-iam-awsmanpol-AmazonRDSCustomInstanceProfileRolePolicy)。

`AmazonRDSCustomInstanceProfileRolePolicy` 托管策略将实例配置文件限制为具有跨账户访问权限，但它可能允许在同一账户内跨 RDS Custom 实例访问某些 RDS Custom 托管资源。根据您的要求，您可以使用权限边界进一步限制跨实例访问。权限边界策略定义基于身份的策略可以授予实体的最大权限，但它本身并不授予权限。有关更多信息，请参阅[评估有边界的有效权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html#access_policies_boundaries-eval-logic)。

例如，以下边界策略限制实例配置文件角色对特定 AWS KMS 密钥的访问权限，并限制跨使用不同 AWS KMS 密钥的实例对 RDS Custom 托管式资源的访问权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenyOtherKmsKeyAccess",
            "Effect": "Deny",
            "Action": "kms:*",
            "NotResource": "arn:aws:kms:us-east-1:111122223333:key/KMS_key_ID"
        }
    ]
}
```

------

**注意**  
请确保权限边界不会阻止 `AmazonRDSCustomInstanceProfileRolePolicy` 向 RDS Custom 授予的任何权限。

# 对于 RDS Custom for SQL Server 使用自带媒体
<a name="custom-sqlserver.byom"></a>

RDS Custom for SQL Server 支持两种许可模式：附带许可证（LI）和自带媒体（BYOM）。

**利用 BYOM，您可以执行以下操作：**

1. 在 AWS EC2 Windows AMI 上提供并安装您自己的 Microsoft SQL Server 二进制文件以及支持的累积更新（CU）。

1. 将 AMI 另存为黄金镜像，该镜像是可用于创建自定义引擎版本（CEV）的模板。

1. 从您的黄金镜像创建 CEV。

1. 使用 CEV 创建新的 RDS Custom for SQL Server 数据库实例。

然后，Amazon RDS 会为您管理您的数据库实例。

**注意**  
如果您还有一个附带许可证（LI）的 RDS Custom for SQL Server 数据库实例，则无法将此数据库实例中的 SQL Server 软件与 BYOM 一起使用。您必须将自己的 SQL Server 二进制文件放入 BYOM 中。

## 对 RDS Custom for SQL Server 使用 BYOM 的要求
<a name="custom-sqlserver.byom.requirements"></a>

使用 RDS Custom for SQL Server 的自定义引擎版本的相同一般要求也适用于 BYOM。有关更多信息，请参阅 [RDS Custom for SQL Server CEV 的要求](custom-cev-sqlserver.preparing.md#custom-cev-sqlserver.preparing.Requirements)。

使用 BYOM 时，请确保满足以下附加要求：
+ 使用以下支持的版本之一：SQL Server 2022 或 2019 企业版、标准版或开发版。
+ 将 SQL Server sysadmin（SA）服务器角色权限授予 `NT AUTHORITY\SYSTEM`。
+ 打开 TCP 端口 1433 和 UDP 端口 1434 以允许 SSM 连接。

## 对 RDS Custom for SQL Server 使用 BYOM 的限制
<a name="custom-sqlserver.byom.limitations"></a>

RDS Custom for SQL Server 的相同一般限制也适用于 BYOM。有关更多信息，请参阅 [Amazon RDS Custom for SQL Server 的要求和限制](custom-reqs-limits-MS.md)。

对于 BYOM，以下附加限制适用：
+ 仅支持原定设置 SQL Server 实例（MSSQLSERVER）。不支持已命名的 SQL Server 实例。RDS Custom for SQL Server 仅检测和监控原定设置 SQL Server 实例。
+ 每个 AMI 仅支持 SQL Server 的单一安装。不支持多次安装不同的 SQL Server 版本。
+ BYOM 不支持 SQL Server Web 版本。
+ BYOM 不支持 SQL Server 各版本的评估版。安装 SQL Server 时，请不要选中使用评估版的复选框。
+ 功能可用性和支持因每个数据库引擎的特定版本以及 AWS 区域而异。有关更多信息，请参阅[RDS Custom for SQL Server CEV 的区域可用性](custom-cev-sqlserver.preparing.md#custom-cev-sqlserver.preparing.RegionVersionAvailability)和[RDS Custom for SQL Server CEV 的版本支持](custom-cev-sqlserver.preparing.md#custom-cev-sqlserver.preparing.VersionSupport)。

## 使用 BYOM 创建 RDS Custom for SQL Server 数据库实例
<a name="custom-sqlserver.byom.creating"></a>

要使用 BYOM 准备和创建 RDS Custom for SQL Server 数据库实例，请参阅[使用自带媒体（BYOM）准备 CEV](custom-cev-sqlserver.preparing.md#custom-cev-sqlserver.preparing.byom)。

# 使用适用于 RDS Custom for SQL Server 的自定义引擎版本
<a name="custom-cev-sqlserver"></a>

RDS Custom for SQL Server 的*自定义引擎版本（CEV）*是包括 Microsoft SQL Server 的亚马逊云机器镜像（AMI）。

**CEV 工作流程的基本步骤如下：**

1. 选择 AWS EC2 Windows AMI 以用作 CEV 的基础镜像。您可以选择使用预安装的 Microsoft SQL Server，也可以自带媒体以自行安装 SQL Server。

1. 在操作系统（OS）上安装其他软件，并自定义操作系统和 SQL Server 的配置以满足您的企业需求。

1. 将 AMI 另存为黄金镜像

1. 从黄金镜像创建自定义引擎版本（CEV）。

1. 使用 CEV 创建新的 RDS Custom for SQL Server 数据库实例。

然后，Amazon RDS 会为您管理这些数据库实例。

CEV 允许您维护操作系统和数据库的首选基准配置。使用 CEV 可确保主机配置（如任何第三方代理安装或其他操作系统自定义）在 RDS Custom for SQL Server 数据库实例上持续存在。使用 CEV，您可以使用相同配置快速部署 RDS Custom for SQL Server 数据库实例集。

**Topics**
+ [正在准备创建适用于 RDS Custom for SQL Server 的 CEV](custom-cev-sqlserver.preparing.md)
+ [创建适用于 RDS Custom for SQL Server 的 CEV](custom-cev-sqlserver.create.md)
+ [修改适用于 RDS Custom for SQL Server 的 CEV](custom-cev-sqlserver-modifying.md)
+ [查看 Amazon RDS Custom for SQL Server 的 CEV 详细信息](custom-viewing-sqlserver.md)
+ [删除适用于 RDS Custom for SQL Server 的 CEV](custom-cev-sqlserver-deleting.md)

# 正在准备创建适用于 RDS Custom for SQL Server 的 CEV
<a name="custom-cev-sqlserver.preparing"></a>

您可以使用包含预安装、附带许可证（LI）的 Microsoft SQL Server 的亚马逊机器映像（AMI）来创建 CEV，也可以使用安装您自己的 SQL Server 安装媒体（BYOM）的 AMI 来创建 CEV。

## 准备 CEV
<a name="custom-cev-sqlserver.preparing.types"></a>

使用以下过程，通过自带媒体（BYOM）或预安装的 Microsoft SQL Server（LI）创建 CEV。

### 使用自带媒体（BYOM）准备 CEV
<a name="custom-cev-sqlserver.preparing.byom"></a>

以下步骤以 **Windows Server 2019 Base** 的 AMI 作为示例。

**使用 BYOM 创建 CEV**

1. 从 Amazon EC2 控制台控制中，选择**启动实例**。

1. 对于**名称**，输入实例的名称。

1. 在“快速入门”下，选择 **Windows**。

1. 选择 **Microsoft Windows Server 2019 Base**。

1. 选择适当的实例类型、键对、网络和存储设置，然后启动实例。

1. 启动或创建 EC2 实例后，请确保从步骤 4 中选择了正确的 Windows AMI：

   1. 在 Amazon EC2 控制台选择 EC2 实例。

   1. 在**详细信息**部分，检查**使用情况操作**并确保将其设置为 **RunInstances:0002**。  
![\[将 RunInstances:0002 用于 BYOM 的 Windows AMI\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/cev-sqlserver-byom-ec2runinstances.png)

1. 登录 EC2 实例并将您的 SQL Server 安装媒体复制到该实例。
**注意**  
如果您使用 SQL Server 开发版构建 CEV，则可能需要使用 [Microsoft Visual Studio 订阅](https://my.visualstudio.com/Downloads?q=sqlserver%20developer)获取安装媒体。

1. 安装 SQL Server。务必执行以下操作：

   1. 查看[对 RDS Custom for SQL Server 使用 BYOM 的要求](custom-sqlserver.byom.md#custom-sqlserver.byom.requirements)和[RDS Custom for SQL Server CEV 的版本支持](#custom-cev-sqlserver.preparing.VersionSupport)。

   1. 将实例根目录设置为默认值 `C:\Program Files\Microsoft SQL Server\`。不要更改此目录。

   1. 将 SQL Server 数据库引擎账户名称设置为 `NT Service\MSSQLSERVER` 或 `NT AUTHORITY\NETWORK SERVICE`。

   1. 将 SQL Server 启动模式设置为**手动**。

   1. 将 SQL Server 身份验证模式选择为**混合**。

   1. 保留默认数据目录和 TempDB 位置的当前设置。

1. 将 SQL Server sysadmin（SA）服务器角色权限授予 `NT AUTHORITY\SYSTEM`：

   ```
   1. USE [master]
   2. GO
   3. EXEC master..sp_addsrvrolemember @loginame = N'NT AUTHORITY\SYSTEM' , @rolename = N'sysadmin'
   4. GO
   ```

1. 安装其他软件，或自定义操作系统和数据库配置以满足您的要求。

1. 在 EC2 实例上运行 Sysprep。有关更多信息，请参阅[使用 Windows Sysprep 创建 Amazon EC2 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-create-win-sysprep.html)。

1. 保存包含您已安装的 SQL Server 版本、其他软件和自定义项的 AMI。这将是您的黄金镜像。

1. 通过提供您创建的映像的 AMI ID 来创建新的 CEV。有关详细步骤，请参阅[创建适用于 RDS Custom for SQL Server 的 CEV](custom-cev-sqlserver.create.md)。

1. 使用 CEV 创建新的 RDS Custom for SQL Server 数据库实例。有关详细步骤，请参阅[从 CEV 创建 RDS Custom for SQL Server 数据库实例](custom-cev-sqlserver.create.md#custom-cev-sqlserver.create.newdbinstance)。

### 使用预安装的 SQL Server（LI）准备 CEV
<a name="custom-cev-sqlserver.preparing.licenseincluded"></a>

使用预安装的 Microsoft SQL Server（LI）创建 CEV 的以下步骤以 **SQL Server CU20** 版本号为 `2023.05.10` 的 AMI 作为示例。创建 CEV 时，请选择具有最新版本号的 AMI。这可以确保您使用的是支持的 Windows Server 和 SQL Server 版本 [具有最新的累积更新（CU）]。

**使用预安装的 Microsoft SQL Server（LI）创建 CEV**

1. 选择最新可用的 AWS EC2 Windows 亚马逊机器映像（AMI），其中带有附带许可证（LI）的 Microsoft Windows Server 和 SQL Server。

   1. 在 [Windows AMI 版本历史记录](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-ami-version-history.html)中搜索 **CU20**。

   1. 记下版本号。对于 SQL Server 2019 CU20，版本号为 `2023.05.10`。  
![\[SQL Server 2019 CU20 的 AMI 版本历史记录结果。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/rds_custom_sqlserver_cev_find_ami_history_li_cu20.png)

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

   1. 在 Amazon EC2 控制台的左侧导航窗格中，选择 **Images**（映像），然后选择 **AMI**。

   1. 选择**公有映像**。

   1. 在搜索框中输入 `2023.05.10`。随即出现 AMI 的列表。

   1. 在搜索框中输入 `Windows_Server-2019-English-Full-SQL_2019` 以筛选结果。应显示以下结果。  
![\[使用 SQL Server 2019 CU20 时支持的 AMI。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/rds_custom_sqlserver_cev_find_ami_li_cu.png)

   1. 选择要使用的 AMI 以及 SQL Server 版本。

1. 从您选择的 AMI 创建或启动 EC2 实例。

1. 登录 EC2 实例并安装其他软件，或自定义操作系统和数据库配置以满足您的要求。

1. 在 EC2 实例上运行 Sysprep。有关使用 Sysprep 准备 AMI 的更多信息，请参阅[使用 Sysprep 创建标准化的亚马逊机器映像（AMI）](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Creating_EBSbacked_WinAMI.html#sysprep-using-ec2launchv2)。

1. 保存包含您已安装的 SQL Server 版本、其他软件和自定义项的 AMI。这将是您的黄金镜像。

1. 通过提供您创建的映像的 AMI ID 来创建新的 CEV。有关创建 CEV 的详细步骤，请参阅 [创建适用于 RDS Custom for SQL Server 的 CEV](custom-cev-sqlserver.create.md)。

1. 使用 CEV 创建新的 RDS Custom for SQL Server 数据库实例。有关详细步骤，请参阅[从 CEV 创建 RDS Custom for SQL Server 数据库实例](custom-cev-sqlserver.create.md#custom-cev-sqlserver.create.newdbinstance)。

## RDS Custom for SQL Server CEV 的区域可用性
<a name="custom-cev-sqlserver.preparing.RegionVersionAvailability"></a>

以下 AWS 区域中提供对 RDS Custom for SQL Server 的自定义引擎版本（CEV）的支持：
+ 美国东部（俄亥俄州）
+ 美国东部（弗吉尼亚州北部）
+ 美国西部（俄勒冈州）
+ 美国西部（北加利福尼亚）
+ 亚太地区（孟买）
+ 亚太地区（大阪）
+ 亚太地区（首尔）
+ 亚太地区（新加坡）
+ 亚太地区（悉尼）
+ 亚太地区（东京）
+ 加拿大（中部）
+ 欧洲地区（法兰克福）
+ 欧洲地区（爱尔兰）
+ 欧洲地区（伦敦）
+ 欧洲地区（巴黎）
+ 欧洲地区（斯德哥尔摩）
+ 南美洲（圣保罗）

## RDS Custom for SQL Server CEV 的版本支持
<a name="custom-cev-sqlserver.preparing.VersionSupport"></a>

以下 AWS EC2 Windows AMI 支持创建适用于 RDS Custom for SQL Server 的 CEV：
+ 对于使用预安装媒体的 CEV，带有附带许可证（LI）的 Microsoft Windows Server 2019（操作系统）和 SQL Server 2022 或 2019 的 AWS EC2 Windows AMI
+ 对于使用自带媒体（BYOM）的 CEV，带有 Microsoft Windows Server 2019（操作系统）的 AWS EC2 Windows AMI

以下操作系统（OS）和数据库版本支持创建适用于 RDS Custom for SQL Server 的 CEV：
+ 对于使用预装媒体的 CEV：
  + 带有 CU9、CU13、CU14-GDR、CU15-GDR、CU16、CU17、CU18、CU19、CU19-GDR、CU20-GDR、CU21-GDR、CU22 和 CU22-GDR 的 SQL Server 2022 企业版、标准版或 Web 版。
  + 带有 CU8、CU17、CU18、CU20、CU24、CU26、CU28-GDR、CU29-GDR、CU30、CU32 和 CU32-GDR 的 SQL Server 2019 企业版、标准版或 Web 版。
+ 对于使用自带媒体（BYOM）的 CEV，
  + 带有 CU9、CU13、CU14-GDR、CU15-GDR、CU16、CU17、CU18、CU19、CU19-GDR、CU20-GDR、CU21-GDR、CU22 和 CU22-GDR 的 SQL Server 2022 企业版、标准版或开发版。
  + 带有 CU8、CU17、CU18、CU20、CU24、CU26、CU28-GDR、CU29-GDR、CU30、CU32 和 CU32-GDR 的 SQL Server 2019 企业版、标准版或开发版。
+ 对于使用预安装媒体或自带媒体（BYOM）的 CEV，Windows Server 2019 是唯一支持的操作系统。

有关更多信息，请参阅[AWS Windows AMI 版本历史记录](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ec2-windows-ami-version-history.html)。

## RDS Custom for SQL Server CEV 的要求
<a name="custom-cev-sqlserver.preparing.Requirements"></a>

以下要求应用于创建适用于 RDS Custom for SQL Server 的 CEV：
+ 用于创建 CEV 的 AMI 必须基于 RDS Custom for SQL Server 支持的操作系统和数据库配置。有关支持的配置的更多信息，请参阅 [Amazon RDS Custom for SQL Server 的要求和限制](custom-reqs-limits-MS.md)。
+ CEV 必须具有唯一的名称。您无法创建与现有 CEV 同名的 CEV。
+ 必须使用 SQL Server 的以下命名模式命名 CEV：*主要版本 \$1 次要版本 \$1 自定义字符串*。*主要版本 \$1 次要版本*必须与 AMI 提供的 SQL Server 版本相匹配。例如，您可以将带有 SQL Server 2019 CU17 的 AMI 命名为 **15.00.4249.2.my\$1cevtest**。
+ 您必须使用 Sysprep 准备 AMI。有关使用 Sysprep 准备 AMI 的更多信息，请参阅[使用 Sysprep 创建标准化的亚马逊机器映像（AMI）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-create-win-sysprep.html)。
+ 您负责维护 AMI 的生命周期。从 CEV 创建的 RDS Custom for SQL Server 数据库实例不存储 AMI 的副本。它保持一个指向您用于创建 CEV 的 AMI 的指针。AMI 必须存在，RDS Custom for SQL Server 数据库实例才能保持可运行状态。

## RDS Custom for SQL Server CEV 的限制
<a name="custom-cev-sqlserver.preparing.Limitations"></a>

以下限制适用于 RDS Custom for SQL Server 的自定义引擎版本：
+ 如果存在与 CEV 关联的资源（如数据库实例或数据库快照），则无法将其删除。
+ 要创建 RDS Custom for SQL Server 数据库实例，CEV 的状态必须为 `pending-validation`、`available`、`failed` 或 `validating`。如果 CEV 状态为 `incompatible-image-configuration`，则无法使用此 CEV 创建 RDS Custom for SQL Server 数据库实例。
+ 要修改 RDS Custom for SQL Server 数据库实例以使用新的 CEV，CEV 的状态必须为 `available`。
+ 无法从现有 RDS Custom for SQL Server 数据库实例创建 AMI 或 CEV。
+ 您无法修改现有 CEV 以使用其他 AMI。但是，您可以修改 RDS Custom for SQL Server 数据库实例以使用不同的 CEV。有关更多信息，请参阅 [修改 RDS Custom for SQL Server 数据库实例](custom-managing.modify-sqlserver.md)。
+ 不支持使用与创建数据库实例时提供的 KMS 密钥不同的客户自主管理型 KMS 密钥来对 AMI 或 CEV 进行加密。
+ 不支持 CEV 的跨区域副本。
+ 不支持 CEV 的跨账户副本。
+ 删除 CEV 后，无法还原或恢复它。但是，您可以从同一 AMI 创建新的 CEV。
+ RDS Custom for SQL Server 数据库实例将您的 SQL Server 数据库文件存储在 *D:\$1* 驱动器中。与 CEV 关联的 AMI 应将 Microsoft SQL Server 系统数据库文件存储在 *C:\$1* 驱动器中。
+ RDS Custom for SQL Server 数据库实例保留您对 SQL Server 所做的配置更改。在从 CEV 创建的正在运行的 RDS Custom for SQL Server 数据库实例上对操作系统所做的任何配置更改都不会保留。如果您需要对操作系统进行永久配置更改并将其保留为新的基准配置，请创建新的 CEV 并修改数据库实例以使用新的 CEV。
**重要**  
修改 RDS Custom for SQL Server 数据库实例以使用新的 CEV 是一项离线操作。您可以立即执行修改，也可以安排在每周维护时段内进行修改。
+ 当您修改 CEV 时，Amazon RDS 不会将这些修改推送到任何关联的 RDS Custom for SQL Server 数据库实例。必须修改每个 RDS Custom for SQL Server 数据库实例，才能使用新的或更新的 CEV。有关更多信息，请参阅 [修改 RDS Custom for SQL Server 数据库实例](custom-managing.modify-sqlserver.md)。
+ 
**重要**  
如果删除 CEV 使用的 AMI，则任何可能需要更换主机的修改（例如规模计算）都将失败。然后，RDS Custom for SQL Server 数据库实例将放在 RDS 支持边界之外。建议您避免删除与 CEV 关联的任何 AMI。

# 创建适用于 RDS Custom for SQL Server 的 CEV
<a name="custom-cev-sqlserver.create"></a>

您可以使用 AWS 管理控制台或 AWS CLI 创建自定义引擎版本（CEV）。然后，您可以使用 CEV 创建 RDS Custom for SQL Server 实例。

确保 Amazon 机器映像（AMI）与您的 CEV 位于同一 AWS 账户和区域中。否则，创建 CEV 的过程将失败。

有关更多信息，请参阅 [为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例](custom-creating-sqlserver.md)。

**重要**  
对于使用预安装的 SQL Server 创建的 AMI 和使用自带媒体（BYOM）创建的 AMI，创建 CEV 的步骤相同。

## 控制台
<a name="custom-cev-sqlserver.create.console"></a>

**要创建 CEV**

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

1. 在导航窗格中，选择 **Custom engine versions**（自定义引擎版本）。

   **Custom engine versions**（自定义引擎版本）页面显示了当前存在的所有 CEV。如果您尚未创建任何 CEV，则该表为空。

1. 选择 **Create custom engine version**（创建自定义引擎版本）。

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

1. 对于**版本**，请选择要使用的数据库引擎版本。

1. 对于 **Major version**（主要版本），选择在 AMI 上安装的主引擎主版本。

1. 在 **Version details**（版本详细信息）中，在 **Custom engine version name**（自定义引擎版本名称）中输入有效的名称。

   名称格式为 `major-engine-version.minor-engine-version.customized_string`。您可以使用 1–50 位字母数字字符、下划线、短划线和句点。例如，您可以输入名称 **15.00.4249.2.my\$1cevtest**。

   或者，选择输入 CEV 的描述。

1. 对于 **Installation Media**（安装介质），浏览或输入您想要从中创建 CEV 的 AMI ID。

1. 在 **Tags** （标签）部分中，添加任何标签以标识 CEV。

1. 选择 **Create custom engine version**（创建自定义引擎版本）。

**Custom engine versions**（自定义引擎版本）页面显示。您的 CEV 显示状态 **pending-validation**（待验证）

## AWS CLI
<a name="custom-cev-sqlserver.create.CEV"></a>

要使用 AWS CLI 创建 CEV，请运行 [create-custom-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/create-custom-db-engine-version.html) 命令。

以下选项为必填：
+ `--engine`
+ `--engine-version`
+ `--image-id`

您还可以指定以下选项：
+ `--description`
+ `--region`
+ `--tags`

下面的示例创建了一个名为 `15.00.4249.2.my_cevtest` 的 CEV。确保 CEV 的名称以主要引擎版本号开头。

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

```
1. aws rds create-custom-db-engine-version \
2.     --engine custom-sqlserver-ee \
3.     --engine-version 15.00.4249.2.my_cevtest \
4.     --image-id ami-0r93cx31t5r596482 \                    
5.     --description "Custom SQL Server EE 15.00.4249.2 cev test"
```
以下部分输出显示了引擎、参数组和其他信息。  

```
 1. "DBEngineVersions": [
 2.     {
 3.     "Engine": "custom-sqlserver-ee",
 4.     "MajorEngineVersion": "15.00",
 5.     "EngineVersion": "15.00.4249.2.my_cevtest",
 6.     "DBEngineDescription": "Microsoft SQL Server Enterprise Edition for RDS Custom for SQL Server",
 7.     "DBEngineVersionArn": "arn:aws:rds:us-east-1:<my-account-id>:cev:custom-sqlserver-ee/15.00.4249.2.my_cevtest/a1234a1-123c-12rd-bre1-1234567890",
 8.     "DBEngineVersionDescription": "Custom SQL Server EE 15.00.4249.2 cev test",
 9.                                                       
10.     "Image": [
11.         "ImageId": "ami-0r93cx31t5r596482",
12.         "Status": "pending-validation"
13.      ],
14.     "CreateTime": "2022-11-20T19:30:01.831000+00:00",
15.     "SupportsLogExportsToCloudwatchLogs": false,
16.     "SupportsReadReplica": false,
17.     "Status": "pending-validation",
18.     "SupportsParallelQuery": false,
19.     "SupportsGlobalDatabases": false,
20.     "TagList": []
21.     }
22. ]
```

如果创建 CEV 的过程失败，则 RDS Custom for SQL Server 会发出 `RDS-EVENT-0198` 以及该消息 `Creation failed for custom engine version major-engine-version.cev_name`。该消息包括有关失败的详细信息，例如，事件打印丢失的文件。要查找有关 CEV 创建问题的故障排除建议，请参阅 [RDS Custom for SQL Server 的 CEV 错误故障排除](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.cev)。

## 从 CEV 创建 RDS Custom for SQL Server 数据库实例
<a name="custom-cev-sqlserver.create.newdbinstance"></a>

成功创建 CEV 后，**CEV status**（CEV 状态）将显示 `pending-validation`。现在，您可以使用 CEV 创建新的 RDS Custom for SQL Server 数据库实例。要从 CEV 创建新的 RDS Custom for SQL Server 数据库实例，请参阅 [创建 RDS Custom for SQL Server 数据库实例](custom-creating-sqlserver.md#custom-creating-sqlserver.create)。

## CEV 的生命周期
<a name="custom-cev-sqlserver.create.lifecycle"></a>

CEV 生命周期包括以下状态。


****  

| CEV 状态 | 描述 | 故障排除建议 | 
| --- | --- | --- | 
| `pending-validation` | CEV 已创建，正在等待关联 AMI 的验证。CEV 将保持为 `pending-validation`，直到从中创建 RDS Custom for SQL Server 数据库实例。 | 如果没有现有任务，则从 CEV 创建一个新的 RDS Custom for SQL Server 数据库实例。创建 RDS Custom for SQL Server 数据库实例时，系统尝试验证 CEV 的关联 AMI。  | 
| `validating` | 基于新的 CEV 创建 RDS Custom for SQL Server 数据库实例的任务正在进行中。创建 RDS Custom for SQL Server 数据库实例时，系统尝试验证 CEV 的关联 AMI。 | 等待现有 RDS Custom for SQL Server 数据库实例的创建任务完成。您可以使用 RDS EVENTS 控制台查看详细的事件消息以进行故障排除。  | 
| `available` | 已成功验证 CEV。成功从 CEV 创建 RDS Custom for SQL Server 数据库实例后，CEV 将进入 `available` 状态。 | CEV 不需要任何额外的验证。它可用于创建其他 RDS Custom for SQL Server 数据库实例或修改现有实例。 | 
| `inactive` | CEV 已修改为非活动状态。 | 您无法使用此 CEV 创建或升级 RDS Custom 数据库实例。此外，您无法使用此 CEV 还原数据库快照以创建新的 RDS Custom 数据库实例。有关如何将状态更改为 `ACTIVE` 的信息，请参阅 [修改适用于 RDS Custom for SQL Server 的 CEV](custom-cev-sqlserver-modifying.md)。 | 
| `failed` | 此 CEV 的创建数据库实例步骤在可验证 AMI 之前失败。或者，CEV 使用的底层 AMI 不处于可用状态。 | 排查系统无法创建数据库实例的根本原因。查看详细的错误消息并尝试再次创建新的数据库实例。确保 CEV 使用的底层 AMI 处于可用状态。 | 
| `incompatible-image-configuration` | 验证 AMI 时出错。 | 查看错误的技术详细信息。您无法再次尝试使用此 CEV 验证 AMI。查看以下部分：建议： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-cev-sqlserver.create.html) 使用正确的信息创建新的 CEV。 如果需要，使用支持的 AMI 创建一个新的 EC2 实例，并在其上运行 Sysprep 进程。  | 

# 修改适用于 RDS Custom for SQL Server 的 CEV
<a name="custom-cev-sqlserver-modifying"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 修改 CEV。您可以修改 CEV 描述或其可用性状态。您的 CEV 具有以下状态值之一：
+ `available` – 您可以使用此 CEV 创建新的 RDS Custom 数据库实例或升级数据库实例。这是新创建的 CEV 的原定设置状态。
+ `inactive` – 您无法使用此 CEV 创建或升级 RDS Custom 数据库实例。使用此 CEV，您无法还原数据库快照以创建新的 RDS Custom 数据库实例。

您可以将 CEV 状态从 `available` 更改为 `inactive` 或从 `inactive` 更改为 `available`。您可以将状态更改为 `INACTIVE`，以防止意外使用 CEV 或使已停止的 CEV 有资格再次使用。

## 控制台
<a name="custom-cev-sqlserver-modifying.console"></a>

**要修改 CEV**

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

1. 在导航窗格中，选择 **Custom engine versions**（自定义引擎版本）。

1. 选择要修改其描述或状态的 CEV。

1. 对于 **Actions**（操作），选择 **Modify**（修改）。

1. 进行以下任何更改：
   + 对于 **CEV status settings**（CEV 状态设置），选择新的可用状态。
   + 对于 **Version description**（版本描述），输入新的描述。

1. 选择 **Modify CEV**（修改 CEV）。

   如果 CEV 正在使用中，控制台将显示 **You can't modify the CEV status**（您不能修改 CEV 状态）。修复问题，然后重试。

**Custom engine versions**（自定义引擎版本）页面显示。

## AWS CLI
<a name="custom-cev-sqlserver-modifying.cli"></a>

要通过使用 AWS CLI 修改 CEV，请运行 [modify-custom-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-custom-db-engine-version.html) 命令。您可以通过运行 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 命令查找要修改的 CEV。

以下选项为必填：
+ `--engine`
+ `--engine-version cev`，其中 *`cev`* 是要修改的自定义引擎版本的名称
+ `--status`` status`，其中 *`status`* 是您希望分配给 CEV 的可用状态。

以下示例将名为 `15.00.4249.2.my_cevtest` 的 CEV 从当前状态更改为 `inactive`。

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

```
1. aws rds modify-custom-db-engine-version \
2.     --engine custom-sqlserver-ee \ 
3.     --engine-version 15.00.4249.2.my_cevtest \
4.     --status inactive
```
对于 Windows：  

```
1. aws rds modify-custom-db-engine-version ^
2.     --engine custom-sqlserver-ee ^
3.     --engine-version 15.00.4249.2.my_cevtest ^
4.     --status inactive
```

要修改 RDS Custom for SQL Server 数据库实例以使用新的 CEV，请参阅[修改 RDS Custom for SQL Server 数据库实例以使用新 CEV](custom-cev-sqlserver-modifying-dbinstance.md)。

# 修改 RDS Custom for SQL Server 数据库实例以使用新 CEV
<a name="custom-cev-sqlserver-modifying-dbinstance"></a>

您可以修改现有的 RDS Custom for SQL Server 数据库实例以使用不同的 CEV。您可以进行的更改包括：
+ 更改 CEV
+ 更改数据库实例类
+ 更改备份保留期和备份时段
+ 更改维护时段

## 控制台
<a name="custom-cev-sqlserver-modifying-dbinstance.CON"></a>

**要修改 RDS Custom for SQL Server 数据库实例**

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

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

1. 选择要修改的数据库实例。

1. 选择**修改**。

1. 根据需要进行以下更改：

   1. 对于 **DB engine version**（数据库引擎版本），请选择不同的 CEV。

   1. 更改 **DB instance class**（数据库实例类）的值。有关支持的类，请参阅 [RDS Custom for SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md)。

   1. 更改 **Backup retention period**（备份保留期）的值。

   1. 对于 **Backup window**（备份时段），设置 **Start time**（开始时间）和 **Duration**（持续时间）的值。

   1. 对于 **DB instance maintenance window**（数据库实例维护时段），设置 **Start day**（开始日）、**Start time**（开始时间）和 **Duration**（持续时间）的值。

1. 选择**继续**。

1. 选择 **Apply immediately**（立即应用）或 **Apply during the next scheduled maintenance window**（在下一个计划的维护时段内应用）。

1. 选择**修改数据库实例**。
**注意**  
将数据库实例从一个 CEV 修改为另一个 CEV 时，例如，在升级次要版本时，SQL Server 系统数据库（包括其数据和配置）将在当前 RDS Custom for SQL Server 数据库实例中持久存在。

## AWS CLI
<a name="custom-cev-sqlserver-modifying-dbinstance.CLI"></a>

要使用 AWS CLI 修改数据库实例以使用不同的 CEV，请运行 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-custom-db-engine-version.html) 命令。

以下选项为必填：
+ `--db-instance-identifier`
+ `--engine-version cev`，其中 *`cev`* 是要将数据库实例更改为的自定义引擎版本的名称。

以下示例将名为 `my-cev-db-instance` 的数据库实例修改为使用名为 `15.00.4249.2.my_cevtest_new` 的 CEV 并立即应用更改。

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

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier my-cev-db-instance \ 
3.     --engine-version 15.00.4249.2.my_cevtest_new \
4.     --apply-immediately
```
对于 Windows：  

```
1. aws rds modify-db-instance ^
2.     --db-instance-identifier my-cev-db-instance ^
3.     --engine-version 15.00.4249.2.my_cevtest_new ^
4.     --apply-immediately
```

# 查看 Amazon RDS Custom for SQL Server 的 CEV 详细信息
<a name="custom-viewing-sqlserver"></a>

您可以使用 AWS 管理控制台或 AWS CLI 查看有关 CEV 的详细信息。

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

**查看 CEV 详细信息**

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

1. 在导航窗格中，选择 **Custom engine versions**（自定义引擎版本）。

   **Custom engine versions**（自定义引擎版本）页面显示了当前存在的所有 CEV。如果您尚未创建任何 CEV，则该页面为空。

1. 选择要查看的 CEV 的名称。

1. 选择 **Configuration**（配置）以查看详细信息。  
![\[查看 CEV 的配置详细信息。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/rds_custom_sqlserver_cev_viewdetails.PNG)

## AWS CLI
<a name="custom-viewing-sqlserver.CEV"></a>

要通过使用 AWS CLI 查看有关 CEV 的详细信息，请运行 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 命令。

您还可以指定以下选项：
+ `--include-all`，以查看具有任何生命周期状态的所有 CEV。如果没有 `--include-all` 选项，则只会返回处于 `available` 生命周期状态的 CEV。

```
aws rds describe-db-engine-versions --engine custom-sqlserver-ee --engine-version 15.00.4249.2.my_cevtest --include-all
{
    "DBEngineVersions": [
        {
            "Engine": "custom-sqlserver-ee",
            "MajorEngineVersion": "15.00",
            "EngineVersion": "15.00.4249.2.my_cevtest",
            "DBParameterGroupFamily": "custom-sqlserver-ee-15.0",
            "DBEngineDescription": "Microsoft SQL Server Enterprise Edition for custom RDS",
            "DBEngineVersionArn": "arn:aws:rds:us-east-1:{my-account-id}:cev:custom-sqlserver-ee/15.00.4249.2.my_cevtest/a1234a1-123c-12rd-bre1-1234567890",
            "DBEngineVersionDescription": "Custom SQL Server EE 15.00.4249.2 cev test",
            "Image": {
                "ImageId": "ami-0r93cx31t5r596482",
                "Status": "pending-validation"
            },
            "DBEngineMediaType": "AWS Provided",
            "CreateTime": "2022-11-20T19:30:01.831000+00:00",
            "ValidUpgradeTarget": [],
            "SupportsLogExportsToCloudwatchLogs": false,
            "SupportsReadReplica": false,
            "SupportedFeatureNames": [],
            "Status": "pending-validation",
            "SupportsParallelQuery": false,
            "SupportsGlobalDatabases": false,
            "TagList": [],
            "SupportsBabelfish": false
        }
    ]
}
```

您可以使用筛选条件查看具有特定生命周期状态的 CEV。例如，要查看生命周期状态为 `pending-validation`、`available` 或 `failed` 的 CEV：

```
aws rds describe-db-engine-versions engine custom-sqlserver-ee
                region us-west-2 include-all query 'DBEngineVersions[?Status == pending-validation || 
                Status == available || Status == failed]'
```

# 删除适用于 RDS Custom for SQL Server 的 CEV
<a name="custom-cev-sqlserver-deleting"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 删除 CEV。通常，这需要花费几分钟时间。

删除 CEV 之前，请确保它未被以下任何项目使用：
+ RDS Custom 数据库实例
+ RDS Custom 数据库实例的快照
+ RDS Custom 数据库实例的自动备份

## 控制台
<a name="custom-cev-sqlserver-deleting.console"></a>

**要删除 CEV**

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

1. 在导航窗格中，选择 **Custom engine versions**（自定义引擎版本）。

1. 选择要删除其描述或状态的 CEV。

1. 对于**操作**，选择**删除**。

   **Delete *cev\$1name*?**（删除 cev\$1name？）对话框显示。

1. 输入 **delete me**，然后选择**删除**。

   在 **Custom engine versions**（自定义引擎版本）页面中，横幅显示您的 CEV 正在被删除。

## AWS CLI
<a name="custom-cev-sqlserver-deleting.console.cli"></a>

要通过使用 AWS CLI 删除 CEV，请运行 [delete-custom-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-custom-db-engine-version.html) 命令。

以下选项为必填：
+ `--engine custom-sqlserver-ee`
+ `--engine-version cev` ，其中 *cev* 是要删除的自定义引擎版本的名称

以下示例会删除名为 `15.00.4249.2.my_cevtest` 的 CEV。

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

```
1. aws rds delete-custom-db-engine-version \
2.     --engine custom-sqlserver-ee \
3.     --engine-version 15.00.4249.2.my_cevtest
```
对于 Windows：  

```
1. aws rds delete-custom-db-engine-version ^
2.     --engine custom-sqlserver-ee ^
3.     --engine-version 15.00.4249.2.my_cevtest
```

# 为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例
<a name="custom-creating-sqlserver"></a>

您可以创建 RDS Custom 数据库实例，然后使用 AWS Systems Manager 或远程桌面协议 (RDP) 连接该实例。

**重要**  
务必先完成 [为 Amazon RDS Custom for SQL Server 设置环境](custom-setup-sqlserver.md) 部分中的任务，然后才能创建或连接到 RDS Custom for SQL Server 数据库实例。  
您可以在创建 RDS Custom 数据库实例时标记它们，但不要创建或修改 RDS Custom 自动化所需的 `AWSRDSCustom` 标签。有关更多信息，请参阅 [为 RDS Custom for SQL Server 资源添加标签](custom-managing-sqlserver.tagging.md)。  
首次创建 RDS Custom for SQL Server 数据库实例时，您可能会收到以下错误：The service-linked role is in the process of being created.（服务相关角色正在创建过程中）。请稍后重试。如果您这样做，请等待几分钟，然后重新尝试创建数据库实例。

**Topics**
+ [创建 RDS Custom for SQL Server 数据库实例](#custom-creating-sqlserver.create)
+ [RDS Custom 服务相关角色](custom-creating-sqlserver.slr.md)
+ [使用 AWS Systems Manager 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.ssm.md)
+ [使用 RDP 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.rdp.md)

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

使用 AWS 管理控制台 或 AWS CLI 创建 Amazon RDS Custom for SQL Server 数据库实例。该过程与创建 Amazon RDS 数据库实例的过程相似。

有关更多信息，请参阅 [创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

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

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

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

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

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

1. 选择**Standard create** (标准创建) 作为数据库创建方法。

1. 在 **Engine options**（引擎选项）中，为引擎版本选择 **Microsoft SQL Server**。

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

1. 在 **Edition**（版本）部分中，选择要使用的数据库引擎版本。

1. （可选）如果您打算从 CEV 创建数据库实例，请选中 **Use custom engine version (CEV)** [使用自定义引擎版本（CEV）] 复选框。在下拉列表中选择您的 CEV。

1. 对于**数据库版本**，保留默认值版本。

1. 对于 **Templates** (模板)，选择 **Production** (生产)。

1. 在 **Settings**（设置）部分中，为 **DB instance identifier**（数据库实例标识符）输入一个唯一的名称。

1. 要输入主密码，请执行以下操作：

   1. 在**设置**部分中，打开**凭证设置**。

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

   1. 更改 **Master username**（主用户名）值，并在 **Master password**（主密码）和 **Confirm password**（确认密码）中输入相同的密码。

   预设情况下，新的 RDS Custom 数据库实例对主用户使用自动生成的密码。

1. 在 **DB instance size**（数据库实例大小）部分中，为 **DB instance class**（数据库实例类）选择一个值。

   有关支持的类，请参阅 [RDS Custom for SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md)。

1. 选择 **Storage**（存储）设置。

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

   1. 对于 **IAM 实例配置文件**，可以使用两个选项来为 RDS Custom for SQL Server 数据库实例选择实例配置文件。

      1. 选择**创建新的实例配置文件**并提供实例配置文件的名称后缀。有关更多信息，请参阅 [使用 AWS 管理控制台自动创建实例配置文件](custom-setup-sqlserver.md#custom-setup-sqlserver.instanceProfileCreation)。

      1. 选择现有的实例配置文件。从下拉列表中，选择以 `AWSRDSCustom` 开头的实例配置文件。

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

      RDS Custom 需要 AWS KMS 密钥。有关更多信息，请参阅 [请确保您有对称的加密 AWS KMS 密钥](custom-setup-sqlserver.md#custom-setup-sqlserver.cmk)。

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

   **Backup retention period**（备份保留期）受支持，但您不能选择 **0 天**。

1. 选择 **Create database**（创建数据库）。

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

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

   要以主用户身份连接到数据库实例，请使用显示的用户名和密码。
**重要**  
您无法再次查看主用户密码。如果您不记录它，您可能需要更改它。要在 RDS Custom 数据库实例可用后更改主用户密码，请修改数据库实例。有关修改数据库实例的更多信息，请参阅[管理 Amazon RDS Custom for SQL Server 数据库实例](custom-managing-sqlserver.md)。

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-sqlserver.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 SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md)）
+ `--engine`（`custom-sqlserver-ee`、`custom-sqlserver-se` 或 `custom-sqlserver-web`）
+ `--kms-key-id`
+ `--custom-iam-instance-profile`

以下示例将创建名为 `my-custom-instance` 的 RDS Custom for SQL Server 数据库实例。备份保留期为 3 天。

**注意**  
要从自定义引擎版本（CEV）创建数据库实例，请为 `--engine-version` 参数提供现有 CEV 名称。例如，`--engine-version 15.00.4249.2.my_cevtest`

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

```
 1. aws rds create-db-instance \
 2.     --engine custom-sqlserver-ee \
 3.     --engine-version 15.00.4073.23.v1 \
 4.     --db-instance-identifier my-custom-instance \
 5.     --db-instance-class db.m5.xlarge \
 6.     --allocated-storage 20 \
 7.     --db-subnet-group mydbsubnetgroup \
 8.     --master-username myuser \
 9.     --master-user-password mypassword \
10.     --backup-retention-period 3 \
11.     --no-multi-az \
12.     --port 8200 \
13.     --kms-key-id mykmskey \
14.     --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance
```
对于：Windows  

```
 1. aws rds create-db-instance ^
 2.     --engine custom-sqlserver-ee ^
 3.     --engine-version 15.00.4073.23.v1 ^
 4.     --db-instance-identifier my-custom-instance ^
 5.     --db-instance-class db.m5.xlarge ^
 6.     --allocated-storage 20 ^
 7.     --db-subnet-group mydbsubnetgroup ^
 8.     --master-username myuser ^
 9.     --master-user-password mypassword ^
10.     --backup-retention-period 3 ^
11.     --no-multi-az ^
12.     --port 8200 ^
13.     --kms-key-id mykmskey ^
14.     --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance
```
作为安全最佳实践，请指定除此处所示提示以外的密码。

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

```
1. aws rds describe-db-instances --db-instance-identifier my-custom-instance
```

以下部分输出显示了引擎、参数组和其他信息。

```
 1. {
 2.     "DBInstances": [
 3.         {
 4.             "PendingModifiedValues": {},
 5.             "Engine": "custom-sqlserver-ee",
 6.             "MultiAZ": false,
 7.             "DBSecurityGroups": [],
 8.             "DBParameterGroups": [
 9.                 {
10.                     "DBParameterGroupName": "default.custom-sqlserver-ee-15",
11.                     "ParameterApplyStatus": "in-sync"
12.                 }
13.             ],
14.             "AutomationMode": "full",
15.             "DBInstanceIdentifier": "my-custom-instance",
16.             "TagList": []
17.         }
18.     ]
19. }
```

# RDS Custom 服务相关角色
<a name="custom-creating-sqlserver.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 SQL Server 数据库实例时，您可能会收到以下错误：The service-linked role is in the process of being created.（服务相关角色正在创建过程中）。请稍后重试。如果您这样做，请等待几分钟，然后重新尝试创建数据库实例。

# 使用 AWS Systems Manager 连接到 RDS Custom 数据库实例
<a name="custom-creating-sqlserver.ssm"></a>

创建 RDS Custom 数据库实例后，您可以使用 AWS Systems Manager 会话管理器。会话管理器是一项 Systems Manager 功能，可让您通过基于浏览器的 shell 或通过 AWS CLI 管理 Amazon EC2 实例。有关更多信息，请参阅 [AWS Systems Manager 会话管理器](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)。

## 控制台
<a name="custom-creating-sqlserver.ssm.CON"></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-creating-sqlserver.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，请使用 `[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]$
```

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

创建 RDS Custom 数据库实例后，您可以使用 RDP 客户端连接到此实例。该过程与连接到 Amazon EC2 实例的过程相同。有关更多信息，请参阅[连接到 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)。

要连接到数据库实例，您需要与该实例关联的密钥对。RDS Custom 会为您创建密钥对。密钥对名称使用前缀 `do-not-delete-rds-custom-DBInstanceIdentifier`。AWS Secrets Manager 将私有密钥存储为密钥。

完成以下步骤中的任务：

1. [配置您的数据库实例以允许 RDP 连接](#custom-creating-sqlserver.rdp.port).

1. [检索您的私有密钥](#custom-creating-sqlserver.rdp.key).

1. [使用 RDP 实用工具连接到 EC2 实例](#custom-creating-sqlserver.rdp.connect).

## 配置您的数据库实例以允许 RDP 连接
<a name="custom-creating-sqlserver.rdp.port"></a>

要允许 RDP 连接，请配置 VPC 安全组并在主机上设置防火墙规则。

### 配置您的 VPC 安全组
<a name="custom-creating-sqlserver.rdp.port.vpc"></a>

请确保与您数据库实例关联的 VPC 安全组允许在端口 3389 上进行传输控制协议 (TCP) 的入站连接。要了解如何配置 VPC 安全组，请参阅 [配置您的 VPC 安全组](custom-setup-sqlserver.md#custom-setup-sqlserver.vpc.sg)。

### 在主机上设置防火墙规则
<a name="custom-creating-sqlserver.rdp.port.firewall"></a>

要允许端口 3389 上的 TCP 入站连接，请在主机上设置防火墙规则。以下示例显示如何执行此操作。

建议使用特定的 `-Profile` 值：`Public`、`Private` 或者 `Domain`。使用 `Any` 指这三个值。您还可以指定用逗号分隔的一组值。有关设置防火墙规则的更多信息，请参阅 Microsoft 文档中的 [Set-NetFirewallRule](https://docs.microsoft.com/en-us/powershell/module/netsecurity/set-netfirewallrule?view=windowsserver2019-ps)。

**使用 Systems Manager 会话管理器设置防火墙规则**

1. 连接到会话管理器，如 [使用 AWS Systems Manager 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.ssm.md) 中所示。

1. 运行以下命令。

   ```
   Set-NetFirewallRule -DisplayName "Remote Desktop - User Mode (TCP-In)" -Direction Inbound -LocalAddress Any -Profile Any
   ```

**使用 Systems Manager CLI 命令设置防火墙规则**

1. 使用以下命令在主机上打开 RDP。

   ```
   OPEN_RDP_COMMAND_ID=$(aws ssm send-command --region $AWS_REGION \
       --instance-ids $RDS_CUSTOM_INSTANCE_EC2_ID \
       --document-name "AWS-RunPowerShellScript" \
       --parameters '{"commands":["Set-NetFirewallRule -DisplayName \"Remote Desktop - User Mode (TCP-In)\" -Direction Inbound -LocalAddress Any -Profile Any"]}' \
       --comment "Open RDP port" | jq -r ".Command.CommandId")
   ```

1. 使用输出中返回的命令 ID 获取上一个命令的状态。要使用以下查询返回命令 ID，请确保安装了 jq 插件。

   ```
   aws ssm list-commands \
       --region $AWS_REGION \
       --command-id $OPEN_RDP_COMMAND_ID
   ```

## 检索您的私有密钥
<a name="custom-creating-sqlserver.rdp.key"></a>

使用 AWS 管理控制台 或 AWS CLI 检索您的私有密钥。

### 控制台
<a name="custom-creating-sqlserver.rdp.key.CON"></a>

**要检索私有密钥**

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

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

1. 选择**配置**选项卡。

1. 请注意您的数据库实例的 **DB instance ID**（数据库实例 ID），例如 `my-custom-instance`。

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

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

1. 查找 EC2 实例的名称，然后选择与其关联的实例 ID。

   在此示例中，实例 ID 为 `i-abcdefghijklm01234`。

1. 在 **Details**（详细信息）中，查找 **Key pair name**（密钥对名称）。密钥对名称包括数据库标识符。在此示例中，密钥对名称为 `do-not-delete-rds-custom-my-custom-instance-0d726c`。

1. 在实例摘要中，查找 **Public IPv4 DNS**（公有 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 (检索密钥值)**。

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

**要检索私有密钥**

1. 通过调用 `aws rds describe-db-instances` 命令获取您的 RDS Custom 数据库实例的列表。

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

1. 例如，从示例输出中选择数据库实例标识符，例如 `do-not-delete-rds-custom-my-custom-instance`。

1. 通过调用 `aws ec2 describe-instances` 命令查找您的数据库实例的 EC2 实例 ID。以下示例使用 EC2 实例名称来描述数据库实例。

   ```
   aws ec2 describe-instances \
       --filters "Name=tag:Name,Values=do-not-delete-rds-custom-my-custom-instance" \
       --output text \
       --query 'Reservations[*].Instances[*].InstanceId'
   ```

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

   ```
   i-abcdefghijklm01234
   ```

1. 通过指定 EC2 实例 ID 查找密钥名称，如以下示例所示。

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

   以下示例输出显示了使用前缀 `do-not-delete-rds-custom-DBInstanceIdentifier` 的密钥名称。

   ```
   do-not-delete-rds-custom-my-custom-instance-0d726c
   ```

## 使用 RDP 实用工具连接到 EC2 实例
<a name="custom-creating-sqlserver.rdp.connect"></a>

执行《Amazon EC2 用户指南》**中的[使用 RDP 连接到 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html#connect-rdp)中的过程。此过程假定您创建了包含您的私有密钥的 .pem 文件。

# 管理 Amazon RDS Custom for SQL Server 数据库实例
<a name="custom-managing-sqlserver"></a>

Amazon RDS Custom for SQL Server 支持 Amazon RDS 数据库实例的常见管理任务子集。在下文中，您可以找到使用 AWS 管理控制台和 AWS CLI 的受支持的 RDS Custom for SQL Server 管理任务的说明。

**Topics**
+ [暂停和恢复 RDS Custom 自动化](custom-managing-sqlserver.pausing.md)
+ [修改 RDS Custom for SQL Server 数据库实例](custom-managing.modify-sqlserver.md)
+ [修改 RDS Custom for SQL Server 数据库实例的存储](custom-managing-sqlserver.storage-modify.md)
+ [为 RDS Custom for SQL Server 资源添加标签](custom-managing-sqlserver.tagging.md)
+ [删除 RDS Custom for SQL Server 数据库实例](#custom-managing-sqlserver.deleting)
+ [启动和停止 RDS Custom for SQL Server 数据库实例](custom-managing-sqlserver.startstop.md)

# 暂停和恢复 RDS Custom 自动化
<a name="custom-managing-sqlserver.pausing"></a>

RDS Custom 自动为 RDS Custom for SQL Server 数据库实例提供监控和实例恢复功能。如果您需要自定义实例，请执行以下操作：

1. 在指定的时间内暂停 RDS Custom 自动化。暂停可确保您的自定义项不会干扰 RDS Custom 自动化。

1. 根据需要自定义 RDS Custom for SQL Server 数据库实例。

1. 请执行以下任一操作：
   + 手动恢复自动化。
   + 等待暂停期结束。在这种情况下，RDS Custom 会自动恢复监控和实例恢复。

**重要**  
修改 RDS Custom for SQL Server 数据库实例时，暂停和恢复自动化是唯一受支持的自动化任务。

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

**要暂停或恢复 RDS Custom 自动化**

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

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

1. 选择**修改**。将显示**修改数据库实例**页面。

1. 对于 **RDS Custom automation mode**（RDS Custom 自动化模式），请选择以下选项之一：
   + **Paused**（已暂停）将暂停 RDS Custom 数据库实例的监控和实例恢复。为 **Automation mode duration**（自动化模式持续时间）输入您想要的暂停持续时间。最小值为 60 分钟（默认值）。最大值为 1440 分钟。
   + **Full automation**（完全自动化）将恢复自动化。

1. 请选择 **Continue**（继续），以查看修改摘要。

   将显示一条消息，表示 RDS Custom 将立即应用更改。

1. 如果更改正确无误，请选择 **Modify DB Instance**（修改数据库实例）。也可以选择 **Back (返回)** 编辑您的更改，或选择 **Cancel (取消)** 取消更改。

   在 RDS 控制台上，将显示修改的详细信息。如果您暂停了自动化，RDS Custom 数据库实例的 **Status**（状态）将指示 **Automation paused**（自动化已暂停）。

1. （可选）在导航窗格中，选择 **Databases (数据库)**，然后选择 RDS Custom 数据库实例。

   在 **Summary**（摘要）窗格中，**RDS Custom automation mode**（RDS Custom 自动化模式）表示自动化状态。如果自动化已暂停，则值为 **Paused（已暂停）。自动化将在 *num* 分钟内恢复**。

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

要暂停或恢复 RDS Custom 自动化，请使用 `modify-db-instance` AWS CLI 命令。使用必需的参数 `--db-instance-identifier` 识别数据库实例。使用以下参数控制自动化模式：
+ `--automation-mode` 指定数据库实例的暂停状态。有效值为 `all-paused`，它将暂停自动化，以及 `full`，它将恢复自动化。
+ `--resume-full-automation-mode-minutes` 指定暂停的持续时间。默认值为 60 分钟。

**注意**  
无论您是指定 `--no-apply-immediately` 还是 `--apply-immediately`，RDS Custom 都会尽快地异步应用修改。

在命令响应中，`ResumeFullAutomationModeTime` 以 UTC 时间戳表示恢复时间。当自动化模式为 `all-paused` 时，您可以使用 `modify-db-instance` 恢复自动化模式或延长暂停时间。不支持其他 `modify-db-instance` 选项。

以下示例将 `my-custom-instance` 的自动化暂停 90 分钟。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --automation-mode all-paused \
    --resume-full-automation-mode-minutes 90
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --automation-mode all-paused ^
    --resume-full-automation-mode-minutes 90
```

以下示例将暂停持续时间再延长 30 分钟。在 `ResumeFullAutomationModeTime` 中显示的原始时间中增加 30 分钟。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --automation-mode all-paused \
    --resume-full-automation-mode-minutes 30
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --automation-mode all-paused ^
    --resume-full-automation-mode-minutes 30
```

以下示例恢复 `my-custom-instance` 的完全自动化。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --automation-mode full \
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --automation-mode full
```
在以下部分示例输出中，待处理 `AutomationMode` 值为 `full`。  

```
{
    "DBInstance": {
        "PubliclyAccessible": true,
        "MasterUsername": "admin",
        "MonitoringInterval": 0,
        "LicenseModel": "bring-your-own-license",
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "0123456789abcdefg"
            }
        ],
        "InstanceCreateTime": "2020-11-07T19:50:06.193Z",
        "CopyTagsToSnapshot": false,
        "OptionGroupMemberships": [
            {
                "Status": "in-sync",
                "OptionGroupName": "default:custom-oracle-ee-19"
            }
        ],
        "PendingModifiedValues": {
            "AutomationMode": "full"
        },
        "Engine": "custom-oracle-ee",
        "MultiAZ": false,
        "DBSecurityGroups": [],
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "default.custom-oracle-ee-19",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        ...
        "ReadReplicaDBInstanceIdentifiers": [],
        "AllocatedStorage": 250,
        "DBInstanceArn": "arn:aws:rds:us-west-2:012345678912:db:my-custom-instance",
        "BackupRetentionPeriod": 3,
        "DBName": "ORCL",
        "PreferredMaintenanceWindow": "fri:10:56-fri:11:26",
        "Endpoint": {
            "HostedZoneId": "ABCDEFGHIJKLMNO",
            "Port": 8200,
            "Address": "my-custom-instance.abcdefghijk.us-west-2.rds.amazonaws.com"
        },
        "DBInstanceStatus": "automation-paused",
        "IAMDatabaseAuthenticationEnabled": false,
        "AutomationMode": "all-paused",
        "EngineVersion": "19.my_cev1",
        "DeletionProtection": false,
        "AvailabilityZone": "us-west-2a",
        "DomainMemberships": [],
        "StorageType": "gp2",
        "DbiResourceId": "db-ABCDEFGHIJKLMNOPQRSTUVW",
        "ResumeFullAutomationModeTime": "2020-11-07T20:56:50.565Z",
        "KmsKeyId": "arn:aws:kms:us-west-2:012345678912:key/aa111a11-111a-11a1-1a11-1111a11a1a1a",
        "StorageEncrypted": false,
        "AssociatedRoles": [],
        "DBInstanceClass": "db.m5.xlarge",
        "DbInstancePort": 0,
        "DBInstanceIdentifier": "my-custom-instance",
        "TagList": []
    }
```

# 修改 RDS Custom for SQL Server 数据库实例
<a name="custom-managing.modify-sqlserver"></a>

修改 RDS Custom for SQL Server 数据库实例的过程与为 Amazon RDS 执行此操作类似，但您可以进行的更改仅限于以下内容：
+ 更改数据库实例类
+ 更改备份保留期和备份时段
+ 更改维护时段
+ 当新版本可用时升级数据库引擎版本
+ 更改分配的存储、预调配 IOPS 和存储类型
+ 允许和删除多可用区部署

以下限制适用于修改 RDS Custom for SQL Server 数据库实例：
+ 不支持自定义数据库选项和参数组。
+ 手动附加到 RDS Custom 数据库实例的任何存储卷都在支持外围之外。

  有关更多信息，请参阅 [RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。

## 控制台
<a name="custom-managing.modify-sqlserver.CON"></a>

**要修改 RDS Custom for SQL Server 数据库实例**

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

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

1. 选择要修改的数据库实例。

1. 选择**修改**。

1. 根据需要进行以下更改：

   1. 对于**数据库引擎版本**，选择新版本。

   1. 更改 **DB instance class**（数据库实例类）的值。有关支持的类，请参阅[RDS Custom for SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md)

   1. 更改 **Backup retention period**（备份保留期）的值。

   1. 对于 **Backup window**（备份时段），设置 **Start time**（开始时间）和 **Duration**（持续时间）的值。

   1. 对于 **DB instance maintenance window**（数据库实例维护时段），设置 **Start day**（开始日）、**Start time**（开始时间）和 **Duration**（持续时间）的值。

1. 选择**继续**。

1. 选择 **Apply immediately**（立即应用）或 **Apply during the next scheduled maintenance window**（在下一个计划的维护时段内应用）。

1. 选择**修改数据库实例**。

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

要修改 RDS Custom for SQL Server 数据库实例，请使用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI 命令。根据需要设置以下参数：
+ `--db-instance-class` – 有关支持的类，请参阅[RDS Custom for SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md)
+ `--engine-version` – 要升级到的数据库引擎的版本号。
+ `--backup-retention-period` – 保留自动备份的持续时间，为 0-35 天。
+ `--preferred-backup-window` – 创建自动备份的每日时间范围。
+ `--preferred-maintenance-window` – 可能进行系统维护的每周时间范围（按世界协调时间计算）。
+ `--apply-immediately` – 使用 `--apply-immediately` 可立即应用存储更改。

  或使用 `--no-apply-immediately`（默认设置）以在下一个维护时段内应用更改。

# 修改 RDS Custom for SQL Server 数据库实例的存储
<a name="custom-managing-sqlserver.storage-modify"></a>

修改 RDS Custom for SQL Server 数据库实例的存储与修改 Amazon RDS 数据库实例的存储类似，但您只能执行以下操作：
+ 增加分配的存储大小。
+ 更改存储类型。您可以使用可用的存储类型，如通用型或预调配 IOPS。gp3、io1 和 io2 Block Express 存储类型支持预调配 IOPS。
+ 如果您使用的是支持预调配 IOPS 的卷类型，则更改预调配 IOPS。

以下限制适用于修改 RDS Custom for SQL Server 数据库实例的存储：
+ RDS Custom for SQL Server 的最小分配存储大小为 20 GiB。io1、gp2 和 gp3 的最大存储限制为 16 TiB，而 io2 支持 64 TiB。
+ 与 Amazon RDS 一样，您无法减少分配的存储。这是 Amazon Elastic Block Store (Amazon EBS) 卷的限制。有关更多信息，请参阅 [使用 Amazon RDS 数据库实例的存储](USER_PIOPS.StorageTypes.md)。
+ RDS Custom for SQL Server 数据库实例不支持存储自动扩缩。
+ 您手动连接到 RDS Custom 数据库实例的任何存储卷都不会考虑进行存储扩缩。仅考虑对 RDS 提供的默认数据卷（即 D 驱动器）进行存储扩缩。

  有关更多信息，请参阅 [RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。
+ 扩展存储通常不会导致数据库实例的任何中断或性能下降。在修改数据库实例的存储大小后，数据库实例的状态为 **storage-optimization**。
+ 存储优化可能耗时数小时。六（6）小时后或在实例上完成存储优化后，您才能进行进一步的存储修改。有关更多信息，请参阅 [使用 Amazon RDS 数据库实例的存储](USER_PIOPS.StorageTypes.md)。

有关存储的更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。

有关存储修改的一般信息，请参阅[使用 Amazon RDS 数据库实例的存储](USER_PIOPS.StorageTypes.md)。

**重要**  
请勿使用 Amazon EC2 控制台、Amazon EBS 控制台或 API 修改 RDS Custom for SQL Server 数据库实例的存储。在 Amazon RDS 控制台或 API 之外直接修改存储会使数据库处于 `unsupported-configuration` 状态。  
当您使用 Amazon EC2 或 Amazon EBS 直接更改存储时，Amazon RDS 无法跟踪或管理数据库实例状态。这可能会导致：  
高可用性失效转移机制无法正常运行
数据库复制设置中断
冗余功能失败
只通过 Amazon RDS 控制台或 API 修改存储，以使数据库保持在受支持的状态。有关恢复步骤，请参阅[修复 RDS Custom for SQL Server 中不支持的配置](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.fix-unsupported)。

## 控制台
<a name="custom-managing.storage-modify.CON"></a>

**修改 RDS Custom for SQL Server 数据库实例的存储**

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

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

1. 选择要修改的数据库实例。

1. 选择**修改**。

1. 根据需要进行以下更改：

   1. 为 **Allocated Storage (分配的存储)** 输入新值。它必须大于当前值，且范围从 20GiB 到 16TiB。

   1. 更改 **Storage type**（存储类型）的值。您可以从可用的通用型或预调配 IOPS 存储类型中进行选择。gp3、io1 和 io2 Block Express 存储类型支持预调配 IOPS。

   1. 如果您指定支持预调配 IOPS 的卷类型，则可以定义**预调配 IOPS** 值。

1. 选择**继续**。

1. 选择 **Apply immediately**（立即应用）或 **Apply during the next scheduled maintenance window**（在下一个计划的维护时段内应用）。

1. 选择**修改数据库实例**。

## AWS CLI
<a name="custom-managing-sqlserver.storage-modify.CLI"></a>

要修改 RDS Custom for SQL Server 数据库实例的存储，请使用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI 命令。根据需要设置以下参数：
+ `--allocated-storage` – 要为数据库实例分配的存储量（以 GiB 为单位）。它必须大于当前值，并且范围从 20 到 16,384GiB。
+ `--storage-type` – 存储类型，例如 gp2、gp3、io1 或 io2。
+ `--iops` – 数据库实例的预调配 IOPS。您只能为支持预调配 IOPS 的存储类型（gp3、io1 和 io2）指定此项。
+ `--apply-immediately` – 使用 `--apply-immediately` 可立即应用存储更改。

  或使用 `--no-apply-immediately`（默认设置）以在下一个维护时段内应用更改。

以下示例将 my-custom-instance 的存储大小更改为 200GiB，将存储类型更改为 io1，将预调配 IOPS 更改为 3000。

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

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --storage-type io1 \
    --iops 3000 \
    --allocated-storage 200 \
    --apply-immediately
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --storage-type io1 ^
    --iops 3000 ^
    --allocated-storage 200 ^
    --apply-immediately
```

# 为 RDS Custom for SQL Server 资源添加标签
<a name="custom-managing-sqlserver.tagging"></a>

您可以将 RDS Custom 资源与 Amazon RDS 资源一样标记，但有一些重要的区别：
+ 不要创建或修改 RDS Custom 自动化所需的 `AWSRDSCustom` 标签。如果您这样做，可能会破坏自动化。
+ `Name` 标签将添加到 RDS Custom 资源，前缀为 `do-not-delete-rds-custom`。任何客户传递的键值都将被覆盖。
+ 在创建过程中添加到 RDS Custom 数据库实例的标签将传播到所有其他相关 RDS Custom 资源。
+ 当您在创建数据库实例后将标签添加到 RDS Custom 资源时，标签不会传播。

有关资源标记的一般信息，请参阅[为 Amazon RDS 资源添加标签](USER_Tagging.md)。

## 删除 RDS Custom for SQL Server 数据库实例
<a name="custom-managing-sqlserver.deleting"></a>

要删除 RDS Custom for SQL Server 数据库实例，请执行以下操作：
+ 提供数据库实例的名称。
+ 选择或清除拍摄数据库实例的最终数据库快照的选项。
+ 选择或清除保留自动备份的选项。

您可以使用控制台或 CLI 删除 RDS Custom for SQL Server 数据库实例。删除数据库实例所需的时间可能会有所不同，具体取决于备份保留期（也即，要删除的备份数）、删除的数据量以及是否拍摄最终快照。

**警告**  
删除 RDS Custom for SQL Server 数据库实例将永久删除 EC2 实例和关联的 Amazon EBS 卷。任何时候都不要终止或删除这些资源，否则，删除和最终快照创建可能会失败。

**注意**  
如果数据库实例具有 `creating`、`failed`、`incompatible-create`、`incompatible-restore` 或 `incompatible-network` 状态，则无法为其创建最终数据库快照。有关更多信息，请参阅 [查看 Amazon RDS数据库实例状态](accessing-monitoring.md#Overview.DBInstance.Status)。

**重要**  
当您选择拍摄最终快照时，我们建议您当正在删除数据库实例时避免向数据库实例写入数据。启动数据库实例删除后，不能保证数据更改会被最终快照捕获。

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

**要删除 RDS Custom 数据库实例**

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

1. 在导航窗格中，选择 **Databases**（数据库），然后选择要删除的 RDS Custom for SQL Server 数据库实例。RDS Custom for SQL Server 数据库实例显示角色 **Instance (RDS Custom for SQL Server)** [实例（RDS Custom for SQL Server）]。

1. 对于**操作**，选择**删除**。

1. 要拍摄最终快照，请选择 **Create final snapshot**（创建最终快照），并为 **Final snapshot name**（最终快照名称）提供名称。

1. 要保留自动备份，请选择 **Retain automated backups (保留自动备份)**。

1. 在框中输入 **delete me**。

1. 选择**删除**。

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

您可以通过使用 [delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html) AWS CLI 命令删除 RDS Custom for SQL Server 数据库实例。使用必需的参数 `--db-instance-identifier` 识别数据库实例。其余参数与 Amazon RDS 数据库实例的参数相同。

以下示例删除名为 `my-custom-instance` 的 RDS Custom for SQL Server 数据库实例，拍摄最终快照，并保留自动备份。

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

```
aws rds delete-db-instance \
    --db-instance-identifier my-custom-instance \
    --no-skip-final-snapshot \
    --final-db-snapshot-identifier my-custom-instance-final-snapshot \
    --no-delete-automated-backups
```
对于 Windows：  

```
aws rds delete-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --no-skip-final-snapshot ^
    --final-db-snapshot-identifier my-custom-instance-final-snapshot ^
    --no-delete-automated-backups
```

要拍摄最终快照，需要且必须指定 `--final-db-snapshot-identifier` 选项。

要跳过最终快照，请在命令中指定 `--skip-final-snapshot` 选项而不是 `--no-skip-final-snapshot` 和 `--final-db-snapshot-identifier` 选项。

要删除自动备份，请在命令中指定 `--delete-automated-backups` 选项而不是 `--no-delete-automated-backups` 选项。

# 启动和停止 RDS Custom for SQL Server 数据库实例
<a name="custom-managing-sqlserver.startstop"></a>

您可以启动和停止 RDS Custom for SQL Server 数据库实例。RDS for SQL Server 数据库实例的一般要求和限制同样适用于停止和启动 RDS Custom for SQL Server 数据库实例。有关更多信息，请参阅 [暂时停止 Amazon RDS 数据库实例](USER_StopInstance.md)。

以下注意事项也适用于启动和停止 RDS Custom for SQL Server 数据库实例：
+ 当数据库实例为 `STOPPED` 时，不支持修改 RDS Custom for SQL Server 数据库实例的 EC2 实例属性。
+ 只有在将 RDS Custom for SQL Server 数据库实例配置为单可用区时，您才能停止和启动该数据库实例。您无法停止多可用区配置中的 RDS Custom for SQL Server 数据库实例。
+ 当您停止 RDS Custom for SQL Server 数据库实例时，将创建 `SYSTEM` 快照。当您再次启动 RDS Custom for SQL Server 数据库实例时，将自动删除此快照。
+ 如果您在 RDS Custom for SQL Server 数据库实例停止时删除 EC2 实例，那么当您再次启动 RDS Custom for SQL Server 数据库实例时，`C:` 驱动器将被替换。
+ 当您停止 RDS custom for SQL Server 数据库实例时，只要您不修改实例类型，`C:\` 驱动器、主机名和您的自定义配置就会持久存在。
+ 以下操作将导致 RDS Custom 将数据库实例放置在支持外围之外，并且您仍将收取数据库实例小时数的费用：
  + 在 Amazon RDS 停止时启动底层 EC2 实例。要解决这个问题，您可以调用 `start-db-instance` Amazon RDS API，或者停止 EC2 以便 RDS Custom 实例返回到 `STOPPED`。
  + RDS Custom for SQL Server 数据库实例为 `ACTIVE` 时停止底层 EC2 实例。

有关停止和启动数据库实例的更多详细信息，请参阅[暂时停止 Amazon RDS 数据库实例](USER_StopInstance.md)和[启动之前停止的 Amazon RDS 数据库实例](USER_StartInstance.md)。

# 将 Microsoft Active Directory 用于 RDS Custom for SQL Server
<a name="custom-sqlserver-WinAuth"></a>

RDS Custom for SQL Server 允许将您的实例加入自托管式 Active Directory（AD）或 AWS Managed Microsoft AD。无论您的 AD 托管在哪里，例如本地数据中心、Amazon EC2 或任何其他云服务提供商，都是如此。

要对用户和服务进行身份验证，您可以在 RDS Custom for SQL Server 数据库实例上使用 NTLM 或 Kerberos 身份验证，而无需使用中间域和林信任。当用户尝试使用自加入的 Active Directory 在您的 RDS Custom for SQL Server 数据库实例上进行身份验证时，身份验证请求将转发到您指定的自托管式 AD 或 AWS Managed Microsoft AD。

在以下各节中，您可以找到有关将自托管式 Active Directory 和 AWS Managed Active Directory 用于 RDS Custom for SQL Server 的信息。

**Topics**
+ [区域和版本可用性](#custom-sqlserver-WinAuth.Regions)
+ [配置自托管式 AD 或本地 AD](custom-sqlserver-WinAuth.config-Self-Managed.md)
+ [使用 Directory Service 配置 Microsoft Active Directory](custom-sqlserver-WinAuth.config-ADS.md)
+ [网络配置端口规则](custom-sqlserver-WinAuth.NWConfigPorts.md)
+ [网络验证](custom-sqlserver-WinAuth.NWValidation.md)
+ [为 RDS Custom for SQL Server 实例设置 Windows 身份验证](custom-sqlserver-WinAuth.settingUp.md)
+ [在域中管理数据库实例](custom-sqlserver-WinAuth.ManagingDBI.md)
+ [了解域成员资格](custom-sqlserver-WinAuth.Understanding.md)
+ [Active Directory 故障排除](custom-sqlserver-WinAuth.Troubleshoot.md)

## 区域和版本可用性
<a name="custom-sqlserver-WinAuth.Regions"></a>

RDS Custom for SQL Server 支持自托管式 AD 和 AWS Managed Microsoft AD，在所有支持 RDS Custom for SQL Server 的区域中使用 NTLM 或 Kerberos。有关更多信息，请参阅 [支持 RDS Custom 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md)。

# 配置自托管式 AD 或本地 AD
<a name="custom-sqlserver-WinAuth.config-Self-Managed"></a>

要将本地或自托管式 Microsoft AD 加入 RDS Custom for SQL Server 数据库实例，您的活动域必须按以下方式进行配置：
+ 在自托管式或本地 AD 中定义与 RDS Custom for SQL Server 数据库实例关联的 VPC 中的子网。确认您的 VPC 中的子网与 AD 站点中的子网之间没有任何冲突。
+ 您 AD 域控制器的域功能级别为 Windows Server 2008 R2 或更高版本。
+ 您的 AD 域名不能采用单标签域（SLD）格式。RDS Custom for SQL Server 不支持 SLD 域。
+ AD 的完全限定域名（FQDN）不能超过 47 个字符。

## 配置您的网络连接
<a name="custom-sqlserver-WinAuth.config-Self-Managed.network"></a>

按以下方式配置您的自托管式或本地 AD 网络连接：
+ 在 Amazon VPC（其中运行 RDS Custom for SQL Server 实例）和您的 AD 之间设置连接。使用 Direct Connect、Site-to-Site VPN AWS Transit Gateway 和 VPC 对等连接。
+ RDS Custom for SQL Server 安全组和网络 ACL 允许端口上的流量流向您的自托管式或本地 AD。有关更多信息，请参阅 [网络配置端口规则](custom-sqlserver-WinAuth.NWConfigPorts.md)。  
![\[Microsoft SQL Server Windows 身份验证目录\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/custom-sqs-SM-NC.png)

## 配置 DNS 解析
<a name="custom-sqlserver-WinAuth.config-Self-Managed.DNS"></a>

设置以下要求以使用自托管式或本地 AD 配置 DNS 解析：
+ 在 VPC 内配置 DNS 解析，以解析自托管式 Active Directory 的完全限定域名（FQDN）。FQDN 的一个例子是 `corp.example.local`。要配置 DNS 解析，请将 VPC DNS 解析程序配置为使用 Amazon Route 53 出站端点和解析程序规则转发对某些域的查询。有关更多信息，请参阅[配置 Route 53 Resolver 出站端点以解析 DNS 记录](https://repost.aws/knowledge-center/route53-resolve-with-outbound-endpoint)。
+ 对于同时利用 VPC 和本地资源的工作负载，您必须解析本地托管的 DNS 记录。本地资源可能需要解析托管在 AWS 上的名称。

  要创建混合云设置，请使用解析程序端点和条件转发规则解析本地资源与自定义 VPC 之间的 DNS 查询。有关更多信息，请参阅《Amazon Route 53 开发人员指南》**中的[解析 VPC 与网络之间的 DNS 查询](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-overview-DSN-queries-to-vpc.html)。

**重要**  
修改 RDS Custom for SQL Server 上网络接口的 DNS 解析程序设置会导致启用了 DNS 的 VPC 端点不再正常运行。无法访问互联网的私有子网中的实例需要启用了 DNS 的 VPC 端点。

# 使用 Directory Service 配置 Microsoft Active Directory
<a name="custom-sqlserver-WinAuth.config-ADS"></a>

AWS Managed Microsoft AD 在 AWS 中创建完全托管的 Microsoft Active Directory，由 Windows Server 2019 提供支持并在 2012 R2 林和域功能级别运行。Directory Service 在 Amazon VPC 的不同子网中创建域控制器，使您的目录即使在出现故障时也具有很高的可用性。

要使用 AWS Managed Microsoft AD 创建目录，请参阅《AWS Directory Service 管理指南》**中的 [AWS Managed Microsoft AD 入门](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started.html)。

## 配置您的网络连接
<a name="custom-sqlserver-WinAuth.config-ADS.network"></a>

### 在目录和数据库实例之间启用跨 VPC 流量
<a name="custom-sqlserver-WinAuth.config-ADS.network.x-vpc"></a>

要在同一 VPC 中查找目录和数据库实例，请跳过该步骤，然后转到[网络配置端口规则](custom-sqlserver-WinAuth.NWConfigPorts.md)中的下一步。

要在不同的 VPC 中查找目录和数据库实例，请使用 VPC 对等连接或 AWS Transit Gateway 配置跨 VPC 流量。有关使用 VPC 对等连接的更多信息，请参阅《Amazon VPC 对等连接指南》**中的[什么是 VPC 对等连接？](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)和《Amazon VPC Transit Gateways》**中的[什么是 AWS Transit Gateway？](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)。

**使用 VPC 对等连接启用跨 VPC 流量**

1. 设置适合的 VPC 路由规则，以便确保网络流量可以双向流动。

1. 允许数据库实例的安全组从目录的安全组接收入站流量。有关更多信息，请参阅 [网络配置端口规则](custom-sqlserver-WinAuth.NWConfigPorts.md)。

1. 网络访问控制列表（ACL）不得阻止流量。

如果该目录由不同的 AWS 账户拥有，则您必须共享该目录。要与 AWS 账户共享 RDS Custom for SQL Server 实例所在的目录，请按照《AWS Directory Service 管理指南》**中的[教程：共享 AWS Managed Microsoft AD 以便无缝地加入 EC2 域](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html)操作。

**在 AWS 账户之间共享目录**

1. 使用数据库实例的账户登录 Directory Service 控制台，并检查在处理之前域是否具有 `SHARED` 状态。

1. 使用数据库实例的账户登录 Directory Service 控制台后，记下**目录 ID** 值。您可以使用此 ID 将数据库实例加入域。

## 配置 DNS 解析
<a name="custom-sqlserver-WinAuth.config-ADS.DNS"></a>

当您使用 AWS Managed Microsoft AD 创建目录时，Directory Service 将代表您创建两个域控制器并添加 DNS 服务。

如果您已有 AWS Managed Microsoft AD 或计划在 VPC 中启动一个（除 RDS Custom for SQL Server 数据库实例之外），请将 VPC DNS 解析程序配置为使用 Route 53 出站和解析程序规则转发对某些域的查询，请参阅[配置 Route 53 Resolver 出站端点以解析 DNS 记录](https://repost.aws/knowledge-center/route53-resolve-with-outbound-endpoint)。

# 网络配置端口规则
<a name="custom-sqlserver-WinAuth.NWConfigPorts"></a>

确保您满足以下网络配置：
+ 在您要在其中创建 RDS Custom for SQL Server 数据库实例的 Amazon VPC 与自托管式 Active Directory 或 AWS Managed Microsoft AD 之间配置了连接。对于自托管式 Active Directory，使用 AWS Direct Connect、AWS VPN、VPC 对等连接或 AWS Transit Gateway 来设置连接。对于 AWS Managed Microsoft AD，使用 VPC 对等连接来设置连接。
+ 确保要在其中创建 RDS Custom for SQL Server 数据库实例的子网的安全组和 VPC 网络 ACL 在端口上允许有下图所示方向的流量。  
![\[Microsoft Active Directory 网络配置端口规则。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/custom_sqlserver_ActiveDirectory_Requirements_NetworkConfig.png)

  下表确定了每个端口的作用。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-sqlserver-WinAuth.NWConfigPorts.html)
+ 通常，域 DNS 服务器位于 AD 域控制器中。您无需配置 VPC DHCP 选项集即可使用此功能。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [DHCP 选项集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。

**重要**  
如果您使用的是 VPC 网络 ACL，则还必须允许动态端口（49152-65535）上有来自 RDS Custom for SQL Server 数据库实例的出站流量。确保这些流量规则也镜像到适用于每个 AD 域控制器、DNS 服务器和 RDS Custom for SQL Server 数据库实例的防火墙上。  
虽然 VPC 安全组要求仅在发起网络流量的方向打开端口，但大多数 Windows 防火墙和 VPC 网络 ACL 要求双向打开端口。

# 网络验证
<a name="custom-sqlserver-WinAuth.NWValidation"></a>

在将 RDS Custom 实例加入自托管式 AD 或AWS Managed Microsoft AD 之前，请从与您计划启动 RDS Custom for SQL Server 实例所在的同一 VPC 中的 EC2 实例中检查以下内容。
+ 检查您能否将完全限定域名（FQDN）解析为域控制器 IP。

  ```
  nslookup corp.example.com
  ```

  该命令必须返回类似的输出：

  ```
  Server:  ip-10-0-0-2.us-west-2.compute.internal
  Address:  25.0.0.2
  
  Non-authoritative answer:
  Name:    corp.example.com
  Addresses:  40.0.9.25 (DC1 IP)
              40.0.50.123 (DC2 IP)
  ```
+ 解析您要启动 RDS Custom 实例所在的同一 VPC 中的 EC2 实例中的 AWS 服务：

  ```
  $region='input-your-aws-region'
  $domainFQDN='input-your-domainFQDN'
   
  function Test-DomainPorts {
      param (
          [string]$Domain,
          [array]$Ports
      )
   
      foreach ($portInfo in $Ports) {
          try {
              $conn = New-Object System.Net.Sockets.TcpClient
              $connectionResult = $conn.BeginConnect($Domain, $portInfo.Port, $null, $null)
              $success = $connectionResult.AsyncWaitHandle.WaitOne(1000) # 1 second timeout
              if ($success) {
                  $conn.EndConnect($connectionResult)
                  $result = $true
              } else {
                  $result = $false
              }
          }
          catch {
              $result = $false
          }
          finally {
              if ($null -ne $conn) {
                  $conn.Close()
              }
          }
          Write-Host "$($portInfo.Description) port open: $result"
      }
  }
   
  # Check if ports can be reached 
  $ports = @(
      @{Port = 53;   Description = "DNS"},
      @{Port = 88;   Description = "Kerberos"},
      @{Port = 389;  Description = "LDAP"},
      @{Port = 445;  Description = "SMB"},
      @{Port = 5985; Description = "WinRM"},
      @{Port = 636;  Description = "LDAPS"},
      @{Port = 3268; Description = "Global Catalog"},
      @{Port = 3269; Description = "Global Catalog over SSL"},
      @{Port = 9389; Description = "AD DS"}
  )
   
  function Test-DomainReachability {
      param (
          [string]$DomainName
      )
      
      try {
          $dnsResults = Resolve-DnsName -Name $DomainName -ErrorAction Stop
          Write-Host "Domain $DomainName is successfully resolving to following IP addresses: $($dnsResults.IpAddress)"
          Write-Host ""
          return $true
      } 
      catch {
          Write-Host ""
          Write-Host "Error Message: $($_.Exception.Message)"
          Write-Host "Domain $DomainName reachability check failed, please Configure DNS resolution"
          return $false
      }
  }
   
  $domain = (Get-WmiObject Win32_ComputerSystem).Domain
  if ($domain -eq 'WORKGROUP') {
      Write-Host ""    
      Write-Host "Host $env:computername is still part of WORKGROUP and not part of any domain"
      }
  else {
      Write-Host ""
      Write-Host "Host $env:computername is joined to $domain domain"
      Write-Host ""
      }
   
   
  $isReachable = Test-DomainReachability -DomainName $domainFQDN  
  if ($isReachable) {
      write-Host "Checking if domain $domainFQDN is reachable on required ports  "
      Test-DomainPorts -Domain $domainFQDN -Ports $ports
  }
  else {
      Write-Host "Port check skipped. Domain not reachable"
  }   
   
   
   
  # Get network adapter configuration
  $networkConfig = Get-WmiObject Win32_NetworkAdapterConfiguration | 
                   Where-Object { $_.IPEnabled -eq $true } |
                   Select-Object -First 1
   
  # Check DNS server settings
  $dnsServers = $networkConfig.DNSServerSearchOrder
   
  if ($dnsServers) {
      Write-Host "`nDNS Server settings:"
      foreach ($server in $dnsServers) {
          Write-Host "  - $server"
      }
  } else {
      Write-Host "`nNo DNS servers configured or unable to retrieve DNS server information."
  }
   
  write-host ""
   
  # Checks reachability to dependent services
  $services = "s3", "ec2", "secretsmanager", "logs", "events", "monitoring", "ssm", "ec2messages", "ssmmessages"
   
  function Get-TcpConnectionAsync {
      param (
          $ServicePrefix,
          $region
      )
      $endpoint = "${ServicePrefix}.${region}.amazonaws.com"
      $tcp = New-Object Net.Sockets.TcpClient
      $result = $false
   
      try {
          $connectTask = $tcp.ConnectAsync($endpoint, 443)
          $timedOut = $connectTask.Wait(3000)
          $result = $tcp.Connected
      } 
      catch {
          $result = $false
      } 
      return $result
  }
   
  foreach ($service in $services) {
      $validationResult = Get-TcpConnectionAsync -ServicePrefix $service -Region $region
      Write-Host "Reachability to $service is $validationResult"
  }
  ```

  对于 `s3`、`ec2`、`secretsmanager`、`logs`、`events`、`monitoring`、`ssm`、`ec2messages` 和 `ssmmessages`，`TcpTestSucceeded` 值必须返回 `True`。

# 为 RDS Custom for SQL Server 实例设置 Windows 身份验证
<a name="custom-sqlserver-WinAuth.settingUp"></a>

我们建议为任何拥有已加入 AD 域的 RDS Custom for SQL Server 数据库实例的 AWS 账户创建专用 OU 以及作用域为该 OU 的服务凭证。通过专用 OU 和服务凭证，您可以避免权限冲突并遵循最低权限原则。

Active Directory 级别的组策略可能与 AWS 自动化和权限发生冲突。我们建议选择仅适用于您为 RDS Custom for SQL Server 创建的 OU 的 GPO。
+ 要在自托管式或本地 AD 中创建 OU 和 AD 域用户，您可以以域管理员身份连接域控制器。
+ 要在 Directory Service 目录中创建用户和组，必须连接到管理实例，还必须已作为有权创建用户和组的用户登录。有关更多信息，请参阅《AWS Directory Service 管理指南》**中的 [AWS Managed Microsoft AD 中的用户和组管理](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)。
+ 要从 Amazon EC2 Windows Server 实例中管理 Active Directory，您需要在 EC2 实例上安装 Active Directory Domain Services 和 Active Directory Lightweight Directory Services 工具。有关更多信息，请参阅《AWS Directory Service 管理指南》**中的[为 AWS Managed Microsoft AD 安装 Active Directory 管理工具](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_install_ad_tools.html)。
+ 为了便于管理，建议您将这些工具安装在单独的 EC2 实例上，而不是 RDS Custom for SQL Server 数据库实例上。

AD 域服务账户的要求如下：
+ 您必须在 AD 域中有一个服务账户，该账户具有将计算机加入该域的委派权限。域服务账户是您的 AD 中的一个用户账户，该账户具有执行某些任务的委派权限。
+ 在您要加入 RDS Custom for SQL Server 实例的组织单位中向域服务账户委派以下权限：
  + 验证写入 DNS 主机名的能力
  + 验证写入服务主体名称的能力
  + 创建和删除计算机对象
+ 对于自托管式和本地 AD，域服务账户必须是“AWS 域名系统委托管理员”组的成员。
+ 对于 AWS Managed Microsoft AD，域名服务账户应是“DnsAdmins”组的成员。

这些是将计算机对象加入自托管式 AD 和 AWS Managed Microsoft AD 至少需要具备的一组权限。有关更多信息，请参阅 Microsoft Windows Server 文档中的[错误：当已委派控制的非管理员用户尝试将计算机加入域控制器时，访问被拒绝](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/access-denied-when-joining-computers)。

**重要**  
创建数据库实例后，请勿移动 RDS Custom for SQL Server 在组织单位（OU）中创建的计算机对象。移动关联对象可能会导致您的 RDS Custom for SQL Server 数据库实例出现配置错误。如果您需要移动 Amazon RDS 创建的计算机对象，请通过 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作用计算机对象所需位置修改域参数。

**Topics**
+ [步骤 1：在 AD 中创建组织单位（OU）](#custom-sqlserver-WinAuth.settingUp.CreateOU)
+ [步骤 2：创建 AD 域用户](#custom-sqlserver-WinAuth.settingUp.ADuser)
+ [步骤 3：将控制权委派给自托管式 AD 或 AWS Managed Microsoft AD 中的 AD 用户](#custom-sqlserver-WinAuth.settingUp.Delegate)
+ [步骤 4：创建密钥](#custom-sqlserver-WinAuth.settingUp.ASM)
+ [步骤 5：创建或修改 RDS Custom for SQL Server 数据库实例](#custom-sqlserver-WinAuth.settingUp.CreateDBInstance)
+ [步骤 6：创建 Windows 身份验证 SQL Server 登录名](#custom-sqlserver-WinAuth.settingUp.CreateLogins)
+ [步骤 7：使用 Kerberos 或 NTLM 身份验证](#custom-sqlserver-WinAuth.settingUp.KerbNTLM)

## 步骤 1：在 AD 中创建组织单位（OU）
<a name="custom-sqlserver-WinAuth.settingUp.CreateOU"></a>

请按照以下步骤在 AD 中创建组织单位：

**在 AD 中创建 OU**

1. 以域管理员身份连接到您的域 AD。

1. 打开 **Active Directory 用户和计算机**，然后选择要在其中创建 OU 的域。

1. 右键单击该域并选择**新建**，然后选择**组织单位**。

1. 为 OU 输入名称。

   启用**保护容器免遭意外删除**。

1. 选择**确定**。您的新 OU 将出现在您的域下。

对于 AWS Managed Microsoft AD，此 OU 的名称基于您在创建目录时键入的 NetBIOS 名称。此 OU 属于 AWS 并且包含您有权完全控制的所有 AWS 相关目录对象。默认情况下，此 OU 下存在两个子 OU，名为 **Computers 和 Users**。RDS Custom 创建的新 OU 是基于 NetBIOS 的 OU 的子级。

## 步骤 2：创建 AD 域用户
<a name="custom-sqlserver-WinAuth.settingUp.ADuser"></a>

域用户凭证用于 Secrets Manager 中的密钥。

**在您的 AD 中创建 AD 域用户**

1. 打开 **Active Directory 用户和计算机**，然后选择要在其中创建用户的域和 OU。

1. 右键单击**用户**对象并选择**新建**，然后选择**用户**。

1. 输入用户的名字、姓氏和登录名。单击**下一步**。

1. 输入用户的密码。请勿选择**用户下次登录时必须更改密码**或**账户已禁用**。单击**下一步**。

1. 单击**确定**。您的新用户将出现在您的域下。

## 步骤 3：将控制权委派给自托管式 AD 或 AWS Managed Microsoft AD 中的 AD 用户
<a name="custom-sqlserver-WinAuth.settingUp.Delegate"></a>

**将控制权委派给域中的 AD 域用户**

1. 打开 **Active Directory 用户和计算机** MMC 管理单元，然后选择您的域。

1. 右键单击您之前创建的 OU，然后选择**委派控制权**。

1. 在**委派控制权向导**中，单击**下一步**。

1. 在**用户或组**部分，单击**添加**。

1. 在**选择用户、计算机或组**中，输入您创建的 AD 用户，然后单击**检查名称**。如果您的 AD 用户检查成功，请单击**确定**。

1. 在**用户或组**部分，确认您的 AD 用户已添加，然后单击**下一步**。

1. 在**要委派的任务**部分，选择**创建要委派的自定义任务**，然后单击**下一步**。

1. 在 **Active Directory 对象类型**部分：

   选择**仅文件夹中的以下对象**。

   选择**计算机对象**

   选择**在此文件夹中创建选定对象**

   选择**删除此文件夹中的选定对象**，然后单击**下一步**。

1. 在**权限**部分：

   将**常规**保持为选中状态。

   选择**已验证写入 DNS 主机名**。

   选择**已验证写入服务主体名称**，然后单击**下一步**。

1. 在**完成控制权委派向导**中，请确认您的设置，然后单击**完成**。

## 步骤 4：创建密钥
<a name="custom-sqlserver-WinAuth.settingUp.ASM"></a>

在包含要加入 Active Directory 的 RDS Custom for SQL Server 数据库实例的同一 AWS 账户和区域中创建密钥。存储在[步骤 2：创建 AD 域用户](#custom-sqlserver-WinAuth.settingUp.ADuser)中创建的 AD 域用户的凭证。

------
#### [ Console ]
+ 在 AWS Secrets Manager 中，选择**存储新密钥**。
+ 对于**密钥类型**，请选择**其他密钥类型**。
+ 对于**键/值对**，请添加两个键：
  + 第一个键，即 `SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME`，并对于值输入您的 AD 用户的名称（不带域前缀）。
  + 对于第二个键，输入 `SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD`，然后输入域中 AD 用户的密码。
+ 在**加密密钥**中，输入创建 RDS Custom for SQL Server 实例时所用的相同 AWS KMS 密钥。
+ 对于**密钥名称**，选择以 `do-not-delete-rds-custom-` 开头的密钥名称，以允许您的实例配置文件访问此密钥。如果您想为密钥选择一个不同的名称，请更新 `RDSCustomInstanceProfile` 以访问**密钥名称**。
+ （可选）对于**描述**，输入密钥名称的描述。
+ 添加标签 `Key="AWSRDSCustom",Value="custom-sqlserver"` 
+ 单击**保存**，然后单击**下一步**。
+ 对于**配置轮换设置**，保留默认值并选择**下一步**。
+ 查看密钥的设置，然后单击**存储**。
+ 选择新密钥，然后复制**密钥 ARN** 的值。下一步将用它来设置您的 Active Directory。

------
#### [ CLI ]

在 CLI 中运行以下命令来创建密钥：

```
# Linux based
aws secretsmanager create-secret \
--name do-not-delete-rds-custom-DomainUserCredentails \ 
--description "Active directory user credentials for managing RDS Custom" \ 
--secret-string "{\"SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"tester\",\"SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"xxxxxxxx\"}" \
--kms-key-id <RDSCustomKMSKey> \
--tags Key="AWSRDSCustom",Value="custom-sqlserver"

# Windows based
aws secretsmanager create-secret ^
--name do-not-delete-rds-custom-DomainUserCredentails ^ 
--description "Active directory user credentials for managing RDS Custom" ^
--secret-string "{\"SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"tester\",\"SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"xxxxxxxx\"}" ^
--kms-key-id <RDSCustomKMSKey> ^
--tags Key="AWSRDSCustom",Value="custom-sqlserver"
```

------

## 步骤 5：创建或修改 RDS Custom for SQL Server 数据库实例
<a name="custom-sqlserver-WinAuth.settingUp.CreateDBInstance"></a>

创建或修改 RDS Custom for SQL Server 数据库实例，以便与您的目录一起使用。您可以使用控制台、CLI 或 RDS API 将数据库实例与目录关联。您可以通过下列方式之一来执行该操作：
+ 使用控制台、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 命令或 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API 操作创建新的 SQL Server 数据库实例。

  有关说明，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。
+ 使用控制台、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令或 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作修改现有 SQL Server 数据库实例。

  有关说明，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。
+ 使用控制台、[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI 命令或 [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API 操作，从数据库快照还原 SQL Server 数据库实例。

  有关说明，请参阅[还原到数据库实例](USER_RestoreFromSnapshot.md)。
+ 使用控制台、[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI 命令或 [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API 操作，将 SQL Server 数据库实例还原到某个时间点。

  有关说明，请参阅[将 Amazon RDS 的数据库实例还原到指定时间](USER_PIT.md)。

**注意**  
如果已手动将 RDS Custom for SQL Server 实例加入 AD，请检查 [网络配置端口规则](custom-sqlserver-WinAuth.NWConfigPorts.md) 和 [网络验证](custom-sqlserver-WinAuth.NWValidation.md) 的设置，然后完成步骤 1 至步骤 4。将 `--domain-fqdn`、`--domain-ou` 和 `--domain-auth-secret-arn` 更新到您的 AD，以便在 RDS Custom 中注册域加入凭证和配置，以监控、注册 CNAME 并采取恢复操作。

使用 AWS CLI 时，数据库实例需要以下参数才能使用您创建的目录：
+ 对于 `--domain-fqdn` 参数，请使用自托管式 AD 的完全限定域名。
+ 对于 `--domain-ou` 参数，请使用您在自托管式 AD 中创建的 OU。
+ 对于 `--domain-auth-secret-arn` 参数，请使用您创建的**密钥 ARN** 的值。

**重要**  
如果您修改数据库实例，以加入自托管式 AD 域或 AWS Managed Microsoft AD 或者从中删除，则需要重启数据库实例才能使修改生效。您可以选择立即应用更改，也可以等到下一个维护时段。选择**立即应用**选项会导致单可用区数据库实例停机。多可用区数据库实例集群会在完成重启之前执行失效转移。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

以下 CLI 命令创建一个新的 RDS Custom for SQL Server 数据库实例并将其加入自托管式或 AWS Managed Microsoft AD 域。

对于 Linux、macOS 或 Unix：

```
aws rds create-db-instance  \
--engine custom-sqlserver-se \
--engine-version 15.00.4312.2.v1 \
--db-instance-identifier my-custom-instance \
--db-instance-class db.m5.large \
--allocated-storage 100 --storage-type io1 --iops 1000 \
--master-username my-master-username \
--master-user-password my-master-password \
--kms-key-id  my-RDSCustom-key-id \
--custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance  \
--domain-fqdn "corp.example.com" \
--domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" \
--domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" \
--db-subnet-group-name my-DB-subnet-grp \
--vpc-security-group-ids  my-securitygroup-id \
--no-publicly-accessible \
--backup-retention-period 3 \
--port 8200 \
--region us-west-2 \
--no-multi-az
```

对于 Windows：

```
aws rds create-db-instance  ^
--engine custom-sqlserver-se ^
--engine-version 15.00.4312.2.v1 ^
--db-instance-identifier my-custom-instance ^
--db-instance-class db.m5.large ^
--allocated-storage 100 --storage-type io1 --iops 1000 ^
--master-usernamemy-master-username ^
--master-user-password my-master-password ^
--kms-key-id  my-RDSCustom-key-id ^
--custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance  ^
--domain-fqdn "corp.example.com" ^
--domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" ^
--domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" ^
--db-subnet-group-name my-DB-subnet-grp ^
--vpc-security-group-ids  my-securitygroup-id ^
--no-publicly-accessible ^
--backup-retention-period 3 ^
--port 8200 ^
--region us-west-2 ^
--no-multi-az
```

**重要**  
如果您的 AWS Managed Microsoft AD 的 NetBIOS 为 **corpexample**，那么它本身就会显示为 OU。之前创建的任何新 OU 都将显示为嵌套 OU。对于 AWS Managed Microsoft AD，将 `--domain-ou` 设置为 `"OU=RDSCustomOU,OU=corpexample,DC=corp,DC=example,DC=com"`。

以下命令将现有 RDS Custom for SQL Server 数据库实例修改为使用 Active Directory 域。

对于 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --domain-fqdn "corp.example.com" \
    --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" \
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" \
```

对于 Windows：

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --domain-fqdn "corp.example.com" ^
    --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" ^
```

以下 CLI 命令从 Active Directory 域中删除 RDS Custom for SQL Server 数据库实例。

对于 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --disable-domain
```

对于 Windows：

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --disable-domain
```

使用控制台创建或修改实例时，单击**启用 Microsoft SQL Server Windows 身份验证**以查看以下选项。

![\[Microsoft SQL Server Windows 身份验证目录\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/custom-sqs-WinAuth.png)


您负责确保您的域 FQDN 解析为域控制器 IP 地址。如果域控制器 IP 未解析，则域加入操作将失败，但会成功创建 RDS Custom for SQL Server 实例。有关问题排查信息，请参阅[Active Directory 故障排除](custom-sqlserver-WinAuth.Troubleshoot.md)。

## 步骤 6：创建 Windows 身份验证 SQL Server 登录名
<a name="custom-sqlserver-WinAuth.settingUp.CreateLogins"></a>

使用 Amazon RDS 主用户凭证连接 SQL Server 数据库实例，就像连接任何其他数据库实例一样。由于数据库实例已加入 AD 域，因此您可以预配置 SQL Server 登录名和用户。您可以通过 AD 域中的 AD 用户和组实用程序执行此操作。通过对这些 Windows 登录名授予和撤销标准 SQL Server 权限来管理数据库权限。

对于 AD 用户，要对 SQL Server 进行身份验证，AD 用户或其所属的 Active Directory 组必须存在 SQL Server Windows 登录名。访问权限的精细控制是通过对这些 SQL Server 登录名授予和撤销权限来处理的。AD 用户没有 SQL Server 登录名，或者用户所属 AD 组中的登录名无法访问 SQL Server 数据库实例。

创建 AD SQL Server 登录名需要 `ALTER ANY LOGIN` 权限。如果您尚未使用此权限创建任何登录名，请使用 SQL Server 身份验证以数据库实例的主用户身份进行连接，并在主用户的上下文下创建 AD SQL Server 登录名。

您可以运行数据定义语言（DDL）命令（如以下示例），为 AD 用户或组创建 SQL Server 登录名。

```
USE [master]
GO
CREATE LOGIN [mydomain\myuser] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO
```

域中用户（人和应用程序）现在均可从加入域的客户端计算机使用 Windows 身份验证连接到 RDS Custom for SQL Server 实例。

## 步骤 7：使用 Kerberos 或 NTLM 身份验证
<a name="custom-sqlserver-WinAuth.settingUp.KerbNTLM"></a>

### 使用 RDS 端点进行 NTLM 身份验证
<a name="custom-sqlserver-WinAuth.settingUp.KerbNTLM.NTLM"></a>

每个 Amazon RDS 数据库实例都有一个端点，每个端点都包含数据库实例的 DNS 名称和端口号。要使用 SQL 客户端应用程序连接到数据库实例，您需要该数据库实例的 DNS 名称和端口号。要使用 NTLM 身份验证进行身份验证，必须连接到 RDS 端点。

在计划内数据库维护或计划外服务中断期间，Amazon RDS 将自动失效转移到最新辅助数据库，以便操作能够在不进行手动干预的情况下快速恢复。主实例和辅助实例使用相同的端点，其物理网络地址作为失效转移过程的一部分转换到辅助实例。在失效转移时，您不必重新配置应用程序。

### Kerberos 身份验证
<a name="custom-sqlserver-WinAuth.settingUp.KerbNTLM.Kerb"></a>

RDS Custom for SQL Server 的基于 Kerberos 的身份验证要求连接到特定的服务主体名称（SPN）。但是，在失效转移事件发生后，应用程序可能不知道新 SPN。为了解决这个问题，RDS Custom for SQL Server 提供了一个基于 Kerberos 的端点。

基于 Kerberos 的端点遵循一种特定的格式。如果您的 RDS 端点为 `rds-instance-name.account-region-hash.aws-region.rds.amazonaws.com`，则相应基于 Kerberos 的端点将为 `rds-instance-name.account-region-hash.aws-region.awsrds.fully qualified domain name (FQDN)`。

例如，如果 RDS 端点为 `ad-test.cocv6zwtircu.us-east-1.rds.amazonaws.com`，域名为 `corp-ad.company.com`，则基于 Kerberos 的端点将为 `ad-test.cocv6zwtircu.us-east-1.awsrds.corp-ad.company.com`。

这个基于 Kerberos 的端点可用于使用 Kerberos 对 SQL Server 实例进行身份验证，即使在失效转移事件发生后也是如此，因为端点会自动更新为指向主 SQL Server 实例的新 SPN。

### 查找您的 CNAME
<a name="custom-sqlserver-WinAuth.settingUp.KerbNTLM.CNAME"></a>

要查找您的 CNAME，请连接到域控制器并打开 **DNS 管理器**。导航到**正向查找区域**和您的 FQDN。

浏览 **awsrds**、**aws-region**，以及**账户和区域特定的哈希值**。

如果您要连接 RDS Custom EC2 实例并尝试使用 CNAME 在本地连接到数据库，则您的连接将使用 NTLM 身份验证而不是 Kerberos。

如果从远程客户端连接 CNAME 后返回了 NTLM 连接，请检查所需端口是否已列入允许列表。

要检查您的连接是否使用 Kerberos，请运行以下查询：

```
SELECT net_transport, auth_scheme
    FROM sys.dm_exec_connections
    WHERE session_id = @@SSPID;
```

# 在域中管理数据库实例
<a name="custom-sqlserver-WinAuth.ManagingDBI"></a>

 您可以使用控制台、AWS CLI 或 Amazon RDS API 来管理数据库实例及其与您的域的关系。例如，您可以将数据库实例移入域、移出域或在域之间移动。

 例如，使用 Amazon RDS API，您可以执行下列操作：
+  要为失败的成员资格重新尝试域加入，请使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) API 操作并指定当前成员资格的目录 ID。
+  要为成员资格更新 IAM 角色名称，请使用 `ModifyDBInstance` API 操作并指定当前成员资格的目录 ID 和新的 IAM 角色。
+  要从域中删除数据库实例，请使用 `ModifyDBInstance` API 操作并指定 `none` 作为域参数。
+  要将数据库实例从一个域移至另一个域，请使用 `ModifyDBInstance` API 操作并指定新域的域标识符作为域参数。
+  要列出每个数据库实例的成员资格，请使用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/DescribeDBInstances.html) API 操作。

## 还原 RDS Custom for SQL Server 数据库实例并将其添加到 Active Directory 域
<a name="custom-sqlserver-WinAuth.ManagingDBI.Restoring"></a>

您可以还原数据库快照或对 SQL Server 数据库实例执行时间点故障恢复（PITR），然后将其添加到 Active Directory 域。数据库实例还原后，使用[步骤 5：创建或修改 RDS Custom for SQL Server 数据库实例](custom-sqlserver-WinAuth.settingUp.md#custom-sqlserver-WinAuth.settingUp.CreateDBInstance)中介绍的过程修改此实例以将数据库实例添加到 AD 域中。

# 了解域成员资格
<a name="custom-sqlserver-WinAuth.Understanding"></a>

 在创建或修改数据库实例后，实例将成为域的成员。AWS 控制台将指示数据库实例的域成员资格状态。数据库实例的状态可以是以下状态之一：
+  **已联接** – 实例是域的成员。
+  **正在联接** – 实例正处于成为域成员的过程中。
+  **待联接** – 实例成员资格待定。
+  **pending-maintenance-join** – AWS将在下一计划维护期间尝试使实例成为域成员。
+  **待删除** – 等待从域中删除实例。
+  **pending-maintenance-removal** – AWS将在下一计划维护期间尝试从域中删除实例。
+  **失败** – 配置问题阻碍实例联接域。在重新发出实例修改命令之前检查并修复配置。
+  **正在删除** – 正从域中删除实例。

成为域成员的请求可能因网络连接问题或不正确的 IAM 角色而失败。例如，您可能会创建数据库实例或修改现有实例，并且尝试使数据库成为某个域的成员会失败。在这种情况下，您重新发出命令以创建或修改数据库实例，或者修改新创建的实例以加入域。

# Active Directory 故障排除
<a name="custom-sqlserver-WinAuth.Troubleshoot"></a>

以下是您在设置或修改 AD 时可能遇到的问题。


| 错误代码 | 描述 | 常见原因 | 故障排除建议 | 
| --- | --- | --- | --- | 
| 错误 2/0x2 | 系统找不到指定的文件。 | 使用 `—domain-ou` 参数指定的组织单位（OU）的格式或位置无效。通过 AWS Secrets Manager 指定的域服务账户缺少加入 OU 所需的权限。 | 查看 `—domain-ou` 参数。确保域服务账户拥有相应的 OU 权限。 | 
| 错误 5/0x5 | 访问被拒绝。 | 域服务账户的权限配置不正确，或者域中已经存在该计算机账户。 | 查看域中的域服务账户权限，并验证 RDS 计算机账户在域中是否重复。您可以通过在 RDS Custom for SQL Server 数据库实例上运行 `SELECT @@SERVERNAME` 来验证 RDS 计算机账户的名称。如果您使用的是多可用区，请尝试通过失效转移重启，然后再次验证 RDS 计算机账户。有关更多信息，请参阅 [重启数据库实例](USER_RebootInstance.md)。 | 
| 错误 87/0x57 | 参数不正确。 | 通过 AWS Secrets Manager 指定的域服务账户不具备相应的权限。用户配置文件也可能已损坏。 | 查看域服务账户的要求。 | 
| 错误 234/0xEA | 指定的组织单位（OU）不存在。 | 使用 `—domain-ou` 参数指定的 OU 在您的 AD 中不存在。 | 查看 `—domain-ou` 参数并确保指定的 OU 在您的 AD 中存在。 | 
| 错误 1326/0x52E | 用户名或密码不正确。 | AWS Secrets Manager 中提供的域服务账户凭证包含未知的用户名或错误的密码。您的 AD 中也可能已禁用域账户。 | 确保 AWS Secrets Manager 中提供的凭证正确无误，并且在您的 Active Directory 中启用了域账户。 | 
| 错误 1355/0x54B | 指定的域不存在或无法访问。 | 域已关闭、指定的 DNS IP 集无法访问，或指定的 FQDN 无法访问。 | 查看 `—domain-dns-ips` 和 `—domain-fqdn` 参数，确保正确。查看您的 RDS Custom for SQL Server 数据库实例的网络配置，并确保您的 AD 可以访问。 | 
| 错误 1722/0x6BA | RPC 服务器不可用。 | 连接您的 AD 域的 RPC 服务时出现问题。这可能由于服务或网络问题导致。 | 验证 RPC 服务是否正在您的域控制器上运行，以及是否可以在您的域上从 RDS Custom for SQL Server 数据库实例访问 TCP 端口 `135` 和 `49152-65535`。 | 
| 错误 2224/0x8b0 | 用户账户已存在。 | 正在尝试添加到您 AD 的计算机账户已经存在。 | 通过在您的 RDS Custom for SQL Server 数据库实例上运行 `SELECT @@SERVERNAME` 来识别计算机账户，然后小心地将其从您的 AD 中删除。 | 
| 错误 2242/0x8c2 | 此用户的密码已过期。 | 通过 AWS Secrets Manager 指定的域服务账户的密码已过期。 | 更新用于将 RDS Custom for SQL Server 数据库实例加入 AD 的域服务账户的密码。 | 

# 管理 RDS Custom for SQL Server 的多可用区部署
<a name="custom-sqlserver-multiaz"></a>

 在 RDS Custom for SQL Server 的多可用区数据库实例部署中，Amazon RDS 会自动在不同可用区（AZ）中预调配和维护一个同步备用副本。主数据库实例可以跨可用区同步复制到备用副本以提供数据冗余。

**重要**  
RDS Custom for SQL Server 的多可用区部署与 RDS for SQL Server 的多可用区部署不同。与 RDS for SQL Server 的多可用区不同，对于 RDS Custom for SQL Server，在创建多可用区数据库实例之前，您必须设置先决条件，因为 RDS Custom 在您自己的账户内运行，这需要权限。  
如果您未完成先决条件，则多可用区数据库实例可能无法运行，或者自动恢复为单可用区数据库实例。有关先决条件的更多信息，请参阅[RDS Custom for SQL Server 的多可用区部署的先决条件](custom-sqlserver-multiaz.prerequisites.md)。

在计划内的系统维护期间，运行具有高可用性的数据库实例可以提高可用性。在进行计划的数据维护或发生未计划的服务中断时，Amazon RDS 会自动故障转移到最新的辅助数据库实例。此功能让数据库操作快速恢复，而不需要手动干预。主实例和备用实例使用相同的终端节点，其物理网络地址作为故障转移过程的一部分转换到辅助副本。在故障转移时，您不必重新配置应用程序。

![\[RDS Custom for SQL Server 支持多可用区。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/custom-sqlserver-multiaz-architecture.png)


您可以通过在创建 RDS Custom 数据库实例时指定多可用区，来创建 RDS Custom for SQL Server 多可用区部署。您可以使用控制台，通过修改数据库实例并指定多可用区选项，将现有 RDS Custom for SQL Server 数据库实例转换为多可用区部署。还可以使用 AWS CLI 或 Amazon RDS API 指定多可用区数据库实例部署。

RDS 控制台显示备用副本的可用区（辅助可用区）。还可以使用 `describe-db-instances` CLI 命令或 `DescribeDBInstances` API 操作来查找辅助可用区。

与单可用区部署相比，具有多可用区部署的 RDS Custom for SQL Server 数据库实例的写入和提交延迟可能会增加。这种增加可能是由于数据库实例之间的同步数据复制造成的。尽管 AWS 设计用于在可用区之间提供低延迟网络连接，但如果您的部署故障转移到备用副本，延迟可能会发生变化。

**注意**  
对于生产工作负载，我们建议您使用具有预调配 IOPS（每秒输入/输出操作数）的数据库实例类，以获得快速、一致的性能。有关数据库实例类的更多信息，请参阅 [Amazon RDS Custom for SQL Server 的要求和限制](custom-reqs-limits-MS.md)。

**Topics**
+ [区域和版本可用性](#custom-sqlserver-multiaz.regionversion)
+ [RDS Custom for SQL Server 的多可用区部署的限制](#custom-sqlserver-multiaz.limitations)
+ [RDS Custom for SQL Server 的多可用区部署的先决条件](custom-sqlserver-multiaz.prerequisites.md)
+ [创建 RDS Custom for SQL Server 多可用区部署](#custom-sqlserver-multiaz.creating)
+ [将 RDS Custom for SQL Server 的单可用区部署修改为多可用区部署](custom-sqlserver-multiaz.modify-saztomaz.md)
+ [将 RDS Custom for SQL Server 多可用区部署修改为单可用区部署](custom-sqlserver-multiaz.modify-maztosaz.md)
+ [RDS Custom for SQL Server 多可用区部署的失效转移过程](custom-sqlserver-multiaz.failover.md)

## 区域和版本可用性
<a name="custom-sqlserver-multiaz.regionversion"></a>

以下 SQL Server 版本支持 RDS Custom for SQL Server 的多可用区部署：
+ SQL Server 2022 和 2019：企业版、标准版、Web 版和开发版

**注意**  
SQL Server 2019 CU8（15.00.4073.23）或更低版本不支持 RDS Custom for SQL Server 的多可用区部署。

RDS Custom for SQL Server 的多可用区部署在 RDS Custom for SQL Server 可用的所有区域中均可用。有关 RDS Custom for SQL Server 的多可用区部署的区域可用性的更多信息，请参阅 [支持 RDS Custom for SQL Server 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.sq)。

## RDS Custom for SQL Server 的多可用区部署的限制
<a name="custom-sqlserver-multiaz.limitations"></a>

RDS Custom for SQL Server 的多可用区部署具有以下限制：
+ 不支持跨区域多可用区部署。
+ 您不能将辅助数据库实例配置为接受数据库读取活动。
+ 当您在多可用区部署中使用自定义引擎版本（CEV）时，辅助数据库实例也将使用相同的 CEV。辅助数据库实例无法使用不同的 CEV。

# RDS Custom for SQL Server 的多可用区部署的先决条件
<a name="custom-sqlserver-multiaz.prerequisites"></a>

如果您具有现有的 RDS Custom for SQL Server 单可用区部署，则在将其修改为多可用区部署之前，需要满足以下附加先决条件。您可以选择手动完成先决条件，也可以选择使用提供的 CloudFormation 模板完成先决条件。最新的 CloudFormation 模板同时包含适用于单可用区部署和多可用区部署的先决条件。

**重要**  
为了简化设置，我们建议您使用网络设置说明中提供的最新 CloudFormation 模板文件来创建先决条件。有关更多信息，请参阅 [使用 CloudFormation 进行配置](custom-setup-sqlserver.md#custom-setup-sqlserver.cf)。

**注意**  
将现有的 RDS Custom for SQL Server 单可用区部署修改为多可用区部署时，必须先完成这些先决条件。如果您未完成先决条件，则多可用区设置将失败。要完成先决条件，请执行[将 RDS Custom for SQL Server 的单可用区部署修改为多可用区部署](custom-sqlserver-multiaz.modify-saztomaz.md)中的步骤。
+ 更新 RDS 安全组入站和出站规则以允许端口 1120。
+ 在您的私有网络访问控制列表（ACL）中添加一条规则，以允许数据库实例 VPC 使用 TCP 端口 `0-65535`。
+ 创建新的 Amazon SQS VPC 端点，以允许 RDS Custom for SQL Server 数据库实例与 SQS 通信。
+ 更新实例配置文件角色中的 SQS 权限。

## 创建 RDS Custom for SQL Server 多可用区部署
<a name="custom-sqlserver-multiaz.creating"></a>

要创建 RDS Custom for SQL Server 多可用区部署，请按照[为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例](custom-creating-sqlserver.md)中的步骤操作。

**重要**  
为了简化设置，我们建议您使用网络设置说明中提供的最新 CloudFormation 模板文件。有关更多信息，请参阅 [使用 CloudFormation 进行配置](custom-setup-sqlserver.md#custom-setup-sqlserver.cf)。

创建多可用区部署需要几分钟才能完成。

# 将 RDS Custom for SQL Server 的单可用区部署修改为多可用区部署
<a name="custom-sqlserver-multiaz.modify-saztomaz"></a>

您可以将现有的 RDS Custom for SQL Server 数据库实例从单可用区部署修改为多可用区部署。修改数据库实例时，Amazon RDS 会执行多项操作：
+ 拍摄主数据库实例的快照。
+ 从快照中为备用副本创建新卷。这些卷在后台初始化，并在数据完全初始化后达到最大卷性能。
+ 开启主数据库实例与辅助数据库实例之间的同步块级复制。

**重要**  
我们建议您避免在高峰活动期在生产数据库实例上将 RDS Custom for SQL Server 数据库实例从单可用区部署修改为多可用区部署。

AWS 使用快照创建备用实例，以避免在从单可用区转换到多可用区时出现停机，但是在转换为多可用区期间和转换后，性能可能会受到影响。对于对写入延迟敏感的工作负载而言，这可能会产生很大的影响。尽管此功能允许快速从快照中还原大型卷，但由于同步复制，该功能可能会导致 I/O 操作的延迟增加。这种延迟可能会影响您的数据库性能。

**注意**  
如果您在 2024 年 8 月 29 日之前创建了 RDS Custom for SQL Server 数据库实例，请在修改之前修补到最新的次要版本。  
对于 SQL Server 2019 实例，请将数据库引擎版本升级到 `15.00.4410.1.v1` 或更高版本。
对于 SQL Server 2022 实例，请将数据库引擎版本升级到 `16.00.4150.1.v1` 或更高版本。

**Topics**
+ [使用 CloudFormation 配置先决条件，以将单可用区部署修改为多可用区部署](#custom-sqlserver-multiaz.modify-saztomaz-prereqs.cf)
+ [手动配置先决条件，以将单可用区部署修改为多可用区部署](#custom-sqlserver-multiaz.modify-saztomaz-prereqs.manual)
+ [使用 RDS 控制台、AWS CLI 或 RDS API 进行修改。](#custom-sqlserver-multiaz.modify-saztomaz-afterprereqs)

## 使用 CloudFormation 配置先决条件，以将单可用区部署修改为多可用区部署
<a name="custom-sqlserver-multiaz.modify-saztomaz-prereqs.cf"></a>

要使用多可用区部署，必须确保应用了满足先决条件的最新 CloudFormation 模板，或者手动配置最新的先决条件。如果您已经应用了最新的 CloudFormation 先决条件模板，则可以跳过这些步骤。

使用 CloudFormation 配置 RDS Custom for SQL Server 多可用区部署先决条件

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

1. 要启动创建堆栈向导，请选择用于创建单可用区部署的现有堆栈，然后选择**更新**。

   此时会显示**更新堆栈**页面。

1. 对于**先决条件 - 准备模板**，请选择**替换当前模板**。

1. 对于 **Select Template**（选择模板），执行以下操作：

   1. 下载最新的 CloudFormation 模板文件。打开链接 [custom-sqlserver-onboard.zip](samples/custom-sqlserver-onboard.zip) 的上下文（右键单击）菜单，然后选择 **Save Link As**（将链接另存为）。

   1. 将 `custom-sqlserver-onboard.json` 文件保存并提取到您的计算机中。

   1. 对于 **Template source**(模板来源)，选择 **Upload a template file**(上载模板文件)。

   1. 对于 **Choose file**（选择文件），请导航到 `custom-sqlserver-onboard.json` 并选择它。

1. 选择**下一步**。

   此时将出现 **Specify stack details**（指定堆栈详细信息）页面。

1. 要保留原定设置选项，请选择 **Next**（下一步)。

   将出现**高级选项**页面。

1. 要保留原定设置选项，请选择 **Next**（下一步)。

1. 要保留原定设置选项，请选择 **Next**（下一步)。

1. 在**检查更改**页面上，执行以下操作：

   1. 对于**功能**，请选中****我确认 CloudFormation 可能使用自定义名称创建 IAM 资源****复选框。

   1. 选择**提交**。

1. 验证更新是否成功。成功操作的状态将显示 `UPDATE_COMPLETE`。

如果更新失败，则将回滚更新过程中指定的任何新配置。现有资源将仍然可用。例如，如果添加编号为 18 和 19 的网络 ACL 规则，但存在编号相同的现有规则，则更新将返回以下错误：`Resource handler returned message: "The network acl entry identified by 18 already exists.`。在这种情况下，您可以修改现有 ACL 规则以使用小于 18 的编号，然后重试更新。

## 手动配置先决条件，以将单可用区部署修改为多可用区部署
<a name="custom-sqlserver-multiaz.modify-saztomaz-prereqs.manual"></a>

**重要**  
为了简化设置，我们建议您使用网络设置说明中提供的最新 CloudFormation 模板文件。有关更多信息，请参阅 [使用 CloudFormation 配置先决条件，以将单可用区部署修改为多可用区部署](#custom-sqlserver-multiaz.modify-saztomaz-prereqs.cf)。

如果您选择手动配置先决条件，请执行以下任务。

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择**端点**。**创建端点**页面显示。

1. 对于**服务类别**，选择 **AWS 服务**。

1. 在**服务**中，搜索 *SQS*。

1. 在 **VPC** 中，选择在其中部署 RDS Custom for SQL Server 数据库实例的 VPC。

1. 在**子网**中，选择在其中部署 RDS Custom for SQL Server 数据库实例的子网。

1. 在**安全组**中，选择 *-vpc-endpoint-sg* 组。

1. 对于**策略**，选择**自定义**。

1. 在自定义策略中，将 *AWS partition*、*Region*、*accountId* 和 *IAM-Instance-role* 替换为您自己的值。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Condition": {
                   "StringLike": {
                       "aws:ResourceTag/AWSRDSCustom": "custom-sqlserver"
                   }
               },
               "Action": [
                   "SQS:SendMessage",
                   "SQS:ReceiveMessage",
                   "SQS:DeleteMessage",
                   "SQS:GetQueueUrl"
               ],
               "Resource": "arn:aws:sqs:us-east-1:111122223333:do-not-delete-rds-custom-*",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/{IAM-Instance-role}"
               }
           }
       ]
   }
   ```

------

1.  使用访问 Amazon SQS 的权限更新**实例配置文件**。将 *AWS partition*、*Region* 和 *accountId* 替换为您自己的值。

   ```
                           {
       "Sid": "SendMessageToSQSQueue",
       "Effect": "Allow",
       "Action": [
         "SQS:SendMessage",
         "SQS:ReceiveMessage",
         "SQS:DeleteMessage",                                    
         "SQS:GetQueueUrl"
   
       ],
       "Resource": [
         {
           "Fn::Sub": "arn:${AWS::Partition}:sqs:${AWS::Region}:${AWS::AccountId}:do-not-delete-rds-custom-*"
         }
       ],
       "Condition": {
         "StringLike": {
           "aws:ResourceTag/AWSRDSCustom": "custom-sqlserver"
         }
       }
     } 
                           >
   ```

1. 更新 Amazon RDS 安全组的入站和出站规则以允许端口 1120。

   1. 在**安全组**中，选择 *-rds-custom-instance-sg* 组。

   1. 对于**入站规则**，创建**自定义 TCP** 规则，以允许源 *-rds-custom-instance-sg* 组使用端口 *1120*。

   1. 对于**出站规则**，创建**自定义 TCP** 规则，以允许端口 *1120* 连接到目标 *-rds-custom-instance-sg* 组。

1. 在您的私有网络访问控制列表（ACL）中添加一条规则，以允许数据库实例的源子网使用 TCP 端口 `0-65535`。
**注意**  
创建**入站规则**和**出站规则**时，请记下现有的最大**规则编号**。您创建的新规则的**规则编号**必须小于 100，且与任何现有**规则编号**均不匹配。

   1. 在**网络 ACL** 中，选择 *-private-network-acl* 组。

   1. 对于**入站规则**，创建**全部 TCP** 规则，以允许将 TCP 端口 `0-65535` 用于来自 *privatesubnet1* 和 *privatesubnet2* 的源。

   1. 对于**出站规则**，创建**全部 TCP** 规则，以允许 TCP 端口 `0-65535` 连接到目标 *privatesubnet1* 和 *privatesubnet2*。

## 使用 RDS 控制台、AWS CLI 或 RDS API 进行修改。
<a name="custom-sqlserver-multiaz.modify-saztomaz-afterprereqs"></a>

完成先决条件后，您可以使用 RDS 控制台、AWS CLI 或 RDS API，将 RDS Custom for SQL Server 数据库实例从单可用区部署修改为多可用区部署。

### 控制台
<a name="custom-sqlserver-multiaz.modify-saztomaz.Console"></a>

**将现有 RDS Custom for SQL Server 单可用区部署修改为多可用区部署**

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

1. 在 Amazon RDS 控制台中，选择**数据库**。

   随后会显示**数据库**窗格。

1. 选择要修改的 RDS Custom for SQL Server 数据库实例。

1. 对于**操作**中，选择**转换为多可用区部署**。

1. 在**确认**页面上，选择**立即应用**以立即应用更改。选择此选项不会导致停机，但可能会对性能产生影响。或者，您可以选择在下一个维护时段内应用更新。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。

1. 在**确认**页面上，选择**转换为多可用区**。

### AWS CLI
<a name="custom-sqlserver-multiaz.modify-saztomaz.CLI"></a>

要使用 AWS CLI 转换为多可用区数据库实例部署，请调用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令并设置 `--multi-az` 选项。指定数据库实例标识符以及要修改的其他选项的值。有关各选项的信息，请参阅 [数据库实例的设置](USER_ModifyInstance.Settings.md)。

**Example**  
以下代码通过包含 `--multi-az` 选项来修改 `mycustomdbinstance`。将在下一维护时段使用 `--no-apply-immediately` 应用这些更改。使用 `--apply-immediately` 可立即应用更改。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mycustomdbinstance \
    --multi-az \
    --no-apply-immediately
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mycustomdbinstance ^
    --multi-az  \ ^
    --no-apply-immediately
```

### RDS API
<a name="custom-sqlserver-multiaz.modify-saztomaz.API"></a>

要使用 RDS API 转换为多可用区数据库实例部署，请调用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作并将 `MultiAZ` 参数设置为 true。

# 将 RDS Custom for SQL Server 多可用区部署修改为单可用区部署
<a name="custom-sqlserver-multiaz.modify-maztosaz"></a>

您可以将现有的 RDS Custom for SQL Server 数据库实例从多可用区部署修改为单可用区部署。

## 控制台
<a name="custom-sqlserver-multiaz.modify-maztosaz.Console"></a>

**将 RDS Custom for SQL Server 数据库实例从多可用区部署修改为单可用区部署。**

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

1. 在 Amazon RDS 控制台中，选择**数据库**。

   随后会显示**数据库**窗格。

1. 选择要修改的 RDS Custom for SQL Server 数据库实例。

1. 对于**多可用区部署**，请选择**否**。

1. 在**确认**页面上，选择**立即应用**以立即应用更改。选择此选项不会导致停机，但可能会对性能产生影响。或者，您可以选择在下一个维护时段内应用更新。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。

1. 在**确认**页面上，选择**修改数据库实例**。

## AWS CLI
<a name="custom-sqlserver-multiaz.modify-maztosaz.CLI"></a>

要使用 AWS CLI 将多可用区部署修改为单可用区部署，请调用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令并包含 `--no-multi-az` 选项。指定数据库实例标识符以及要修改的其他选项的值。有关各选项的信息，请参阅 [数据库实例的设置](USER_ModifyInstance.Settings.md)。

**Example**  
以下代码通过包含 `--no-multi-az` 选项来修改 `mycustomdbinstance`。将在下一维护时段使用 `--no-apply-immediately` 应用这些更改。使用 `--apply-immediately` 可立即应用更改。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mycustomdbinstance \
    --no-multi-az  \
    --no-apply-immediately
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier mycustomdbinstance ^
    --no-multi-az \ ^
    --no-apply-immediately
```

## RDS API
<a name="custom-sqlserver-multiaz.modify-maztosaz.API"></a>

要使用 RDS API 将多可用区部署修改为单可用区部署，请调用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作并将参数 `MultiAZ` 设置为 `false`。

# RDS Custom for SQL Server 多可用区部署的失效转移过程
<a name="custom-sqlserver-multiaz.failover"></a>

如果由于基础设施缺陷而导致数据库实例发生计划内或计划外的中断时，此时如果您已启用多可用区，则 Amazon RDS 会自动切换到另一个可用区中的备用副本。完成失效转移所用的时间取决于在主数据库实例变为不可用时的数据库活动和其他条件。失效转移时间通常为 60 – 120 秒。不过，事务较多或时间较长的恢复过程可能延长故障转移时间。完成失效转移后，RDS 控制台还需要一段时间才能显示新的可用区。

**注意**  
在通过失效转移重启数据库实例时，可以手动强制执行失效转移。有关重启数据库实例的更多信息，请参阅[重启数据库实例](USER_RebootInstance.md)。

Amazon RDS 会自动处理故障转移，因此，您可以尽快恢复数据库操作而无需管理干预。如果出现下表中描述的任一情况，主数据库实例会自动切换到备用副本：您可以在 RDS 事件日志中查看这些失效转移原因。


****  

| 故障转移原因 | 描述 | 
| --- | --- | 
| `The operating system for the RDS Custom for SQL Server Multi-AZ DB instance is being patched in an offline operation` | 在操作系统补丁或安全更新的维护时段内触发了故障切换。有关更多信息，请参阅 [维护数据库实例](USER_UpgradeDBInstance.Maintenance.md)。 | 
| `The primary host of the RDS Custom for SQL Server Multi-AZ DB instance is unhealthy.` | 多可用区数据库实例部署检测到受损的主数据库实例并进行故障转移。 | 
| `The primary host of the RDS Custom for SQL Server Multi-AZ DB instance is unreachable due to loss of network connectivity.` | RDS 监控检测到主数据库实例的网络可达性故障并触发了故障转移。 | 
| `The RDS Custom for SQL Server Multi-AZ DB instance was modified by the customer.` | 数据库实例修改触发了失效转移。有关更多信息，请参阅 [修改 RDS Custom for SQL Server 数据库实例](custom-managing.modify-sqlserver.md)。 | 
| `The storage volume of the primary host of the RDS Custom for SQL Server Multi-AZ DB instance experienced a failure.` | 多可用区数据库实例部署在主数据库实例上检测到存储问题并进行故障转移。 | 
| `The user requested a failover of the RDS Custom for SQL Server Multi-AZ DB instance.` | RDS Custom for SQL Server 多可用区数据库实例已通过失效转移重启。有关更多信息，请参阅 [重启数据库实例](USER_RebootInstance.md)。 | 
| `The RDS Custom for SQL Server Multi-AZ primary DB instance is busy or unresponsive.` | 主数据库实例没有响应。我们建议您尝试以下步骤： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-sqlserver-multiaz.failover.html)  | 

要确定多可用区数据库实例是否发生故障转移，您可以执行以下操作：
+ 将数据库事件订阅设置为在故障转移启动时向您发送电子邮件或 SMS 通知。有关事件的更多信息，请参阅 [使用 Amazon RDS 事件通知](USER_Events.md)。
+ 使用 RDS 控制台或 API 操作查看数据库事件。
+ 使用 RDS 控制台、CLI 或 API 操作查看 RDS Custom for SQL Server 多可用区数据库实例部署的当前状态。

## 使用 RDS Custom for SQL Server 多可用区部署的应用程序的存活时间（TTL）设置
<a name="custom-sqlserver-multiaz.ttldns"></a>

故障转移机制自动更改数据库实例的域名系统 (DNS) 记录，使其指向备用数据库实例。因此，您需要重新建立与数据库实例之间的所有现有连接。确保任何 DNS 缓存存活时间（TTL）配置值都较低，并验证您的应用程序不会长时间缓存 DNS。TTL 值较高可能会阻止应用程序在失效转移后快速重新连接到数据库实例。

# 备份和还原 Amazon RDS Custom for SQL Server 数据库实例
<a name="custom-backup-sqlserver"></a>

与 Amazon RDS 一样，RDS Custom 会在启用备份保留时创建并保存 RDS Custom for SQL Server 数据库实例的自动备份。您还可以手动备份数据库实例。自动备份由快照备份和事务日志备份组成。在您指定的备份时段内，将对数据库实例的整个存储卷进行快照备份。按固定间隔为符合 PITR 条件的数据库进行事务日志备份。RDS Custom 根据您指定的备份保留期保存数据库实例的自动备份。您可以使用自动备份将数据库实例恢复到备份保留期内的某个时间点。

您也可以手动进行快照备份。您可以随时从这些快照备份创建新的数据库实例。有关手动创建数据库快照的更多信息，请参阅[创建 RDS Custom for SQL Server 快照](custom-backup-sqlserver.creating.md)。

尽管快照备份在操作上用作完整备份，但您只需要为增量存储用量付费。RDS Custom 数据库实例的第一个快照包含完整数据库实例的数据。相同数据库的后续快照为增量快照，这意味着仅保存在最新快照后更改的数据。

**Topics**
+ [创建 RDS Custom for SQL Server 快照](custom-backup-sqlserver.creating.md)
+ [从 RDS Custom for SQL Server 数据库快照还原](custom-backup-sqlserver.restoring.md)
+ [将 RDS Custom for SQL Server 实例还原到某个时间点](custom-backup.pitr-sqs.md)
+ [删除 RDS Custom for SQL Server 快照](custom-backup-sqlserver.deleting.md)
+ [删除 RDS Custom for SQL Server 自动备份](custom-backup-sqlserver.deleting-backups.md)

# 创建 RDS Custom for SQL Server 快照
<a name="custom-backup-sqlserver.creating"></a>

RDS Custom for SQL Server 可创建数据库实例的存储卷快照，并备份整个数据库实例而不仅仅是单个数据库。创建快照时，请指定要备份哪个 RDS Custom for SQL Server 数据库实例。为您的快照命名，以便稍后通过它进行还原。

当您创建快照时，RDS Custom for SQL Server 会为卷 `(D:)` 创建 Amazon EBS 快照，该卷是附加到数据库实例的数据库卷。为了使快照轻松与特定数据库实例关联，请使用 `DBSnapshotIdentifier`、`DbiResourceId` 和 `VolumeType` 标记它们。

创建数据库快照会导致短暂的输入/输出暂停。此暂停可持续数秒到几分钟，具体取决于数据库实例的大小和类。快照创建时间因数据库的总计数和大小而异。要详细了解符合条件可执行时间点还原（PITR）操作的数据库数量，请参阅[每种实例类类型符合 PITR 条件的数据库数量](custom-backup.pitr-sqs.md#custom-backup.pitr.sqlserver.eligiblecountperinstance)。

由于快照包含整个存储卷，因此，文件（如临时文件）的大小也会影响创建快照创建时间。要了解创建快照的更多信息，请参阅 [为 Amazon RDS 的单可用区数据库实例创建数据库快照](USER_CreateSnapshot.md)。

使用控制台或 AWS CLI 创建 RDS Custom for SQL Server 快照。

## 控制台
<a name="USER_CreateSnapshot-sqlserver.CON"></a>

**创建 RDS Custom 快照**

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

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

1. 在 RDS Custom 数据库实例列表中，选择您想拍摄快照的实例。

1. 对于**操作**，选择**拍摄快照**。

   将显示 **Take DB snapshot (拍摄数据库快照)** 窗口。

1. 在 **Snapshot name**（快照名称）框中，请输入快照的名称。

1. 选择**拍摄快照**。

## AWS CLI
<a name="USER_CreateSnapshot-sqlserver.CLI"></a>

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

指定以下选项：
+ `--db-instance-identifier` – 标识要备份的 RDS Custom 数据库实例
+ `--db-snapshot-identifier` – 命名 RDS Custom 快照，以便以后通过它进行还原

在此示例中，您将给名为 `my-custom-instance` 的 RDS Custom 数据库实例创建名为 *`my-custom-snapshot`* 的数据库快照。

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

```
1. aws rds create-db-snapshot \
2.     --db-instance-identifier my-custom-instance \
3.     --db-snapshot-identifier my-custom-snapshot
```
对于 Windows：  

```
1. aws rds create-db-snapshot ^
2.     --db-instance-identifier my-custom-instance ^
3.     --db-snapshot-identifier my-custom-snapshot
```

# 从 RDS Custom for SQL Server 数据库快照还原
<a name="custom-backup-sqlserver.restoring"></a>

在还原 RDS Custom for SQL Server 数据库实例时，需要提供数据库快照的名称以及新实例的名称。您不能从快照还原到现有的 RDS Custom 数据库实例。还原时将新建一个 RDS Custom for SQL Server 数据库实例。

从快照还原会将存储卷还原到拍摄快照的时间点。这将包括 `(D:)` 卷上存在的所有数据库和任何其它文件。

## 控制台
<a name="custom-backup-sqlserver.restoring.console"></a>

**要从数据库快照还原 RDS Custom 数据库实例**

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

1. 在导航窗格中，选择**快照**。

1. 选择要从其还原的数据库快照。

1. 对于**操作**，选择**还原快照**。

1. 请在 **Restore DB instance**（还原数据库实例）页面上，为 **DB instance identifier**（数据库实例标识符）输入还原的 RDS Custom 数据库实例的名称。

1. 选择**还原数据库实例**。

## AWS CLI
<a name="custom-backup-sqlserver.restoring.CLI"></a>

您可以通过使用 [ restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) AWS CLI 命令还原 RDS Custom 数据库快照。

如果要从中还原的快照适用于私有数据库实例，请务必同时指定正确的 `db-subnet-group-name` 和 `no-publicly-accessible`。否则，数据库实例原定设置为可公开访问。以下选项为必填：
+ `db-snapshot-identifier` – 标识要从中进行还原的快照
+ `db-instance-identifier` – 指定要从数据库快照创建的 RDS Custom 数据库实例的名称
+ `custom-iam-instance-profile` – 指定与 RDS Custom 数据库实例的基础 Amazon EC2 实例关联的实例配置文件。

以下代码为 `my-custom-instance` 还原名为 `my-custom-snapshot` 的快照。

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

```
aws rds restore-db-instance-from-db-snapshot \
  --db-snapshot-identifier my-custom-snapshot \
  --db-instance-identifier my-custom-instance \
  --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance \
  --no-publicly-accessible
```
对于 Windows：  

```
aws rds restore-db-instance-from-db-snapshot ^
  --db-snapshot-identifier my-custom-snapshot ^
  --db-instance-identifier my-custom-instance ^
  --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance ^
  --no-publicly-accessible
```

# 将 RDS Custom for SQL Server 实例还原到某个时间点
<a name="custom-backup.pitr-sqs"></a>

您可以将数据库实例还原到某个特定时间点 (PITR)，以创建新数据库实例。要支持 PITR，您的数据库实例必须已启用备份保留期。

RDS Custom for SQL Server 数据库实例的最近可还原时间取决于多个因素，但通常为当前时间的 5 分钟内。要查看某个数据库实例的最近可还原时间，请使用 AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令，并查看该数据库实例的 `LatestRestorableTime` 字段中返回的值。要在 Amazon RDS 控制台中查看每个数据库实例的最近可还原时间，请选择**自动备份**。

您可以还原至备份保留期内的任何时间点。要查看每个数据库实例的最早可还原时间，请在 Amazon RDS 控制台中选择**自动备份**。

有关 PITR 的一般信息，请参阅[将 Amazon RDS 的数据库实例还原到指定时间](USER_PIT.md)。

**Topics**
+ [RDS Custom for SQL Server 的 PITR 注意事项](#custom-backup.pitr.sqlserver)
+ [每种实例类类型符合 PITR 条件的数据库数量](#custom-backup.pitr.sqlserver.eligiblecountperinstance)
+ [使数据库不符合 PITR 资格](#custom-backup.pitr.sqlserver.ineligible)
+ [Amazon S3 中的事务日志](#custom-backup.pitr.sqlserver.tlogs)
+ [使用 AWS 管理控制台、AWS CLI 或 RDS API 进行 PITR 还原。](#custom-backup.pitr-sqs-concli)

## RDS Custom for SQL Server 的 PITR 注意事项
<a name="custom-backup.pitr.sqlserver"></a>

在 RDS Custom for SQL Server 中，PITR 与 Amazon RDS 中的 PITR 有以下重要的区别：
+ PITR 仅还原数据库实例中的数据库。它不会还原操作系统或 C: 驱动器上的文件。
+ 对于 RDS Custom for SQL Server 数据库实例，数据库将自动备份，并且只有在以下条件下才有资格用于 PITR：
  + 数据库处于联机状态。
  + 它的还原模式设置为 `FULL`。
  + 它是可写的。
  + 它的物理文件放在 D: 驱动器上。
  + 它未在 `rds_pitr_blocked_databases` 表中列出。有关更多信息，请参阅 [使数据库不符合 PITR 资格](#custom-backup.pitr.sqlserver.ineligible)。
+ 这些符合 PITR 条件的数据库由其数据库 ID 的顺序决定。RDS Custom for SQL Server 允许每个数据库实例最多 5000 个数据库。不过，针对 RDS Custom for SQL Server 数据库实例，PITR 操作还原的数据库的最大数量取决于实例类的类型。有关更多信息，请参阅 [每种实例类类型符合 PITR 条件的数据库数量](#custom-backup.pitr.sqlserver.eligiblecountperinstance)。

  其它不属于 PITR 的数据库可以从数据库快照中还原，包括用于 PITR 的自动快照备份。
+ 添加新数据库、重命名数据库或还原符合 PITR 条件的数据库将启动数据库实例的快照。
+ 当数据库实例进行扩展计算操作时，符合 PITR 条件的最大数据库数量会发生变化，具体取决于目标实例类的类型。如果实例已纵向扩展，同时允许该实例上的更多数据库符合 PITR 条件，则会拍摄新的快照。
+ 还原的数据库的名称与源数据库实例中的名称相同。您不能指定不同的名称。
+ `AWSRDSCustomSQLServerIamRolePolicy` 需要访问其它 AWS 服务。有关更多信息，请参阅 [将访问策略添加到 AWSRDSCustomSQLServerInstanceRole](custom-setup-sqlserver.md#custom-setup-sqlserver.iam.add-policy)。
+ RDS Custom for SQL Server 不支持时区更改。如果更改操作系统或数据库实例时区，PITR（和其他自动化）将无法正常工作。

## 每种实例类类型符合 PITR 条件的数据库数量
<a name="custom-backup.pitr.sqlserver.eligiblecountperinstance"></a>

下表显示了根据实例类的类型符合 PITR 条件的最大数据库数量。


| 实例类类型 | 符合 PITR 条件的数据库的最大数量 | 
| --- | --- | 
| db.\$1.large | 100 | 
| db.\$1.xlarge 至 db.\$1.2xlarge | 150 | 
| db.\$1.4xlarge 至 db.\$1.8xlarge | 300 | 
| db.\$1.12xlarge 至 db.\$1.16xlarge | 600 | 
| db.\$1.24xlarge、db.\$132xlarge | 1000 | 

`*` *表示不同实例类类型。*

数据库实例上符合 PITR 条件的最大数据库数量取决于实例类类型。该数字的范围从最小的 100 到 RDS Custom for SQL Server 支持的最大实例类类型上的 1000 不等。此限制中并不包括 Server 系统数据库 `(master, model, msdb, tempdb)`。当数据库实例纵向扩展或缩减时，根据目标实例类类型，RDS Custom 将自动更新符合 PITR 条件的数据库数量。当数据库实例上符合 PITR 条件的最大数据库数量发生更改时，RDS Custom for SQL Server 将发送 `RDS-EVENT-0352`。有关更多信息，请参阅 [自定义引擎版本事件](USER_Events.Messages.md#USER_Events.Messages.CEV)。

**注意**  
对超过 100 个数据库的 PITR 支持仅在 2023 年 8 月 26 日之后创建的数据库实例上可用。对于 2023 年 8 月 26 日之前创建的实例，无论实例类如何，符合 PITR 条件的最大数据库数量均为 100。要在 2023 年 8 月 26 日之前创建的数据库实例上启用对超过 100 个数据库的 PITR 支持，您可以执行以下操作：  
将数据库引擎版本升级到 15.00.4322.2.v1 或更高版本

在 PITR 操作期间，RDS Custom 将在还原时在源数据库实例上还原属于 PITR 的所有数据库。目标数据库实例完成还原操作后，如果启用了备份保留，数据库实例将根据目标数据库实例上符合 PITR 条件的最大数据库数量开始备份。

例如，如果您的数据库实例在具有 200 个数据库的 `db.*.xlarge` 上运行：

1. RDS Custom for SQL Server 将选择前 150 个数据库进行 PITR 备份，按其数据库 ID 排序。

1. 您可以修改实例以纵向扩展到 db.\$1.4xlarge。

1. 扩展计算操作完成后，RDS Custom for SQL Server 将选择前 300 个数据库进行 PITR 备份，按其数据库 ID 排序。现在，满足 PITR 要求条件的 200 个数据库中的每一个都符合 PITR 条件。

1. 现在，您可以修改实例以缩减回到 db.\$1.xlarge。

1. 扩展计算操作完成后，RDS Custom for SQL Server 将再次选择前 150 个数据库进行 PITR 备份，按其数据库 ID 排序。

## 使数据库不符合 PITR 资格
<a name="custom-backup.pitr.sqlserver.ineligible"></a>

您可以选择从 PITR 中排除各个数据库。要做到这一点，请将其 `database_id` 值放入 `rds_pitr_blocked_databases` 表中。使用以下 SQL 脚本创建表。

**要创建 rds\$1pitr\$1blocked\$1databases 表**
+ 请运行以下 SQL 脚本。

  ```
  create table msdb..rds_pitr_blocked_databases
  (
  database_id INT NOT NULL,
  database_name SYSNAME NOT NULL,
  db_entry_updated_date datetime NOT NULL DEFAULT GETDATE(),
  db_entry_updated_by SYSNAME NOT NULL DEFAULT CURRENT_USER,
  PRIMARY KEY (database_id)
  );
  ```

有关符合条件和不符合条件的数据库的列表，请参阅 Amazon S3 存储桶 `do-not-delete-rds-custom-$ACCOUNT_ID-$REGION-unique_identifier` 中的 `RDSCustomForSQLServer/Instances/DB_instance_resource_ID/TransactionLogMetadata` 目录中的 `RI.End` 文件。有关 `RI.End` 文件的更多信息，请参阅[Amazon S3 中的事务日志](#custom-backup.pitr.sqlserver.tlogs)。

您还可以使用以下 SQL 脚本确定符合 PITR 条件的数据库列表。将 `@limit` 变量设置为符合该实例类的 PITR 条件的最大数据库数量。有关更多信息，请参阅 [每种实例类类型符合 PITR 条件的数据库数量](#custom-backup.pitr.sqlserver.eligiblecountperinstance)。

**在数据库实例类上确定符合 PITR 条件的数据库列表**
+ 请运行以下 SQL 脚本。

  ```
  DECLARE @Limit INT;
  SET @Limit = (insert-database-instance-limit-here);
  
  USE msdb;
  IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND  TABLE_NAME = 'rds_pitr_blocked_databases'))
      WITH TABLE0 AS (
          SELECT hdrs.database_id as DatabaseId, sdb.name as DatabaseName, 'ALWAYS_ON_NOT_WRITABLE_REPLICA' as Reason, NULL as DatabaseNameOnPitrTable
          FROM sys.dm_hadr_database_replica_states hdrs
          INNER JOIN sys.databases sdb ON sdb.database_id = hdrs.database_id
          WHERE (hdrs.is_local = 1 AND hdrs.is_primary_replica = 0) 
          OR (sys.fn_hadr_is_primary_replica (sdb.name) = 1 AND DATABASEPROPERTYEX (sdb.name, 'Updateability') = 'READ_ONLY')
      ),
      TABLE1 as (
              SELECT dbs.database_id as DatabaseId, sysdbs.name as DatabaseName, 'OPTOUT' as Reason,
              CASE WHEN dbs.database_name = sysdbs.name THEN NULL ELSE dbs.database_name END AS DatabaseNameOnPitrTable
              FROM msdb.dbo.rds_pitr_blocked_databases dbs
              INNER JOIN sys.databases sysdbs ON dbs.database_id = sysdbs.database_id
              WHERE sysdbs.database_id > 4
              ),
      TABLE2 as (
              SELECT
              db.name AS DatabaseName,
              db.create_date AS CreateDate,
              db.state_desc AS DatabaseState,
              db.database_id AS DatabaseId,
              rs.database_guid AS DatabaseGuid,
              rs.last_log_backup_lsn AS LastLogBackupLSN,
              rs.recovery_fork_guid RecoveryForkGuid,
              rs.first_recovery_fork_guid AS FirstRecoveryForkGuid,
              db.recovery_model_desc AS RecoveryModel,
              db.is_auto_close_on AS IsAutoClose,
              db.is_read_only as IsReadOnly,
              NEWID() as FileName,
              CASE WHEN(db.state_desc = 'ONLINE'
                      AND db.recovery_model_desc != 'SIMPLE' 
                      AND((db.is_auto_close_on = 0 and db.collation_name IS NOT NULL) OR db.is_auto_close_on = 1)) 
                      AND db.is_read_only != 1
                      AND db.user_access = 0
                      AND db.source_database_id IS NULL
                      AND db.is_in_standby != 1
                      THEN 1 ELSE 0 END AS IsPartOfSnapshot,
              CASE WHEN db.source_database_id IS NULL THEN 0 ELSE 1 END AS IsDatabaseSnapshot
              FROM sys.databases db
              INNER JOIN sys.database_recovery_status rs
              ON db.database_id = rs.database_id
              WHERE DB_NAME(db.database_id) NOT IN('tempdb') AND
              db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE1) AND
              db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE0)
          ),
          TABLE3 as(
              Select @Limit+count(DatabaseName) as TotalNumberOfDatabases from TABLE2 where TABLE2.IsPartOfSnapshot=1 and DatabaseName in ('master','model','msdb')
          )
          SELECT TOP(SELECT TotalNumberOfDatabases from TABLE3)  DatabaseName,CreateDate,DatabaseState,DatabaseId from TABLE2 where TABLE2.IsPartOfSnapshot=1
          ORDER BY TABLE2.DatabaseID ASC
  ELSE
      WITH TABLE0 AS (
          SELECT hdrs.database_id as DatabaseId, sdb.name as DatabaseName, 'ALWAYS_ON_NOT_WRITABLE_REPLICA' as Reason, NULL as DatabaseNameOnPitrTable
          FROM sys.dm_hadr_database_replica_states hdrs
          INNER JOIN sys.databases sdb ON sdb.database_id = hdrs.database_id
          WHERE (hdrs.is_local = 1 AND hdrs.is_primary_replica = 0) 
          OR (sys.fn_hadr_is_primary_replica (sdb.name) = 1 AND DATABASEPROPERTYEX (sdb.name, 'Updateability') = 'READ_ONLY')
      ),
      TABLE1 as (
              SELECT
              db.name AS DatabaseName,
              db.create_date AS CreateDate,
              db.state_desc AS DatabaseState,
              db.database_id AS DatabaseId,
              rs.database_guid AS DatabaseGuid,
              rs.last_log_backup_lsn AS LastLogBackupLSN,
              rs.recovery_fork_guid RecoveryForkGuid,
              rs.first_recovery_fork_guid AS FirstRecoveryForkGuid,
              db.recovery_model_desc AS RecoveryModel,
              db.is_auto_close_on AS IsAutoClose,
              db.is_read_only as IsReadOnly,
              NEWID() as FileName,
              CASE WHEN(db.state_desc = 'ONLINE'
                      AND db.recovery_model_desc != 'SIMPLE' 
                      AND((db.is_auto_close_on = 0 and db.collation_name IS NOT NULL) OR db.is_auto_close_on = 1)) 
                      AND db.is_read_only != 1
                      AND db.user_access = 0
                      AND db.source_database_id IS NULL
                      AND db.is_in_standby != 1
                      THEN 1 ELSE 0 END AS IsPartOfSnapshot,
              CASE WHEN db.source_database_id IS NULL THEN 0 ELSE 1 END AS IsDatabaseSnapshot
              FROM sys.databases db
              INNER JOIN sys.database_recovery_status rs
              ON db.database_id = rs.database_id
              WHERE DB_NAME(db.database_id) NOT IN('tempdb') AND
              db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE0)
          ),
          TABLE2 as(
              SELECT @Limit+count(DatabaseName) as TotalNumberOfDatabases from TABLE1 where TABLE1.IsPartOfSnapshot=1 and DatabaseName in ('master','model','msdb')
          )
          select top(select TotalNumberOfDatabases from TABLE2)  DatabaseName,CreateDate,DatabaseState,DatabaseId from TABLE1 where TABLE1.IsPartOfSnapshot=1
          ORDER BY TABLE1.DatabaseID ASC
  ```

**注意**  
仅作为符号链接的数据库也被排除在符合 PITR 操作条件的数据库之外。上述查询不会根据此条件进行筛选。

## Amazon S3 中的事务日志
<a name="custom-backup.pitr.sqlserver.tlogs"></a>

备份保留期决定了 RDS Custom for SQL Server 数据库实例的事务日志是否会自动提取并上传到 Amazon S3。非零值表示创建了自动备份，且 RDS Custom 代理每 5 分钟将事务日志上传到 S3 一次。

S3 上的事务日志文件将使用您在创建数据库实例时提供的 AWS KMS key 静态加密。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[使用服务器端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

每个数据库的事务日志将被上传到名为 `do-not-delete-rds-custom-$ACCOUNT_ID-$REGION-unique_identifier` 的 S3 存储桶。S3 存储桶中的 `RDSCustomForSQLServer/Instances/DB_instance_resource_ID` 目录包含两个子目录：
+ `TransactionLogs` – 包含每个数据库的事务日志及其各自的元数据。

  事务日志文件名称遵循模式 `yyyyMMddHHmm.database_id.timestamp`，例如：

  ```
  202110202230.11.1634769287
  ```

  带有后缀 `_metadata` 的相同文件名称包含有关事务日志的信息，例如日志序列号、数据库名称和 `RdsChunkCount`。`RdsChunkCount` 确定有多少个物理文件代表单个事务日志文件。您可能会看到带有后缀 `_0001`、`_0002` 等的文件，它们表示事务日志文件的物理数据块。如果要使用分块的事务日志文件，请确保在下载后合并这些数据块。

  考虑您拥有以下文件的情况：
  + `202110202230.11.1634769287`
  + ` 202110202230.11.1634769287_0001`
  + ` 202110202230.11.1634769287_0002 `
  + ` 202110202230.11.1634769287_metadata`

  `RdsChunkCount` 为 `3`。合并文件的顺序如下：`202110202230.11.1634769287`、` 202110202230.11.1634769287_0001`、`202110202230.11.1634769287_0002`。
+ `TransactionLogMetadata` – 包含有关事务日志提取的每次迭代的元数据信息。

  `RI.End` 文件包含提取了事务日志的所有数据库的信息，以及所有存在但没有提取其事务日志的数据库的信息。`RI.End` 文件名称遵循模式 `yyyyMMddHHmm.RI.End.timestamp`，例如：

  ```
  202110202230.RI.End.1634769281
  ```

## 使用 AWS 管理控制台、AWS CLI 或 RDS API 进行 PITR 还原。
<a name="custom-backup.pitr-sqs-concli"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 将 RDS Custom for SQL Server 数据库实例还原到某个时间点。

### 控制台
<a name="custom-backup-sqs.pitr2.CON"></a>

**要将 RDS Custom 数据库实例还原至指定时间**

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

1. 在导航窗格中，选择 **Automated backups**（自动备份）。

1. 选择要还原的 RDS Custom 数据库实例。

1. 对于 **Actions (操作)**，选择 **Restore to point in time (还原到时间点)**。

   此时会显示**还原到时间点**窗口。

1. 选择**最近可还原时间**以还原到可能的最近时间，或选择**自定义**来选择时间。

   如果您选择 **Custom**（自定义），请输入要将实例集群还原到的日期和时间。

   时间以您的本地时区显示，表示为协调世界时 (UTC) 的偏移量。例如，UTC-5 是东部标准时间/中部夏令时。

1. 对于 **DB instance identifier**（数据库实例标识符），请输入目标还原后的 RDS Custom 数据库实例的名称。名称必须唯一。

1. 根据需要选择其他选项，例如数据库实例类。

1. 选择**还原到时间点**。

### AWS CLI
<a name="custom-backup-sqs.pitr2.CLI"></a>

通过使用 [ restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) AWS CLI 命令创建新的 RDS Custom 数据库实例，将数据库实例还原到指定时间。

使用以下选项之一指定要从中恢复的备份：
+ `--source-db-instance-identifier mysourcedbinstance`
+ `--source-dbi-resource-id dbinstanceresourceID`
+ `--source-db-instance-automated-backups-arn backupARN`

`custom-iam-instance-profile` 选项是必需的。

截至指定的时间，以下示例会将 `my-custom-db-instance` 还原到名为 `my-restored-custom-db-instance` 的新数据库实例。

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

```
1. aws rds restore-db-instance-to-point-in-time \
2.     --source-db-instance-identifier my-custom-db-instance\
3.     --target-db-instance-identifier my-restored-custom-db-instance \
4.     --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance \
5.     --restore-time 2022-10-14T23:45:00.000Z
```
对于：Windows  

```
1. aws rds restore-db-instance-to-point-in-time ^
2.     --source-db-instance-identifier my-custom-db-instance ^
3.     --target-db-instance-identifier my-restored-custom-db-instance ^
4.     --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance ^
5.     --restore-time 2022-10-14T23:45:00.000Z
```

# 删除 RDS Custom for SQL Server 快照
<a name="custom-backup-sqlserver.deleting"></a>

如果不再需要，您可以删除 RDS Custom for SQL Server 管理的数据库快照。对于 Amazon RDS 和 RDS Custom 数据库实例而言，删除过程是相同的。

二进制卷和根卷的 Amazon EBS 快照会在您的账户中保留更长时间，因为它们可能与您账户中运行的某些实例或其他 RDS Custom for SQL Server 快照关联。当这些 EBS 快照不再与任何现有 RDS Custom for SQL Server 资源（数据库实例或备份）相关后，将会被自动删除。

## 控制台
<a name="USER_DeleteSnapshot-sqlserver.CON"></a>

**要删除 RDS Custom 数据库实例的快照**

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

1. 在导航窗格中，选择**快照**。

1. 选择要删除的数据库快照。

1. 对于 **Actions**（操作），选择 **Delete snapshot**（删除快照）。

1. 在确认页面上选择 **Delete (删除)**。

## AWS CLI
<a name="USER_DeleteSnapshot-sqlserver.CLI"></a>

要删除 RDS Custom 快照，请使用 AWS CLI 命令 [delete-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-snapshot.html)。

以下选项为必填项：
+ `--db-snapshot-identifier` – 要删除的快照

以下示例将删除 `my-custom-snapshot` 数据库快照。

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

```
1. aws rds delete-db-snapshot \  
2.   --db-snapshot-identifier my-custom-snapshot
```
对于 Windows：  

```
1. aws rds delete-db-snapshot ^
2.   --db-snapshot-identifier my-custom-snapshot
```

# 删除 RDS Custom for SQL Server 自动备份
<a name="custom-backup-sqlserver.deleting-backups"></a>

当不再需要 RDS Custom for SQL Server 的保留自动备份时，您可以删除它们。此过程与删除 Amazon RDS 备份的过程相同。

## 控制台
<a name="USER_WorkingWithAutomatedBackups-sqlserver-Deleting.CON"></a>

**删除保留的自动备份**

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

1. 在导航窗格中，选择 **Automated backups**（自动备份）。

1. 选择 **Retained (保留)**。

1. 选择要删除的保留自动备份。

1. 对于 **Actions (操作)**，选择 **Delete (删除)**。

1. 在确认页面上，输入 **delete me** 并选择 **Delete (删除)**。

## AWS CLI
<a name="USER_WorkingWithAutomatedBackups-sqlserver-Deleting.CLI"></a>

可以通过使用 AWS CLI 命令 [delete-db-instance-automated-backup](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance-automated-backup.html) 删除保留的自动备份。

以下选项用于删除保留的自动备份：
+ `--dbi-resource-id` – 源 RDS Custom 数据库实例的资源标识符。

  可以通过使用 AWS CLI 命令 [describe-db-instance-automated-backups](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instance-automated-backups.html) 查找保留自动备份的源数据库实例的资源标识符。

以下示例删除具有源数据库实例资源标识符 `custom-db-123ABCEXAMPLE` 的保留自动备份。

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

```
1. aws rds delete-db-instance-automated-backup \
2.     --dbi-resource-id custom-db-123ABCEXAMPLE
```
对于 Windows：  

```
1. aws rds delete-db-instance-automated-backup ^
2.     --dbi-resource-id custom-db-123ABCEXAMPLE
```

# 复制 Amazon RDS Custom for SQL Server 数据库快照
<a name="custom-copying-snapshot-sqlserver"></a>

使用 RDS Custom for SQL Server，可以复制自动备份和手动数据库快照。复制快照后，您创建的副本为手动快照。可以创建自动备份或手动快照的多个副本，但每个副本必须具有唯一的标识符。

只能在 RDS Custom for SQL Server 可用的不同 AWS 区域中复制同一 AWS 账户中的快照。目前不支持以下操作：
+ 在同一个 AWS 区域中复制数据库快照。
+ 跨 AWS 账户复制数据库快照。

RDS Custom for SQL Server 支持增量快照复制。有关更多信息，请参阅 [增量快照复制的注意事项](USER_CopySnapshot.md#USER_CopySnapshot.Incremental)。

**Topics**
+ [限制](#custom-copying-snapshot-sqlserver.Limitations)
+ [处理加密](#custom-copying-snapshot-sqlserver.Encryption)
+ [跨区域复制](#custom-copying-snapshot-sqlserver.XRCopy)
+ [使用自定义引擎版本（CEV）创建的数据库实例的快照](#custom-copying-snapshot-sqlserver.CEVSnap)
+ [为您的 IAM 主体授予所需的权限](#custom-copying-snapshot-sqlserver.GrantPermIAM)
+ [复制数据库快照](#custom-copying-snapshot-sqlserver.CopyingDBSnapshot)

## 限制
<a name="custom-copying-snapshot-sqlserver.Limitations"></a>

以下限制适用于复制 RDS Custom for SQL Server 的数据库快照：
+ 如果您在目标快照可用之前删除了源快照，则快照复制会失败。在删除源快照之前，请确保目标快照的状态为 `AVAILABLE`。
+ 不能在数据库快照复制请求中指定选项组名称或复制选项组。
+ 如果在复制过程之前或期间删除源数据库快照的任何相关 AWS 资源，则复制快照请求可能会异步失败。
  + 如果您删除源数据库实例的服务主密钥（SMK）备份文件（存储在您账户的 RDS Custom 托管式 S3 存储桶中），则数据库快照复制将异步成功。但是，依赖于 SMK 的 SQL Server 功能（例如启用 TDE 的数据库）会遇到问题。有关更多信息，请参阅 [对 RDS Custom for SQL Server 中启用 TDE 的数据库的 PENDING\$1RECOVERY 状态进行故障排除](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.pending_recovery)。
+ 目前不支持在同一 AWS 区域中复制数据库快照。
+ 目前不支持跨 AWS 账户复制数据库快照。

复制 Amazon RDS 的数据库快照的限制也适用于 RDS Custom for SQL Server。有关更多信息，请参阅 [限制](USER_CopySnapshot.md#USER_CopySnapshot.Limitations)。

## 处理加密
<a name="custom-copying-snapshot-sqlserver.Encryption"></a>

所有 RDS Custom for SQL Server 数据库实例和数据库快照都使用 KMS 密钥进行加密。只能将加密快照复制到加密快照，因此，必须为数据库快照复制请求指定在目标 AWS 区域中有效的 KMS 密钥。

源快照在复制过程中保持加密状态。Amazon RDS 使用信封加密，来在复制操作期间通过指定的目标 AWS 区域 KMS 密钥保护数据。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。

## 跨区域复制
<a name="custom-copying-snapshot-sqlserver.XRCopy"></a>

您可以跨 AWS 区域复制数据库快照。但是，跨区域快照复制具有某些限制和注意事项。

### 授权 RDS 跨 AWS 区域通信以进行快照复制
<a name="custom-copying-snapshot-sqlserver.XRCopy.Authorize"></a>

成功处理跨区域数据库快照复制请求后，RDS 将开始复制。此时将创建供 RDS 访问源快照的授权请求。此授权请求将源数据库快照链接到目标数据库快照。这支持 RDS 仅复制到指定的目标快照。

RDS 使用服务相关的 IAM 角色中的 `rds:CrossRegionCommunication` 权限对授权进行验证。如果复制操作获得授权，则 RDS 可以与源区域通信并完成复制操作。

RDS 无权访问之前未经 CopyDBSnapshot 请求授权的数据库快照。复制完成后，将撤销授权。

RDS 使用服务链接的角色来验证源区域中的授权。如果在复制过程中删除了服务相关角色，则复制将失败。

有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[使用服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。

### 使用 AWS Security Token Service 凭证
<a name="custom-copying-snapshot-sqlserver.XRCopy.STS"></a>

来自全局 AWS Security Token Service (AWS STS) 端点的会话令牌仅在默认启用的 AWS 区域（商业区域）中有效。在 `assumeRole` 中使用来自 AWS STS API 操作的凭证时， 如果源区域是选择加入区域，请使用区域端点。否则，请求将失败。您的凭证必须在这两个区域中都有效，仅当您使用区域 AWS STS 端点时，这一点才适用于选择加入区域。

要使用全局端点，请确保在操作中为两个区域都启用了该端点。在 AWS STS 账户设置中，将全局端点设置为“在所有 AWS 区域 区域均 `Valid`”。

有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[管理 AWS 区域中的 AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)。

## 使用自定义引擎版本（CEV）创建的数据库实例的快照
<a name="custom-copying-snapshot-sqlserver.CEVSnap"></a>

对于使用[自定义引擎版本（CEV）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev-sqlserver.html)的数据库实例的数据库快照，RDS 会将 CEV 与数据库快照关联。要跨 AWS 区域复制与 CEV 关联的源数据库快照，RDS 会将 CEV 与源数据库快照一起复制到目标区域。

如果要将与同一 CEV 关联的多个数据库快照复制到同一个目标区域，则第一个复制请求会复制关联的 CEV。后续请求的复制过程会找到最初复制的 CEV，并将其与以下数据库快照副本相关联。现有 CEV 副本必须处于 `AVAILABLE` 状态，才能与数据库快照副本相关联。

要复制与 CEV 关联的数据库快照，请求者的 IAM 策略必须具有相应的权限，来授权复制数据库快照和复制关联的 CEV。请求者的 IAM 策略中需要以下权限，才能支持复制关联的 CEV：
+ `rds:CopyCustomDBEngineVersion` - 请求者 IAM 主体需要具有相应的权限，可将源 CEV 与源数据库快照一起复制到目标区域。如果请求者 IAM 主体未获得复制源 CEV 的授权，则快照复制请求将由于授权错误而失败。
+ `ec2:CreateTags` - 源 CEV 的底层 EC2 AMI 将复制到目标区域，以作为 CEV 副本的一部分。在复制 AMI 之前，RDS Custom 会尝试使用 `AWSRDSCustom` 标签来标记 AMI。确保请求者 IAM 主体有权针对源区域中源 CEV 底层的 AMI 创建标签。

有关 CEV 复制权限的信息，请参阅[为您的 IAM 主体授予所需的权限](#custom-copying-snapshot-sqlserver.GrantPermIAM)。

## 为您的 IAM 主体授予所需的权限
<a name="custom-copying-snapshot-sqlserver.GrantPermIAM"></a>

确保您有足够的访问权限来复制 RDS Custom for SQL Server 数据库快照。使用控制台或 CLI 复制数据库快照的 IAM 角色或用户（称为 IAM 主体）必须具有以下任一策略，才能成功创建数据库实例：
+ `AdministratorAccess` 策略，或者
+ 具有以下其他权限的 `AmazonRDSFullAccess` 策略：

  ```
  s3:CreateBucket
  s3:GetBucketPolicy
  s3:PutBucketPolicy
  kms:CreateGrant
  kms:DescribeKey
  ec2:CreateTags
  ```

RDS Custom 在跨 AWS 区域复制快照期间使用这些权限。这些权限在您的账户中配置执行 RDS Custom 操作所需的资源。有关 `kms:CreateGrant` 权限的更多信息，请参阅 [AWS KMS key 管理](Overview.Encryption.Keys.md)。

除 `AmazonRDSFullAccess` 策略外，以下 JSON 策略示例还授予所需的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateS3BucketAndReadWriteBucketPolicy",
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:PutBucketPolicy",
                "s3:GetBucketPolicy"
            ],
            "Resource": "arn:aws:s3:::do-not-delete-rds-custom-*"
        },
        {
            "Sid": "CreateKmsGrant",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CreateEc2Tags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**注意**  
确保列出的权限不受服务控制策略（SCP）、权限边界或与 IAM 主体关联的会话策略的限制。

如果您在请求者的 IAM 策略中使用带有上下文密钥的条件，则某些条件可能会导致请求失败。有关由于 IAM 策略条件而导致的常见陷阱的更多信息，请参阅[请求跨区域数据库快照复制](USER_CopySnapshot.md#USER_CopySnapshot.AcrossRegions.Policy)。

## 复制数据库快照
<a name="custom-copying-snapshot-sqlserver.CopyingDBSnapshot"></a>

使用以下过程复制数据库快照。对于每个 AWS 账户，一次最多可以从一个 AWS 区域向另一个区域复制 20 个数据库快照。如果您将数据库快照复制到另一个 AWS 区域，则可创建保留在该 AWS 区域中的手动数据库快照。从源 AWS 区域复制出数据库快照会产生 Amazon RDS 数据传输费用。有关数据传输定价的更多信息，请参阅 [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)。

在新 AWS 区域中创建数据库快照副本后，该数据库快照副本的行为与该 AWS 区域中所有其他数据库快照的行为相同。

可以使用 AWS 管理控制台、AWS CLI 或 Amazon RDS API 来复制数据库快照。

------
#### [ Console ]

以下过程使用 AWS 管理控制台复制 RDS Custom for SQL Server 数据库快照。

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

1. 在导航窗格中，选择**快照**。

1. 选择要复制的 RDS Custom for SQL Server 数据库快照。

1. 在**操作**下拉列表中，选择**复制快照**。  
![\[Amazon RDS 控制台中的复制快照页面。设置已加载到页面中。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/XRSC-Snapshot-Copy.png)

1. 要将数据库快照复制到其他 AWS 区域，请将**目标区域**设置为所需的值。
**注意**  
目标 AWS 区域必须具有与源 AWS 区域相同的可用数据库引擎版本。

1. 对于**新数据库快照标识符**，输入数据库快照的唯一名称。可以创建自动备份或手动快照的多个副本，但每个副本必须具有唯一的标识符。

1. (可选) 选择 **Copy Tags (复制标签)** 将标签和值从快照复制到快照的副本。

1. 对于**加密**，指定用于加密数据库快照副本的 KMS 密钥标识符。
**注意**  
RDS Custom for SQL Server 对所有数据库快照进行加密。您无法创建不加密的数据库快照。

1. 选择**复制快照**。

RDS Custom for SQL Server 在您选择的 AWS 区域中创建数据库实例的数据库快照副本。

------
#### [ AWS CLI ]

可以使用 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/copy-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/copy-db-snapshot.html) 复制 RDS Custom for SQL Server 数据库快照。如果您将快照复制到新 AWS 区域，请在新 AWS 区域中运行命令。以下选项用于复制数据库快照。并非所有情况下都需要所有选项。
+ `--source-db-snapshot-identifier` – 源数据库快照的标识符。
  + 如果源快照与副本位于不同 AWS 区域，则指定有效的数据库快照 ARN。例如 `arn:aws:rds:us-west-2:123456789012:snapshot:instance1-snapshot-12345678`。
+ `--target-db-snapshot-identifier` – 数据库快照的新副本的标识符。
+ `--kms-key-id` – 加密的数据库快照的 KMS 密钥标识符。KMS 密钥标识符是 Amazon Resource Name (ARN)、密钥标识符或 KMS 密钥的别名。
  + 如果将加密快照复制到不同 AWS 区域，必须为目标 AWS 区域指定 KMS 密钥。KMS 密钥特定于在其中创建它们的 AWS 区域，您无法将一个 AWS 区域中的加密密钥用于另一个 AWS 区域，除非使用多区域密钥。有关多区域 KMS 密钥的更多信息，请参阅[在 AWS KMS 中使用多区域密钥](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)。
+ `--copy-tags` – 将源快照中的标签和值包含到快照的副本中。

不支持使用以下选项来复制 RDS Custom for SQL Server 数据库快照：
+ `--copy-option-group `
+ `--option-group-name`
+ `--pre-signed-url`
+ `--target-custom-availability-zone`

以下代码示例将加密的数据库快照从美国西部（俄勒冈州）区域复制到美国东部（弗吉尼亚州北部）。在目标 (us-east-1) 区域运行该命令。

对于 Linux、macOS 或 Unix：

```
aws rds copy-db-snapshot \
     --region us-east-1 \
    --source-db-snapshot-identifier arn:aws:rds:us-west-2:123456789012:snapshot:instance1-snapshot-12345678 \
    --target-db-snapshot-identifier mydbsnapshotcopy \
    --kms-key-id a1b2c3d4-1234-5678-wxyz-a1b2c3d4d5e6
```

对于 Windows：

```
aws rds copy-db-snapshot ^
     --region us-east-1 ^
    --source-db-snapshot-identifier arn:aws:rds:us-west-2:123456789012:snapshot:instance1-snapshot-12345678 ^
    --target-db-snapshot-identifier mydbsnapshotcopy ^
    --kms-key-id a1b2c3d4-1234-5678-wxyz-a1b2c3d4d5e6
```

------
#### [ RDS API ]

可以使用 Amazon RDS API 操作 [CopyDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CopyDBSnapshot.html) 复制 RDS Custom for SQL Server 数据库快照。如果您将快照复制到新 AWS 区域，请在新 AWS 区域中执行操作。以下参数用于复制数据库快照。并非所有参数都是必需的。
+ `SourceDBSnapshotIdentifier` – 源数据库快照的标识符。
  + 如果源快照与副本位于不同 AWS 区域，则指定有效的数据库快照 ARN。例如 `arn:aws:rds:us-west-2:123456789012:snapshot:instance1-snapshot-12345678`。
+ `TargetDBSnapshotIdentifier` – 数据库快照的新副本的标识符。
+ `KmsKeyId` – 加密的数据库快照的 KMS 密钥标识符。KMS 密钥标识符是 Amazon Resource Name (ARN)、密钥标识符或 KMS 密钥的别名。
  + 如果将加密快照复制到不同 AWS 区域，必须为目标 AWS 区域指定 KMS 密钥。KMS 密钥特定于在其中创建它们的 AWS 区域，您无法将一个 AWS 区域中的加密密钥用于另一个 AWS 区域，除非使用多区域密钥。有关多区域 KMS 密钥的更多信息，请参阅[在 AWS KMS 中使用多区域密钥](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)。
+ `CopyTags` – 将此参数设置为 `true`，来将标签和值从源快照复制到快照的副本。默认值为 `false`。

不支持使用以下选项来复制 RDS Custom for SQL Server 数据库快照：
+ `CopyOptionGroup`
+ `OptionGroupName`
+ `PreSignedUrl`
+ `TargetCustomAvailabilityZone`

以下代码使用新名称 `mydbsnapshotcopy`，在 US East (N. Virginia) 区域中创建快照的副本。

```
https://rds.us-east-1.amazonaws.com/
    ?Action=CopyDBSnapshot
    &KmsKeyId=a1b2c3d4-1234-5678-wxyz-a1b2c3d4d5e6
    &SourceDBSnapshotIdentifier=arn%3Aaws%3Ards%3Aus-west-2%3A123456789012%3Asnapshot%3Ainstance1-snapshot-12345678
    &TargetDBSnapshotIdentifier=mydbsnapshotcopy
    &Version=2014-10-31
    &X-Amz-Algorithm=AWS4-HMAC-SHA256
    &X-Amz-Credential=AKIADQKE4SARGYLE/20161117/us-east-1/rds/aws4_request
    &X-Amz-Date=20161117T221704Z
    &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date
    &X-Amz-Signature=da4f2da66739d2e722c85fcfd225dc27bba7e2b8dbea8d8612434378e52adccf
```

------

# 将本地数据库迁移到 Amazon RDS Custom for SQL Server
<a name="custom-migrating"></a>

您可以使用以下过程通过本机备份和还原将本地 Microsoft SQL Server 数据库迁移到 Amazon RDS Custom for SQL Server。

1. 在本地数据库实例上对数据库进行完整备份。

1. 将备份文件上载到 Amazon S3。

1. 将备份文件从 S3 下载到 RDS Custom for SQL Server 数据库实例。

1. 使用 RDS Custom for SQL Server 数据库实例上已下载的备份文件还原数据库。

此过程解释了使用本机完全备份和还原将数据库从本地迁移到 RDS Custom for SQL Server 的情况。为了缩短迁移过程中的割接时间，您也可以考虑使用差异备份或日志备份。

有关 RDS for SQL Server 的本机备份和还原的一般信息，请参阅[使用本机备份和还原导入和导出 SQL Server 数据库](SQLServer.Procedural.Importing.md)。

**Topics**
+ [先决条件](#custom-migrating.prereqs)
+ [备份本地数据库](#custom-migrating.backup)
+ [将备份文件上载到 Amazon S3](#custom-migrating.upload)
+ [从 Amazon S3 下载备份文件](#custom-migrating.upload)
+ [将备份文件还原到 RDS Custom for SQL Server 数据库实例](#custom-migrating.restore)

## 先决条件
<a name="custom-migrating.prereqs"></a>

在迁移数据库之前，请执行以下任务：

1. 为 RDS Custom for SQL Server 数据库实例配置远程桌面连接 (RDP)。有关更多信息，请参阅 [使用 RDP 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.rdp.md)。

1. 配置对 Amazon S3 的访问权限，以便您可以上载和下载数据库备份文件。

## 备份本地数据库
<a name="custom-migrating.backup"></a>

您可以使用 SQL Server 本机备份在本地数据库实例上对数据库进行完整备份。

以下示例显示了称为 `mydatabase` 的数据库备份，以及指定用于减小备份文件大小的 `COMPRESSION` 选项。

**要备份本地数据库**

1. 使用 SQL Server Management Studio (SSMS)，连接到本地 SQL Server 实例。

1. 运行以下 T-SQL 命令。

   ```
   backup database mydatabase to
   disk ='C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\mydb-full-compressed.bak'
   with compression;
   ```

## 将备份文件上载到 Amazon S3
<a name="custom-migrating.upload"></a>

您可以使用 AWS 管理控制台 将备份文件 `mydb-full-compressed.bak` 上载到 Amazon S3。

**要将备份文件上载到 S3**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 对于 **Buckets**（存储桶），选择要将备份文件上载到的存储桶的名称。

1. 请选择 **Upload**（上传）。

1. 在**上传**窗口中，执行下列操作之一：
   + 将 `mydb-full-compressed.bak` 拖放到 **Upload**（上载）窗口。
   + 选择 **Add file**（添加文件），选择 `mydb-full-compressed.bak`，然后选择 **Open**（打开）。

   Amazon S3 将备份文件上载为 S3 对象。上传完成后，您可以在**上传：状态**页面上看到成功消息。

## 从 Amazon S3 下载备份文件
<a name="custom-migrating.upload"></a>

您可以使用控制台将备份文件从 S3 下载到 RDS Custom for SQL Server 数据库实例。

**要从 S3 下载备份文件**

1. 使用 RDP 连接到 RDS Custom for SQL Server 数据库实例。

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在 **Buckets**（存储桶）列表中，选择包含备份文件的存储桶的名称。

1. 选择备份文件 `mydb-full-compressed.bak`。

1. 对于 **Actions**（操作），选择 **Download as**（下载为）。

1. 打开提供的链接的上下文（右键单击）菜单，然后选择 **Save As**（另存为）。

1. 将 `mydb-full-compressed.bak` 保存到 `D:\rdsdbdata\BACKUP` 目录。

## 将备份文件还原到 RDS Custom for SQL Server 数据库实例
<a name="custom-migrating.restore"></a>

您可以使用 SQL Server 本机还原将备份文件还原到 RDS Custom for SQL Server 数据库实例。

在此示例中，因为数据和日志文件目录与本地数据库实例不同，将指定 `MOVE` 选项。

**要恢复备份文件**

1. 使用 SSMS，连接到 RDS Custom for SQL Server 数据库实例。

1. 运行以下 T-SQL 命令。

   ```
   restore database mydatabase from disk='D:\rdsdbdata\BACKUP\mydb-full-compressed.bak'
   with move 'mydatabase' to 'D:\rdsdbdata\DATA\mydatabase.mdf',
   move 'mydatabase_log' to 'D:\rdsdbdata\DATA\mydatabase_log.ldf';
   ```

# RDS Custom for SQL Server 操作系统更新
<a name="custom-os-upgrade"></a>

RDS Custom for SQL Server 提供以下方法来将操作系统更新应用于 RDS 提供的引擎版本（RPEV）实例：
+ *系统更新维护操作*
+ *数据库次要版本升级*
  + 使用 RPEV 升级数据库次要引擎版本包括最新的操作系统更新。如果要将操作系统更新与 SQL Server 次要版本升级相结合，则此方法特别有用。有关更多信息，请参阅 [升级 Amazon RDS Custom for SQL Server 数据库实例](custom-upgrading-sqlserver.md)。

## 操作系统更新的场景
<a name="custom-os-upgrade.Scenarios"></a>

有两种方法可以管理 RDS Custom for SQL Server 实例的操作系统更新：
+ 对于单可用区实例，实例在操作系统更新期间不可用。
+ 对于多可用区部署，RDS 通过以下方式应用操作系统更新：
  + 首先，RDS 对备用实例执行操作系统更新。
  + RDS 失效转移到升级后的备用数据库实例，使其成为新的主数据库实例。
  + 最后，RDS 对新的备用数据库实例执行操作系统更新。

多可用区部署的停机时间是失效转移所花费的时间。

## 使用系统更新维护操作应用操作系统更新
<a name="custom-os-upgrade.SystemUpdates"></a>

要将操作系统更新应用于 Amazon RDS RPEV 实例，可以使用 AWS 管理控制台、AWS CLI 或 RDS API。有关更多信息，请参阅 [为 RDS 数据库实例更新操作系统](USER_UpgradeDBInstance.Maintenance.md#OS_Updates)。

**Example**  
对于 Linux、macOS 或 Unix：  
**步骤 1：检查是否有可用更新**  
使用 `describe-pending-maintenance-actions` 命令来查看您的实例是否有操作系统更新可用：  

```
aws rds describe-pending-maintenance-actions
```
响应示例：  

```
{
    "PendingMaintenanceActions": [
        {
            "ResourceIdentifier": "arn:aws:rds:us-east-1:111122223333:db:my-sqlserver-instance",
            "PendingMaintenanceActionDetails": [
                {
                    "Action": "system-update",
                    "Description": "New Operating System update is available"
                }
            ]
        }
    ]
}
```
操作类型为 `system-update` 表示操作系统更新可用于您的实例。  
**步骤 2：应用操作系统更新**  
使用 `apply-pending-maintenance-action` 命令安排更新：  

```
aws rds apply-pending-maintenance-action \ 
                --resource-identifier arn:aws:rds:us-east-1:111122223333:db:my-sqlserver-instance \ 
                --apply-action system-update \ 
                --opt-in-type immediate
```
`opt-in-type` 输入具有以下选项：  
+ `immediate`：立即应用更新
+ `next-maintenance`：在下一个安排的维护时段内应用更新
+ `undo-opt-in`：取消之前安排的更新
响应示例：  

```
{
    "ResourcePendingMaintenanceActions": {
        "ResourceIdentifier": "arn:aws:rds:us-east-1:111122223333:db:my-sqlserver-instance",
        "PendingMaintenanceActionDetails": [
            {
                "Action": "system-update",
                "AutoAppliedAfterDate": "2024-04-10T20:41:01.695000+00:00",
                "ForcedApplyDate": "2024-04-10T20:41:01.694000+00:00",
                "CurrentApplyDate": "2024-04-10T20:41:01.695000+00:00",
                "Description": "New Operating System update is available"
            }
        ]
    }
}
```

## 操作系统更新通知
<a name="custom-os-upgrade.OSNotifications"></a>

要在新的可选操作系统补丁变为可用时收到通知，您可以订阅安全修补事件类别中的 [RDS-EVENT-0230](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Messages.html#RDS-EVENT-0230)。有关订阅 RDS 事件的信息，请参阅[订阅 Amazon RDS 事件通知](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Subscribing.html)。

## 注意事项
<a name="custom-os-upgrade.Considerations"></a>

以下注意事项和限制适用于操作系统更新：
+ 在操作系统更新期间，不保留对 C:\$1 驱动器所做的任何操作系统自定义。
+ 我们建议在应用更新之前拍摄手动快照。

# 升级 Amazon RDS Custom for SQL Server 数据库实例
<a name="custom-upgrading-sqlserver"></a>

您可以通过修改 Amazon RDS Custom for SQL Server 数据库实例，以使其使用新的数据库引擎版本来升级该实例。有关升级数据库实例的一般信息，请参阅[升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

**Topics**
+ [RDS Custom for SQL Server 升级概述](#custom-upgrading-sqlserver.Overview)
+ [升级主要和次要引擎版本](#custom-upgrading-sqlserver.Upgrade)
+ [数据库兼容性级别](#custom-upgrading-sqlserver.Major.Compatibility)

## RDS Custom for SQL Server 升级概述
<a name="custom-upgrading-sqlserver.Overview"></a>

Amazon RDS Custom for SQL Server 支持主要版本和次要版本升级。次要版本升级可能包括安全补丁、错误修复和引擎改进。Microsoft 以累积更新（CU）形式发布这些更新。主要版本升级在版本之间引入了新功能和引擎更改，例如从 SQL Server 2019 升级到 2022。您可以立即或在计划的维护时段内应用这两种升级。为防止出现潜在的向后兼容性问题，建议在升级之前，先在非生产环境中测试应用程序。

RDS Custom for SQL Server 可让您升级 RDS 提供的引擎版本（RPEV）或自定义引擎版本（CEV）。
+ RDS 提供的引擎版本（RPEV）包含最新的操作系统（OS）补丁和 SQL Server 累积更新（CU）。
+ 对于自定义引擎版本（CEV），您必须遵循由两个步骤组成的过程。首先，使用目标 SQL Server 版本创建新的 CEV，请参阅[正在准备创建适用于 RDS Custom for SQL Server 的 CEV](custom-cev-sqlserver.preparing.md)。此目标版本必须等于或高于您的当前版本。创建新的 CEV 后，修改数据库实例以使用此新版本。有关更多信息，请参阅 [Performing a minor version upgrade for Amazon RDS Custom for SQL Server CEV with Multi-AZ](https://aws.amazon.com/blogs/database/performing-a-minor-version-upgrade-for-amazon-rds-custom-for-sql-server-cev-with-multi-az/)。

  请勿将 SQL Server 累积更新就地应用于正在运行的 RDS Custom 实例。使用特定 SQL Server 版本（例如 SQL Server 2022 CU16）创建 CEV 后，直接向实例应用较新的累积更新会使实例脱离支持外围并报告错误 `SP-S3006`。要使用 CEV 修补现有 SQL Server 实例，请创建一个包含所需累积更新的新 CEV，然后修改现有实例以切换到新的 CEV。

如果您在多可用区部署中升级 RDS Custom for SQL Server 数据库实例，则 RDS Custom for SQL Server 会对实例执行滚动升级。这种方法通过一次升级一个实例来最大限度地减少停机时间。RDS 执行以下操作来执行滚动升级：

1. 升级备用数据库实例。

1. 失效转移到升级后的备用数据库实例，使其成为新的主数据库实例。

1. 升级新的备用数据库实例。

多可用区部署的数据库实例停机时间是失效转移所花费的时间。

升级 RDS Custom for SQL Server 数据库实例时，以下限制适用：
+ 不支持自定义数据库选项和参数组。
+ 升级后，将不会连接到您连接到 RDS Custom for SQL Server 数据库实例的任何其它存储卷。
+ 对于 CEV，不支持就地应用 SQL Server 累积更新，否则会导致实例被移出支持外围。

## 升级主要和次要引擎版本
<a name="custom-upgrading-sqlserver.Upgrade"></a>

主要和次要引擎版本升级都是不可逆转的，必须始终升级到较新的版本。要确定可用的目标版本，请在修改数据库实例时使用 AWS 管理控制台并从可用版本中进行选择。或者，使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) CLI 命令或 [DescribeDBEngineVersions](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBEngineVersions.html) RDS API 命令。

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
    --engine custom-sqlserver-se \
    --engine-version 15.00.4322.2.v1 \
    --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" \
    --output table
```

对于 Windows：

```
aws rds describe-db-engine-versions ^
    --engine custom-sqlserver-se ^
    --engine-version 15.00.4322.2.v1 ^
    --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" ^
    --output table
```

输出显示可用的目标引擎版本：

```
--------------------------
|DescribeDBEngineVersions|
+------------------------+
|      EngineVersion     |
+------------------------+
|  15.00.4410.1.v1       |
|  15.00.4415.2.v1       |
|  15.00.4430.1.v1       |
|  16.00.4165.4.v1       |
|  16.00.4175.1.v1       |
|  16.00.4185.3.v1       |
+------------------------+
```

确定目标版本后，使用 AWS 管理控制台并按照[修改 RDS Custom for SQL Server 数据库实例](custom-managing.modify-sqlserver.md)中的说明操作。或者，也可以使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令或 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 命令。

对于 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier DB_INSTANCE_IDENTIFIER \
    --engine-version ENGINE_VERSION \
    --allow-major-version-upgrade \
    --region Region \
    --no-apply-immediately
```

对于 Windows：

```
aws rds modify-db-instance ^
    --db-instance-identifier DB_INSTANCE_IDENTIFIER ^
    --engine-version ENGINE_VERSION ^
    --allow-major-version-upgrade ^
    --region Region ^
    --no-apply-immediately
```

**注意**  
必须包含 `--allow-major-version-upgrade` 参数才能执行主要版本升级。

## 数据库兼容性级别
<a name="custom-upgrading-sqlserver.Major.Compatibility"></a>

您可以使用 Microsoft SQL Server 数据库兼容性级别调整某些数据库行为，以模仿之前版本的 SQL Server。有关更多信息，请参阅 Microsoft 文档中的[兼容性级别](https://msdn.microsoft.com/en-us/library/bb510680.aspx)。

在升级数据库实例时，任何现有的数据库将保持其原始兼容性级别。例如，如果从 SQL Server 2019 升级到 SQL Server 2022，所有现有数据库的兼容性级别均为 150。在升级后创建的所有新数据库的兼容性级别均为 160。

您可以使用 ALTER DATABASE 命令更改数据库的兼容性级别。例如，要将名为 `customeracct` 的数据库更改为与 SQL Server 2022 兼容，请发出以下命令：

```
1. ALTER DATABASE customeracct SET COMPATIBILITY_LEVEL = 160
```

# 针对 Amazon RDS Custom for SQL Server 排查数据库的问题
<a name="custom-troubleshooting-sqlserver"></a>

RDS Custom 的责任共担模型提供了操作系统外壳级别的访问权限和数据库管理员访问权限。RDS Custom 会在您的账户中运行资源，与 Amazon RDS 不同，因为后者会在系统账户中运行资源。访问权限更多，责任也更大。在下面的各个部分，您可以了解如何排查 Amazon RDS Custom for SQL Server 数据库实例的问题。

**注意**  
本节介绍如何排查 RDS Custom for SQL Server 的问题。有关排查 RDS Custom for Oracle 的问题，请参阅[针对 Amazon RDS Custom for Oracle 排查数据库问题](custom-troubleshooting.md)。

**Topics**
+ [查看 RDS Custom 事件](#custom-troubleshooting-sqlserver.support-perimeter.viewing-events)
+ [订阅 RDS Custom 事件](#custom-troubleshooting-sqlserver.support-perimeter.subscribing)
+ [RDS Custom for SQL Server 的 CEV 错误故障排除](#custom-troubleshooting-sqlserver.cev)
+ [修复 RDS Custom for SQL Server 中不支持的配置](#custom-troubleshooting-sqlserver.fix-unsupported)
+ [在 RDS Custom for SQL Server 中排查 `Storage-Full` 问题](#custom-troubleshooting-storage-full)
+ [对 RDS Custom for SQL Server 中启用 TDE 的数据库的 PENDING\$1RECOVERY 状态进行故障排除](#custom-troubleshooting-sqlserver.pending_recovery)

## 查看 RDS Custom 事件
<a name="custom-troubleshooting-sqlserver.support-perimeter.viewing-events"></a>

对于 RDS Custom 和 Amazon RDS 数据库实例而言，查看事件的流程是相同的。有关更多信息，请参阅 [查看 Amazon RDS 事件](USER_ListEvents.md)。

要使用 AWS CLI 查看 RDS Custom 事件通知，请使用 `describe-events` 命令。RDS Custom 推出了几项新事件。事件类别与 Amazon RDS 的事件类别相同。有关事件列表，请参阅 [Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。

以下示例检索指定 RDS Custom 数据库实例发生的事件的详细信息。

```
1. aws rds describe-events \
2.     --source-identifier my-custom-instance \
3.     --source-type db-instance
```

## 订阅 RDS Custom 事件
<a name="custom-troubleshooting-sqlserver.support-perimeter.subscribing"></a>

对于 RDS Custom 和 Amazon RDS 数据库实例而言，订阅事件的流程是相同的。有关更多信息，请参阅 [订阅 Amazon RDS 事件通知](USER_Events.Subscribing.md)。

要使用 CLI 订阅 RDS Custom 事件通知，请使用 `create-event-subscription` 命令。包括以下必需参数：
+ `--subscription-name`
+ `--sns-topic-arn`

以下示例为当前的 AWS 账户中的 RDS Custom 数据库实例创建了备份和恢复事件的订阅。您也可以将通知发送到 `--sns-topic-arn` 指定的 Amazon Simple Notification Service (Amazon SNS) 主题。

```
1. aws rds create-event-subscription \
2.     --subscription-name my-instance-events \
3.     --source-type db-instance \
4.     --event-categories '["backup","recovery"]' \
5.     --sns-topic-arn arn:aws:sns:us-east-1:123456789012:interesting-events
```

## RDS Custom for SQL Server 的 CEV 错误故障排除
<a name="custom-troubleshooting-sqlserver.cev"></a>

当您尝试创建 CEV 时，可能会失败。在这种情况下，RDS Custom 会发出 `RDS-EVENT-0198` 事件消息。有关查看 RDS 事件的更多信息，请参阅 [Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。

以下信息可帮助您解决可能的原因。


****  

| 消息 | 故障排除建议 | 
| --- | --- | 
| `Custom Engine Version creation expected a Sysprep’d AMI. Retry creation using a Sysprep’d AMI.` | 在您从 AMI 创建的 EC2 实例上运行 Sysprep。有关使用 Sysprep 准备 AMI 的更多信息，请参阅[使用 Sysprep 创建标准化的 Amazon 机器映像（AMI）](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Creating_EBSbacked_WinAMI.html#sysprep-using-ec2launchv2)。 | 
| `EC2 Image permissions for image (AMI_ID) weren't found for customer (Customer_ID). Verify customer (Customer_ID) has valid permissions on the EC2 Image.` | 验证您用于创建的账户和配置文件对所选 AMI 的 `create EC2 Instance` 和 `Describe Images` 具有所需的权限。 | 
| `Failed to rebuild databases with server collation (collation name) due to missing setup.exe file for SQL Server.` | 确认 `setup` 文件在 `C:\Program Files\Microsoft SQL Server\nnn\Setup Bootstrap\SQLnnnn\setup.exe` 中可用。 | 
| `Image (AMI_ID) doesn't exist in your account (ACCOUNT_ID). Verify (ACCOUNT_ID) is the owner of the EC2 image.` | 确保 AMI 存在于同一个客户账户中。 | 
| `Image id (AMI_ID) isn't valid. Specify a valid image id, and try again.` | AMI 的名称不正确。确保提供正确的 AMI ID。 | 
| `Image (AMI_ID) operating system platform isn't supported. Specify a valid image, and try again.` |  选择支持的 AMI，该 AMI 具有 Windows Server 以及 SQL Server Enterprise、Standard 或 Web 版。从 EC2 Marketplace 选择具有以下使用情况操作代码之一的 AMI： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting-sqlserver.html)  | 
| `SQL Server Web Edition isn't supported for creating a Custom Engine Version using Bring Your Own Media. Specify a valid image, and try again.` | 使用包含支持的 SQL Server 版本的 AMI。有关更多信息，请参阅 [RDS Custom for SQL Server CEV 的版本支持](custom-cev-sqlserver.preparing.md#custom-cev-sqlserver.preparing.VersionSupport)。 | 
| `The custom engine version can't be the same as the OEV engine version. Specify a valid CEV, and try again.` | 不支持经典 RDS Custom for SQL Server 引擎版本。例如，版本 **15.00.4073.23.v1**。使用支持的版本号。 | 
| `The custom engine version isn't in an active state. Specify a valid CEV, and try again.` | CEV 必须处于 `AVAILABLE` 状态才能完成操作。将 CEV 从 `INACTIVE` 修改为 `AVAILABLE`。 | 
| `The custom engine version isn't valid for an upgrade. Specify a valid CEV with an engine version greater or equal to (X), and try again.` | 目标 CEV 无效。检查对有效升级路径的要求。 | 
| `The custom engine version isn't valid. Names can include only lowercase letters (a-z), dashes (-), underscores (_), and periods (.). Specify a valid CEV, and try again.` | 遵循所需的 CEV 命名约定。有关更多信息，请参阅 [RDS Custom for SQL Server CEV 的要求](custom-cev-sqlserver.preparing.md#custom-cev-sqlserver.preparing.Requirements)。 | 
| `The custom engine version isn't valid. Specify valid database engine version, and try again. Example: 15.00.4073.23-cev123.` | 提供了不支持的数据库引擎版本。使用支持的数据库引擎版本。 | 
| `The expected architecture is (X) for image (AMI_ID), but architecture (Y) was found.` | 使用基于 **x86\$164** 架构构建的 AMI。 | 
| `The expected owner of image (AMI_ID) is customer account ID (ACCOUNT_ID), but owner (ACCOUNT_ID) was found.` | 从您拥有权限的 AMI 创建 EC2 实例。在 EC2 实例上运行 Sysprep 以创建和保存基本映像。 | 
| `The expected platform is (X) for image (AMI_ID), but platform (Y) was found.` | 使用在 Windows 平台上构建的 AMI。 | 
| `The expected root device type is (X) for image %s, but root device type (Y) was found.` | 使用 EBS 设备类型创建 AMI。 | 
| `The expected SQL Server edition is (X), but (Y) was found.` |  选择支持的 AMI，该 AMI 具有 Windows Server 以及 SQL Server Enterprise、Standard 或 Web 版。从 EC2 Marketplace 选择具有以下使用情况操作代码之一的 AMI： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/custom-troubleshooting-sqlserver.html)  | 
| `The expected state is (X) for image (AMI_ID), but the following state was found: (Y).` | 确保 AMI 的状态为 `AVAILABLE`。 | 
| `The provided Windows OS name (X) isn’t valid. Make sure the OS is one of the following: (Y).` | 使用支持的 Windows 操作系统。 | 
| `Unable to find bootstrap log file in path.` | 确认日志文件在 `C:\Program Files\Microsoft SQL Server\nnn\Setup Bootstrap\Log\Summary.txt` 中可用。 | 
| `RDS expected a Windows build version greater than or equal to (X), but found version (Y).`. | 使用操作系统编译版本最低为 **14393** 的 AMI。 | 
| `RDS expected a Windows major version greater than or equal to (X), but found version (Y).`. | 使用最低操作系统主版本为 **10.0** 或更高版本的 AMI。 | 

## 修复 RDS Custom for SQL Server 中不支持的配置
<a name="custom-troubleshooting-sqlserver.fix-unsupported"></a>

由于责任共担模式，您应负责修复导致 RDS Custom for SQL Server 数据库实例进入 `unsupported-configuration` 状态的配置问题。如果问题与 AWS 基础设施有关，则您可以使用控制台或 AWS CLI 修复该问题。如果问题与操作系统或数据库配置有关，则您可以登录到主机进行修复。

**注意**  
本节介绍如何修复 RDS Custom for SQL Server 中不支持的配置。有关 RDS Custom for Oracle 的信息，请参阅[修复 RDS Custom for Oracle 中不支持的配置](custom-troubleshooting.md#custom-troubleshooting.fix-unsupported)。

在下表中，您可以找到支持外围所发送的通知和事件以及如何修复这些问题的说明。这些通知和支持外围可能会更改。有关支持外围的背景，请参阅[RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。有关事件描述，请参阅[Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。


| 事件代码 | 配置区域 | RDS 事件消息 | 验证过程 | 
| --- | --- | --- | --- | 
|  `SP-S0000`  |  手动不支持的配置  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：`X`。  |  要解决此问题，请创建支持案例。  | 

**AWS 资源（基础设施）**


| 事件代码 | 配置区域 | RDS 事件消息 | 验证过程 | 
| --- | --- | --- | --- | 
|  `SP-S1001`  |  EC2 实例状态  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：底层 EC2 实例 %s 已停止，但未停止 RDS 实例。您可以通过启动底层 EC2 实例并确保已附加二进制和数据卷来解决此问题。如果您打算停止 RDS 实例，请先确保底层 EC2 实例处于可用状态，然后使用 RDS 控制台或 CLI 停止 RDS 实例。  |  要检查数据库实例的状态，请使用控制台或运行以下 AWS CLI 命令： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep DBInstanceStatus<br />                            </pre>  | 
|  `SP-S1002`  |  EC2 实例状态  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：RDS 数据库实例状态设置为 `STOPPED`，但底层 EC2 实例 %s 已启动。可以通过停止底层 EC2 实例来解决此问题。如果您打算启动 RDS 实例，请使用控制台或 CLI。  |   使用 AWS CLI 命令检查数据库实例的状态： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep DBInstanceStatus</pre> 您还可以使用 EC2 控制台检查 EC2 实例的状态。 要启动数据库实例，请使用控制台或运行以下 AWS CLI 命令： <pre>aws rds start-db-instance \<br />    --db-instance-identifier db-instance-name</pre>  | 
|  `SP-S1003`   |  EC2 实例类  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：EC2 主机的预期和已配置数据库实例类别不匹配。可以通过将数据库实例类修改为其原始类的类型来解决此问题。  |   使用以下 CLI 命令可检查预期的数据库实例类： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep DBInstanceClass</pre>  | 
|  `SP-S1004`  |  无法访问 EBS 存储卷  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：与 EC2 实例关联的原始 EBS 存储卷 %s 目前无法访问。  |    | 
|  `SP-S1005`  |  EBS 存储卷已分离  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：未连接原始 EBS 存储卷“volume-id”。您可以通过附加与 EC2 实例关联的 EBS 卷来解决此问题。  |   重新附加 EBS 卷后，使用以下 CLI 命令检查 EBS 卷“volume-id”是否已正确附加到 RDS 实例： <pre>aws ec2 describe-volumes \<br />    --volume-ids volume-id |grep InstanceId</pre>  | 
|  `SP-S1006`  |  EBS 存储卷大小  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：EBS 存储卷“volume-id”的预期设置和已配置设置不匹配。卷大小已在 EC2 级别从其原始值 [%s] 手动更改。要解决此问题，请创建支持案例。  |   使用以下 CLI 命令比较 EBS 卷“volume-id”详细信息和 RDS 实例详细信息的卷大小： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep AllocatedStorage</pre>  使用以下 CLI 命令查看实际分配的卷大小： <pre>aws ec2 describe-volumes \<br />    --volume-ids |grep Size</pre>  | 
|  `SP-S1007`  |  EBS 存储卷配置  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：EBS 存储卷“volume-id”的预期设置和已配置设置不匹配。您可以通过在 EC2 级别将 EBS 存储卷配置 [IOPS、吞吐量、卷类型] 修改为其原始值 [IOPS：%s，吞吐量：%s，卷类型：%s] 来解决此问题。如果将来需要修改存储，请使用 RDS 控制台或 CLI。卷大小也已在 EC2 级别从其原始值 [%s] 手动更改。要解决此问题，请创建支持案例。  |   使用以下 CLI 命令比较 EBS 卷“volume-id”详细信息和 RDS 实例详细信息的卷类型。确保 EBS 级别的值与 RDS 级别的值相匹配： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep StorageType</pre> 要获取 RDS 级别的存储吞吐量的预期值，请执行以下操作： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep StorageThroughput</pre>  要获取 RDS 级别的卷 IOPS 的预期值，请执行以下操作： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep Iops</pre> 要获取 EC2 级别的当前存储类型，请执行以下操作： <pre>aws ec2 describe-volumes \<br />    --volume-ids |grep VolumeType</pre>  要获取 EC2 级别的存储吞吐量的当前值，请执行以下操作： <pre>aws ec2 describe-volumes \<br />    --volume-ids |grep Throughput</pre> 要获取 EC2 级别的卷 IOPS 的当前值，请执行以下操作： <pre>aws ec2 describe-volumes \<br />    --volume-ids |grep Iops</pre>  | 
|  `SP-S1008`  |  EBS 存储卷大小和配置  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：EBS 存储卷“volume-id”的预期设置和已配置设置不匹配。您可以通过在 EC2 级别将 EBS 存储卷配置 [IOPS、吞吐量、卷类型] 修改为其原始值 [IOPS：%s，吞吐量：%s，卷类型：%s] 来解决此问题。如果将来需要修改存储，请使用 RDS 控制台或 CLI。卷大小也已在 EC2 级别从其原始值 [%s] 手动更改。要解决此问题，请创建支持案例。  |   使用以下 CLI 命令比较 EBS 卷“volume-id”详细信息和 RDS 实例详细信息的卷类型。确保 EBS 级别的值与 RDS 级别的值相匹配： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep StorageType</pre> 要获取 RDS 级别的存储吞吐量的预期值，请执行以下操作： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep StorageThroughput</pre>  要获取 RDS 级别的卷 IOPS 的预期值，请执行以下操作： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep Iops</pre> 要获取 EC2 级别的当前存储类型，请执行以下操作： <pre>aws ec2 describe-volumes \<br />    --volume-ids |grep VolumeType</pre>  要获取 EC2 级别的存储吞吐量的当前值，请执行以下操作： <pre>aws ec2 describe-volumes \<br />    --volume-ids |grep Throughput</pre> 要获取 EC2 级别的卷 IOPS 的当前值，请执行以下操作： <pre>aws ec2 describe-volumes \<br />    --volume-ids |grep Iops</pre> 要获得预期的分配卷大小，请执行以下操作： <pre>aws rds describe-db-instances \<br />    --db-instance-identifier db-instance-name |grep AllocatedStorage</pre> 要获取实际的分配卷大小，请执行以下操作： <pre>aws ec2 describe-volumes \<br />    --volume-ids |grep Size</pre>  | 
|  `SP-S1009`  |  SQS 权限  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：IAM 实例配置文件缺少 Amazon Simple Queue Service（SQS）权限。您可以通过确保与主机关联的 IAM 配置文件具有以下权限来解决此问题：["SQS:SendMessage"、"SQS:ReceiveMessage"、"SQS:DeleteMessage"、"SQS:GetQueueUrl"]。  |    | 
|  `SP-S1010`  |  SQS VPC 端点  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：VPC 端点策略阻止了 Amazon Simple Queue Service（SQS）操作。您可以通过修改 VPC 端点策略以允许所需的 SQS 操作来解决此问题。  |    | 
|  `SP-S1011`  |  事件总线策略  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：事件总线 arn:aws:events:region-1:123456789012:event-bus/default 的基于资源的策略拒绝了 Amazon CloudWatch events:PutEvents 操作。要解决这个问题，请修改基于资源的策略，以支持对 EventBus %s 执行 events:PutEvents 操作。  |    | 
|  `SP-S1012`  |  CloudWatch VPC 权限  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：VPC 端点策略缺少访问 Amazon CloudWatch 事件的权限。要解决这个问题，请修改 VPC 端点策略，以便在 EventBus arn:aws:events:region-1:123456789012:event-bus/default 上支持 events:PutEvents。  |    | 
|  `SP-S1013`  |  服务控制策略  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：AWS Organizations 中的服务控制策略缺少访问 Amazon CloudWatch 事件的权限。要解决这个问题，请修改服务控制策略，以便在 EventBus arn:aws:events:region-1:123456789012:event-bus/default 上支持 events:PutEvents。  |    | 
|  `SP-S1014`  |  IAM 实例配置文件  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：IAM 实例配置文件 %s 权限拒绝 Amazon CloudWatch 事件。要解决这个问题，请在与实例关联的 IAM 配置文件中，将 ["events:PutEvents"] 设置为“Allow”，然后在 EventBus arn:aws:events:region-1:123456789012:event-bus/default 上支持 events:PutEvents。  |    | 
|  `SP-S1015`  |  IAM 实例配置文件  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：IAM 实例配置文件 %s 缺少 Amazon CloudWatch 事件权限。要解决这个问题，请在与实例关联的 IAM 配置文件中包括 ["events:PutEvents"] 权限，然后在 EventBus arn:aws:events:region-1:123456789012:event-bus/default 上支持 events:PutEvents。  |    | 
|  `SP-S1016`  |  IAM 权限边界  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：IAM 实例配置文件 %s 具有拒绝 Amazon CloudWatch 事件的权限边界。要解决这个问题，请在 IAM 实例配置文件权限边界中，对于 EventBus arn:aws:events:region-1:123456789012:event-bus/default 将 ["events:PutEvents"] 设置为“Allow”。  |    | 

**操作系统**


| 事件代码 | 配置区域 | RDS 事件消息 | 验证过程 | 
| --- | --- | --- | --- | 
|  `SP-S2001`  |  SQL 服务状态  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：SQL Server 服务未启动。您可以通过在主机上重启 SQL Server 服务来解决此问题。如果此数据库实例为多可用区数据库实例且重启失败，请停止并启动主机以发起失效转移。  |  | 
|  `SP-S2002`  |  RDS Custom 代理状态  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：RDS Custom 代理服务未安装或无法启动。要解决此问题，可以查看 Windows 事件日志以确定服务无法启动的原因，然后采取适当的步骤来修复问题。如需其他帮助，请创建支持案例。  |  登录到主机并确保 RDS Custom 代理正在运行。 您可以使用以下命令来查看代理状态。 <pre>$name = "RDSCustomAgent"<br />$service = Get-Service $name<br />Write-Host $service.Status</pre> 如果状态不是 `Running`，则可使用以下命令启动该服务： <pre>Start-Service $name</pre> 如果代理无法启动，请检查 Windows 事件以了解其无法启动的原因。代理需要 Windows 用户才能启动该服务。确保 Windows 用户存在并且具有运行该服务的权限。  | 
|  `SP-S2003`  |  SSM 代理状态  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：无法访问 Amazon SSM 代理服务。可以通过使用 `Get-Service AmazonSSMAgent` PowerShell 命令检查服务状态或使用 `Start-Service AmazonSSMAgent` 启动服务来解决此问题。确保允许发往 **ssm**、**ssmmessages** 和 **ec2messages** 区域端点的 HTTPS（端口 443）出站流量。  |  有关更多信息，请参阅 [SSM 代理故障排除](https://docs.aws.amazon.com/systems-manager/latest/userguide/troubleshooting-ssm-agent.html)。 要排查 SSM 端点故障，请参阅[无法连接到 SSM 端点](https://docs.aws.amazon.com/systems-manager/latest/userguide/troubleshooting-ssm-agent.html#systems-manager-ssm-agent-troubleshooting-endpoint-access)和[使用 ssm-cli 排查托管式节点可用性问题](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-cli.html#agent-ts-ssm-cli)。  | 
|  `SP-S2004`  |  RDS Custom 代理登录  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：SQL 登录名 `"$HOSTNAME/RDSAgent”` 出现意外问题。要解决此问题，请创建支持案例。  |  | 
|  `SP-S2005`  |  Timezone  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：Amazon EC2 实例 [%s] 上的时区已更改。可以通过将时区修改回在实例创建期间指定的设置来解决此问题。如果您想创建具有特定时区的实例，请参阅 RDS Custom 文档。  |  运行 `Get-Timezone` PowerShell 命令以确认时区。 有关更多信息，请参阅 [RDS Custom for SQL Server 数据库实例的本地时区](custom-reqs-limits-MS.TimeZone.md)。  | 
|  `SP-S2006`  |  高可用性软件解决方案版本  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：当前实例的高可用性软件解决方案与预期版本不同。要解决此问题，请创建支持案例。  |  | 
|  `SP-S2007`  |  高可用性软件解决方案配置  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：实例 %s 上的高可用性软件解决方案的配置设置已修改为意外的值。要解决此问题，请重启 EC2 实例。当您重启 EC2 实例时，它会自动将设置更新为高可用性软件解决方案所需的配置。  |    | 
| SP-S2008 |  SQL Server 服务   |  RDS Custom 数据库实例设置为 [不受支持的配置]：主机上不存在 SQLServer（MSSQLServer）服务。要解决此问题，请创建支持案例。  |  您可以使用以下命令来查看代理状态。 <pre>$name = "MSSQLServer"<br />$service = Get-Service $name<br />Write-Host $service.Status</pre>  | 
| SP-S2009 | SSL 证书 |  RDS Custom 数据库实例设置为 [不支持的配置]，原因是：非自签名 SSL 证书导致 RDS 中断。要解决此问题，请从受信任的根证书存储中移除非自签名证书。  |  运行以下 PowerShell 命令来查看非自签名证书。 <pre>Get-ChildItem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject -and $_.Issuer -notlike "*RDSCustomAgentCA*"}</pre> 有关更多信息，请参阅 [HTTP Error 403.16 when you try to access a website that's hosted on IIS](https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/site-behavior-performance/http-403-forbidden-access-website)。  | 
| SP-S2010 | 根卷存储状态 |  RDS Custom 数据库实例设置为 [不受支持的配置]，原因是：根卷存储已满。要解决此问题，请在根 EBS 卷“volume-id”中释放至少 500 MiB 的存储空间，或者在 EC2 实例“instance-id”上增加卷大小并调整 C 盘的大小。替换 EC2 实例时，根卷大小更改不会持续。  |  使用以下命令查看根（C:）卷上的可用存储空间。 <pre>(Get-PSDrive -Name C).Free / 1MB</pre> 有关修改 EBS 根卷的更多信息，请参阅 [How](https://forums.aws.amazon.com/knowledge-center/expand-ebs-root-volume-windows)  | 

**数据库**


| 事件代码 | 配置区域 | RDS 事件消息 | 验证过程 | 
| --- | --- | --- | --- | 
|  `SP-S3001`  |  SQL Server 共享内存协议  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：SQL Server 共享内存协议被禁用。可以通过在 SQL Server 配置管理器中启用共享内存协议来解决此问题。  |  可以通过检查 **SQL Server 配置管理器 > SQL Server 网络配置 > MSSQLSERVER 的协议> 共享内存**为“已启用”来验证这一点。启用协议后，重启 SQL Server 进程。  | 
|  `SP-S3002`  |  服务主密钥  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：RDS Automation 无法将服务主密钥（SMK）的备份作为新 SMK 生成的一部分。要解决此问题，请创建支持案例。  |    | 
|  `SP-S3003`  |  服务主密钥  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：与服务主密钥（SMK）相关的元数据缺失或不完整。要解决此问题，请创建支持案例。  |    | 
|  `SP-S3004`  |  数据库引擎版本  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：预期的 SQL Server 版本和已安装的 SQL Server 版本不匹配：不支持在 RDS Custom for SQL Server 上修改 SQL Server 版本。此外，不支持在 RDS Custom EC2 实例上手动更改 SQL Server 版本。要解决此问题，请创建支持案例。  |   运行以下查询以获取 SQL 版本： <pre>select @@version</pre>  运行以下 AWS CLI 命令以获取 RDS SQL 引擎版本： <pre>aws rds describe-db-instances \<br />--db-instance-identifier db-instance-name |grep EngineVersion<br />aws rds describe-db-instances \<br />--db-instance-identifier db-instance-name |grep Engine</pre> 有关更多信息，请参阅[修改 RDS Custom for SQL Server 数据库实例](custom-managing.modify-sqlserver.md)和[升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。  | 
|  `SP-S3005`   |  数据库引擎版本  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：当前 SQL Server 版本与预期的 SQL Server 版本 [%s] 不匹配：不支持在 RDS Custom for SQL Server 上修改 SQL Server 版本。要解决此问题，请创建支持案例。  |   运行以下查询可获取 SQL 版本： 

**Example**  

```
select @@version
```  运行以下 AWS CLI 命令以获取 RDS SQL 引擎版本： <pre>aws rds describe-db-instances \<br />--db-instance-identifier db-instance-name |grep Engine</pre>  | 
|  `SP-S3006`   |  数据库引擎版本  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：当前 SQL Server 版本与预期的 SQL Server 版本 [%s] 不匹配：不能在 RDS Custom EC2 实例上手动更改 SQL Server 版本。要解决此问题，请创建支持案例。要在日后对 SQL Server 版本进行任何修改，可以从 AWS RDS 控制台或通过 modify-db-instance CLI 命令修改实例。  |   运行以下查询以获取 SQL 版本： 

**Example**  

```
select @@version
```  运行以下 AWS CLI 命令以获取 RDS SQL 引擎版本： <pre>aws rds describe-db-instances \<br />--db-instance-identifier db-instance-name |grep EngineVersion</pre> 有关更多信息，请参阅[修改 RDS Custom for SQL Server 数据库实例](custom-managing.modify-sqlserver.md)和[升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。  | 
|  `SP-S3007`  |  数据库文件位置  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：数据库文件是在 D:\$1 驱动器外部配置的。可以通过确保所有数据库文件（包括 ROW、LOG、FILESTREAM 等...）都存储在 D:\$1 驱动器上来解决此问题。  |  运行以下查询以列出不在默认路径中的数据库文件的位置： <pre>USE master;<br />SELECT physical_name as  files_not_in_default_path<br />FROM sys.master_files<br />WHERE SUBSTRING(physical_name,1,3)!='D:\';<br /></pre>  | 
|  `SP-S3008`  |  已超出数据库计数限制  |  RDS Custom 数据库实例状态设置为 [不受支持的配置]，原因是：数据库实例上的数据库总数超过了 5000 的最大限制。要解决这个问题，请将数据库数量减少到支持的最大限制以下。  |  使用以下命令查看数据库总计数： <pre>SELECT COUNT(name) as databaseCount<br />FROM sys.databases<br />WHERE name not in ('tempdb','master','model','msdb','DWDiagnostics','DWConfiguration','DWQueue');</pre>  | 

## 在 RDS Custom for SQL Server 中排查 `Storage-Full` 问题
<a name="custom-troubleshooting-storage-full"></a>

RDS Custom 还会监控根（C:）卷。当根卷的可用磁盘空间小于 500 MiB 时，RDS Custom for SQL Server 数据库实例将移到 `unsupported-configuration` 状态。请参阅 `Event SP-S2010` 中的 [修复 RDS Custom for SQL Server 中不支持的配置](#custom-troubleshooting-sqlserver.fix-unsupported)。

## 对 RDS Custom for SQL Server 中启用 TDE 的数据库的 PENDING\$1RECOVERY 状态进行故障排除
<a name="custom-troubleshooting-sqlserver.pending_recovery"></a>

如果自动解密遇到问题，启用了透明数据加密（TDE）的 SQL Server 数据库可能会保持 `PENDING_RECOVERY` 状态。如果源数据库实例服务主密钥（SMK）备份文件（存储在您账户的 RDS Custom 托管式 S3 存储桶中）在还原完成之前已被删除，则通常会在数据库实例还原后发生这种情况。

要启用自动解密并使启用 TDE 的数据库联机，需要使用密码打开数据库主密钥（DMK），然后使用 SMK 对 DMK 进行加密。

使用以下 SQL Server 命令作为参考：

```
-- Identify PENDING_RECOVERY TDE databases
USE MASTER;
GO
SELECT name, is_encrypted, state_desc FROM sys.databases;
GO

-- Open DMK using password
OPEN MASTER KEY DECRYPTION BY PASSWORD = '<password>';
GO

-- Encrypt DMK using SMK
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;
GO

-- Close SMK
CLOSE MASTER KEY;
GO

-- Bring the TDE databases online
ALTER DATABASE <database_name> SET ONLINE;
GO

-- Verify TDE databases are now in ONLINE state
SELECT name, is_encrypted, state_desc FROM sys.databases;
GO
```