

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 转换数据库架构 AWS Schema Conversion Tool
<a name="CHAP_Converting"></a>

您可以使用 AWS Schema Conversion Tool (AWS SCT) 将现有数据库架构从一个数据库引擎转换为另一个数据库引擎。使用 AWS SCT 用户界面转换数据库可能相当简单，但在进行转换之前需要考虑几件事。

例如，您可以使用 AWS SCT 执行以下操作：
+ 您可以使用将现有本地数据库架构复制 AWS SCT 到运行相同引擎的 Amazon RDS 数据库实例。您可以使用此功能来分析迁移到云和更改许可证类型的潜在成本节省。
+ 在某些情况下，数据库功能无法转换为等效的 Amazon RDS 功能。如果您在亚马逊弹性计算云 (Amazon EC2) 平台上托管和自行管理数据库，则可以通过使用 AWS 服务代替这些功能来模拟这些功能。
+ AWS SCT 自动执行将您的在线事务处理 (OLTP) 数据库架构转换为亚马逊关系数据库服务 (Amazon RDS) MySQL 数据库实例、亚马逊 Aurora 数据库集群或 PostgreSQL 数据库实例的大部分过程。源数据库引擎和目标数据库引擎包含许多不同的特性和功能，并尽可能 AWS SCT 尝试在您的 Amazon RDS 数据库实例中创建等效架构。如果无法直接转换， AWS SCT 请列出可能采取的措施。

**Topics**
+ [在中应用迁移规则 AWS Schema Conversion Tool](CHAP_Converting.MigrationRules.md)
+ [使用 AWS SCT 转换架构](CHAP_Converting.Convert.md)
+ [在中手动转换架构 AWS SCT](CHAP_Converting.Manual.md)
+ [更新和刷新转换后的架构 AWS SCT](CHAP_Converting.UpdateRefresh.md)
+ [在中保存和应用转换后的架构 AWS SCT](CHAP_Converting.SaveAndApply.md)
+ [比较中的架构 AWS Schema Conversion Tool](CHAP_Converting.SchemaCompare.md)
+ [在中查看相关的变换对象 AWS Schema Conversion Tool](CHAP_Converting.RelatedObjects.md)

AWS SCT 支持以下联机事务处理 (OLTP) 转换。


| 源数据库 | 目标数据库 | 
| --- | --- | 
|  适用于 z/OS （版本 12）的 IBM Db2  |  Amazon Aurora MySQL 兼容版本、Amazon Aurora PostgreSQL 兼容版本、MySQL、PostgreSQL  | 
|  IBM Db2 LUW（版本 9.1、9.5、9.7、10.5、11.1 和 11.5）  |  Aurora MySQL、Aurora PostgreSQL、MariaDB、MySQL、PostgreSQL  | 
| Microsoft Azure SQL 数据库 |  Aurora MySQL、Aurora PostgreSQL、MySQL、PostgreSQL  | 
|  Microsoft SQL Server（版本 2008 R2 及更高版本）  |  Aurora MySQL、Aurora PostgreSQL、适用于 Aurora PostgreSQL 的 Babelfish、MariaDB、Microsoft SQL Server、MySQL、PostgreSQL   | 
|  MySQL（版本 5.5 及更高版本）  |  Aurora PostgreSQL、MySQL、PostgreSQL 无需使用即可将架构和数据从 MySQL 迁移到 Aurora MySQL 数据库集群 AWS SCT。有关更多信息，请参阅[将数据迁移到 Amazon Aurora 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Migrate.html)。  | 
|  Oracle（版本 10.2 及更高版本）  |   Aurora MySQL、Aurora PostgreSQL、MariaDB、MySQL、Oracle、PostgreSQL   | 
|  PostgreSQL（版本 9.1 及更高版本）  |  Aurora MySQL、Aurora PostgreSQL、MySQL、PostgreSQL  | 
| SAP ASE（12.5、15.0、15.5、15.7 和 16.0） |   Aurora MySQL、Aurora PostgreSQL、MariaDB、MySQL、PostgreSQL   | 

有关转换数据仓库架构的更多信息，请参阅 [使用将数据仓库架构转换为 Amazon RDS AWS SCT](CHAP_Converting.DW.md)。

要将数据库架构转换为 Amazon RDS，请执行以下概括步骤：
+  [在中创建迁移规则 AWS SCT](CHAP_Converting.MigrationRules.md)— 在使用转换架构之前 AWS SCT，您可以设置更改列的数据类型、将对象从一个架构移动到另一个架构以及更改对象名称的规则。
+ [使用 AWS SCT 转换架构在中手动转换架构 AWS SCT](CHAP_Converting.Convert.md)： AWS SCT 创建本地版本的转换后架构以供查看，但在您做好准备之前，不会将其应用于目标数据库实例。
+ [在中使用评估报告 AWS Schema Conversion Tool](CHAP_AssessmentReport.md)： AWS SCT 创建数据库迁移评估报告，详细介绍无法自动转换的架构元素。您可以使用此报告来确定需要在与源数据库兼容的 Amazon RDS 数据库实例中的哪个位置创建架构。
+ [使用 AWS SCT 转换架构在中手动转换架构 AWS SCT](CHAP_Converting.Manual.md)：如果存在无法自动转换的架构元素，您有两种选择：更新源架构，然后再次转换；或者在目标 Amazon RDS 数据库实例中创建等效的架构元素。
+ [更新和刷新转换后的架构 AWS SCT](CHAP_Converting.UpdateRefresh.md)— 您可以使用源数据库中的最新架构更新您的 AWS SCT 项目。
+ [在中保存和应用转换后的架构 AWS SCT](CHAP_Converting.SaveAndApply.md)— 准备就绪后，请将本地项目中转换后的架构 AWS SCT 应用于目标 Amazon RDS 数据库实例。

# 在中应用迁移规则 AWS Schema Conversion Tool
<a name="CHAP_Converting.MigrationRules"></a>

在使用转换架构之前 AWS SCT，您可以设置迁移规则。中的@@ *迁移规则* AWS SCT 可以进行诸如更改列的数据类型、将对象从一个架构移动到另一个架构以及更改对象名称之类的转换。例如，假定您的源架构中有一组名为 `test_TABLE_NAME` 的表。您可以设置一条规则，将前缀 `test_` 更改为目标架构中的前缀 `demo_`。

**注意**  
您只能为不同的源数据库引擎和目标数据库引擎创建迁移规则。

您可以创建执行以下任务的迁移规则：
+ 添加、删除或替换前缀
+ 添加、删除或替换后缀
+ 更改列排序规则
+ 更改数据类型
+ 更改 `char`、`varchar`、`nvarchar` 和 `string` 数据类型的长度
+ 移动对象
+ 重命名对象

您可以为以下对象创建迁移规则：
+ 数据库
+ 架构
+ 表
+ 列

## 创建迁移规则
<a name="CHAP_Converting.MigrationRules.Map"></a>

您可以创建迁移规则并将规则另存为项目的一部分。打开项目，使用以下过程创建迁移规则。

**创建迁移规则**

1. 在**视图**菜单上，选择**映射视图**。

1.  在**服务器映射**中，选择一对源服务器和目标服务器。

1. 选择**新建迁移规则**。此时显示**转换规则**对话框。

1. 选择 **Add new rule**。规则列表中新增一行。

1. 配置规则：

   1. 对于 **Name**（名称），请为规则输入一个名称。

   1. 对于 **For**，请选择该规则适用的对象的类型。

   1. 对于 **where**，请输入在应用迁移规则之前要应用于对象的筛选器。通过使用 LIKE 子句对 WHERE 子句进行评估。您可以输入确切名称以选择一个对象，也可以输入模式来选择多个对象。

      适用于 **WHERE** 子句的字段有所不同，具体取决于对象类型。例如，如果对象类型为架构，则只有一个字段可用于架构名称。

   1. 对于**操作**，选择要创建的迁移规则的类型。

   1. 根据规则类型，输入一个或两个其他值。例如，要重命名对象，请输入对象的新名称。要替换前缀，请输入旧前缀和新前缀。

      对于 char、varchar、nvarchar 和字符串数据类型，您可以使用乘法运算符更改数据类型长度。例如，`%*4` 值会将 `varchar(10)` 数据类型转换为 `varchar(40)`。

1. 配置迁移规则后，请选择**保存**以保存您的规则。您也可以选择 **Cancel** 取消所做更改。  
![\[“转换规则”对话框\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/images/transformation-rules.png)

1. 添加、编辑和删除完规则后，选择 **Save All** 以保存您的所有更改。

1. 选择**关闭**以关闭**转换规则**对话框。

您可以使用切换图标关闭迁移规则，而不将其删除。您可以使用复制图标复制现有的迁移规则。您可以使用铅笔图标编辑现有的迁移规则。您可以使用删除图标来删除现有的迁移规则。要保存对迁移规则所做的所有更改，请选择**全部保存**。

## 导出迁移规则
<a name="CHAP_Converting.MigrationRules.Export"></a>

如果您使用将数据从源数据库迁移 AWS DMS 到目标数据库，则可以向提供有关迁移规则的信息 AWS DMS。有关任务的更多信息，请参阅[处理 AWS Database Migration Service 复制任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)。

**导出迁移规则**

1. 在中 AWS Schema Conversion Tool，从 “**视图” 菜单上选择 “映射****视图**”。

1.  在**迁移规则**中，选择迁移规则，然后选择**修改迁移规则**。

1.  选择 “**导出脚本” AWS DMS**。

1. 浏览到要保存脚本的位置，然后选择 **Save**。您的迁移规则保存为可供使用的 JSON 脚本 AWS DMS。

# 使用 AWS SCT 转换架构
<a name="CHAP_Converting.Convert"></a>

将项目与源数据库和目标 Amazon RDS 数据库实例连接后，您的 AWS Schema Conversion Tool 项目将在左侧面板中显示源数据库中的架构。该架构以树状图格式显示，且树的每个节点均延迟加载。当您在树视图中选择一个节点时，会从您的源数据库 AWS SCT 请求架构信息。

您可以从您的源数据库中选择架构项目，然后将该架构转换为目标数据库实例的数据库引擎的等效架构。您可以从源数据库中选择要转换的任何架构项目。如果您选择的架构项目依赖于父项目，则 AWS SCT 还会为父项生成架构。例如，假定您选择了要转换的表。如果是，则 AWS SCT 生成表的架构以及该表所在的数据库。

## 转换架构
<a name="CHAP_Converting.Convert.Procedure"></a>

要转换源数据库中的架构，请选中要转换的架构名称对应的复选框。接下来，从项目的左侧面板中选择此架构。 AWS SCT 用蓝色突出显示架构名称。打开该架构的上下文（右键单击）菜单，然后选择**转换架构**，如下所示。

![\[转换架构\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/images/transform_schema.png)


转换完源数据库的架构后，您可以从项目左侧面板中选择架构项目，并在项目的中心面板中查看转换后的架构。中下方面板显示转换后架构的属性以及创建该架构所用的 SQL 命令，如下所示。

![\[选择源架构项\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/images/select_schema_item.png)


转换完架构后，您可以保存您的项目。源数据库中的架构信息随您的项目一起保存。此功能意味着您无需连接到源数据库即可脱机工作。如果为源数据库选择**从数据库刷新**，则 AWS SCT 会连接到源数据库以更新项目中的架构。有关更多信息，请参阅 [更新和刷新转换后的架构 AWS SCT](CHAP_Converting.UpdateRefresh.md)。

您可以为无法自动转换的项目创建一个数据库迁移评估报告。该评估报告对于识别和解析无法自动转换的架构项目很有用。有关更多信息，请参阅 [在中使用评估报告 AWS Schema Conversion Tool](CHAP_AssessmentReport.md)。

 AWS SCT 生成转换后的架构时，它不会立即将其应用于目标数据库实例。而是会将转换后的架构存储在本地，直到您准备好将其应用于目标数据库实例。有关更多信息，请参阅 [应用转换后的架构](CHAP_Converting.SaveAndApply.md#CHAP_Converting.Applying)。

## 编辑转换后的架构
<a name="CHAP_Converting.Edit"></a>

您可以编辑转换后的架构，并将更改另存为项目的一部分。

**编辑转换后的架构**

1. 在显示源数据库架构的左侧面板中，选择要为其编辑转换后架构的架构项目。

1. 在显示所选项目的转换后架构的中下方面板中，选择 **SQL** 选项卡。

1. 在 **SQL** 选项卡显示的文本中，根据需要更改架构。该架构会在您进行更新时自动随项目一起保存。  
![\[从目标数据库实例刷新架构\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/images/edit_converted_schema.png)

您对转换后架构的更改会在您进行更新时随项目一起存储。如果您刚从源数据库转换一个架构项目，并且已对该项目之前转换的架构进行了更新，则这些现有更新将替换为基于源数据库的新转换的架构项目。

## 清除转换后的架构
<a name="CHAP_Converting.Clear"></a>

在将架构应用于目标数据库实例之前， AWS SCT 仅在项目中本地存储转换后的架构。您可以通过选择目标数据库实例的树状图节点，然后选择**从数据库刷新**清除您项目中的计划架构。由于尚未向目标数据库实例写入任何架构，因此从数据库中刷新会删除 AWS SCT 项目中计划的架构元素，以匹配源数据库实例中存在的架构。

# 在中手动转换架构 AWS SCT
<a name="CHAP_Converting.Manual"></a>

评估报告包含无法自动转换为目标 Amazon RDS 数据库实例的数据库引擎的项列表。对于无法转换的每一项，**Action Items** 选项卡上都有一个操作项。

您可以按如下方式应对评估报告中的操作项：
+ 修改您的源数据库架构。
+ 修改您的目标数据库架构。

## 修改源架构
<a name="CHAP_Converting.Manual.Source"></a>

对于某些项目，将源数据库中的数据库架构修改为可自动转换的架构可能更容易。首先验证新更改与您的应用程序架构兼容，然后更新源数据库中的架构。最后，用更新的架构信息刷新您的项目。然后，您可以转换更新后的架构，并生成新的数据库迁移评估报告。对于在源架构中更改的项目，不再显示操作项。

此过程的优势是，当您从源数据库刷新时，更新后的架构始终可用。

## 修改目标架构
<a name="CHAP_Converting.Manual.Target"></a>

对于某些项目，更容易的方法可能是将转换后的架构应用于目标数据库，然后手动将无法自动转换的项目的等效架构项目添加到目标数据库。您可以编写所有可通过应用该架构自动转换为目标数据库实例的架构。有关更多信息，请参阅 [在中保存和应用转换后的架构 AWS SCT](CHAP_Converting.SaveAndApply.md)。

写入到目标数据库实例的架构不包含无法自动转换的项目。在将架构应用于目标数据库实例后，您就可以在目标数据库实例中手动创建与源数据库中的架构等效的架构。数据库迁移评估报告中的操作项包含有关如何创建等效架构的建议。

**警告**  
如果您在目标数据库实例中手动创建构架，请保存所做的所有手动操作的副本。如果再次将您的项目的转换后架构应用于目标数据库实例，它将覆盖您所做的手动操作。

在某些情况下，您无法在目标数据库实例中创建等效架构。您可能需要重新架构一部分应用程序和数据库，以便将该数据库引擎的可用功能用于您的目标数据库实例。在其他情况下，您可以简单地忽略无法自动转换的架构。

# 更新和刷新转换后的架构 AWS SCT
<a name="CHAP_Converting.UpdateRefresh"></a>

您可以更新 AWS Schema Conversion Tool 项目中的源架构和目标架构。
+ **源**：如果您更新源数据库的架构， AWS SCT 将用源数据库中的最新架构代替项目中的架构。如果您已对源数据库的架构进行了更改，则可使用此功能来更新项目。
+ **目标**：如果您更新目标 Amazon RDS 数据库实例的架构， AWS SCT 将用目标数据库实例中的最新架构代替项目中的架构。如果您尚未对目标数据库实例应用任何架构，则会从您的项目中 AWS SCT 清除转换后的架构。然后，您可以转换源数据库中的架构，以获得干净的目标数据库实例。

通过选择 “**从数据库刷新**”，可以更新 AWS SCT 项目中的架构。

**注意**  
刷新架构时，仅在需要时 AWS SCT 加载元数据。要完全加载数据库的所有架构，请打开该架构的上下文（右键单击）菜单，然后选择**加载架构**。例如，您可以使用此选项一次性加载数据库的元数据，然后脱机工作。

# 在中保存和应用转换后的架构 AWS SCT
<a name="CHAP_Converting.SaveAndApply"></a>

 AWS Schema Conversion Tool 生成转换后的架构（如所示[使用 AWS SCT 转换架构在中手动转换架构 AWS SCT](CHAP_Converting.Convert.md)）时，它不会立即将转换后的架构应用于目标数据库实例。而是会在本地将转换后的架构存储在项目中，直到您准备好将其应用于目标数据库实例。使用此功能，您可以使用无法自动转换为目标数据库引擎的架构项目。有关无法自动转换的项目的更多信息，请参阅[在中使用评估报告 AWS Schema Conversion Tool](CHAP_AssessmentReport.md)。

您可以选择在将架构应用于目标数据库实例之前，让该工具将转换后的架构作为 SQL 脚本保存到文件中。此外，您还可以让该工具将转换后的架构直接应用于目标数据库实例。

## 将转换后的架构保存到文件中
<a name="CHAP_Converting.Saving"></a>

您可以将转换后的架构作为 SQL 脚本保存到文本文件中。通过使用这种方法，您可以修改生成的 SQL 脚本， AWS SCT 以解决该工具无法自动转换的项目。然后，您可以在目标数据库实例上运行更新的脚本，将转换后的架构应用于目标数据库。

**将转换后的架构另存为 SQL 脚本**

1.  选择架构，并打开上下文 (右键单击) 菜单。

1.  选择**另存为 SQL**。

1.  输入文件名并选择**保存**。

1.  使用以下选项之一保存转换后的架构：
   + **单个文件**
   + **每个阶段单个文件**
   + **每个语句单个文件**

**选择 SQL 脚本的格式**

1. 在**设置**菜单上，选择**项目设置**。

1.  选择**保存脚本**。

1.  对于**供应商**，选择数据库平台。

1.  在**将 SQL 脚本保存到**中，选择数据库架构脚本的保存方式。

1.  选择**确定**保存设置。

## 应用转换后的架构
<a name="CHAP_Converting.Applying"></a>

在您准备好将转换后的架构应用于目标 Amazon RDS 数据库实例后，请从项目的右侧面板中选择该架构元素。打开架构元素的上下文 (右键单击) 菜单，然后选择 **Apply to database**，如下所示。

![\[应用于数据库\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/images/write_to_database.png)


## 扩展包架构
<a name="CHAP_Converting.SaveAndApply.Ext"></a>

首次将转换后的架构应用于目标数据库实例时， AWS SCT 会向目标数据库实例添加一个额外的架构。该架构用于实现将转换后的架构写入到目标数据库实例时必需的源数据库的系统功能。该架构称为扩展包架构。

不要修改扩展包架构，否则，您可能会在写入到目标数据库实例的转换后架构中遇到意外结果。当您的架构完全迁移到目标数据库实例并且您不再需要时 AWS SCT，您可以删除扩展包架构。

扩展包架构按照源数据库命名，如下所示：
+ IBM Db2 LUW：`aws_db2_ext`
+ Microsoft SQL Server: `aws_sqlserver_ext`
+ MySQL：`aws_mysql_ext`
+ Oracle：`aws_oracle_ext`
+ PostgreSQL: `aws_postgresql_ext`
+ SAP ASE：`aws_sapase_ext`

有关更多信息，请参阅 [使用 AWS SCT 扩展包中的 AWS Lambda 函数](CHAP_ExtensionPack.md#CHAP_ExtensionPack.OLTP)。

# 比较中的架构 AWS Schema Conversion Tool
<a name="CHAP_Converting.SchemaCompare"></a>

如果您在迁移后对源架构或目标架构进行了更改，则可以使用比较这两个数据库架构。 AWS SCT您可以对与源架构相同或更早的版本的架构进行比较。

支持以下架构比较：
+ Oracle 与 Oracle，版本 12.1.0.2.0、11.1.0.7.0、11.2.0.1.0、10
+ SQL Server 到 SQL Server，版本 2016、2014、2012、2008 RD2、2008
+ PostgreSQL 与 PostgreSQL 以及与 Aurora PostgreSQL 兼容的版本，版本 9.6、9.5.9、9.5.4
+ MySQL 与 MySQL，版本 5.6.36、5.7.17、5.5

您可以在 **Project Settings** (项目设置) 页的 **Compare Schema** (比较架构) 选项卡上指定架构比较的设置。

![\[架构比较设置\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/images/schema-compare-settings.png)


要比较架构，请选择架构，并 AWS SCT 指明两个架构之间存在差异的对象和不存在差异的对象。

**比较两个架构**

1. 打开一个现有的 AWS SCT 项目，或者创建一个项目并连接到源终端节点和目标终端节点。

1. 选择要比较的架构。

1. 打开上下文 (右键单击) 菜单并选择**比较架构**。

 AWS SCT 通过在对象的图标上添加一个黑色圆圈来表示两个架构之间不同的对象。

![\[架构比较结果\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/images/schema-compare-results.png)


您可以将架构比较结果应用于单个对象、单个对象类别或整个架构。选中要将结果应用于的类别、对象或架构旁边的框。

# 在中查看相关的变换对象 AWS Schema Conversion Tool
<a name="CHAP_Converting.RelatedObjects"></a>

架构转换后，在某些情况下， AWS SCT 可能已经为源数据库上的一个架构对象创建了多个对象。例如，在执行 Oracle 到 PostgreSQL 的转换时 AWS SCT ，获取每个 Oracle 触发器并将其转换为 PostgreSQL 目标上的触发器和触发器函数。此外，当 AWS SCT 将 Oracle 包函数或过程转换为 PostgreSQL 时，它会创建一个等效的函数和一个 INIT 函数，在运行该过程或函数之前，这些函数应作为初始化块运行。

以下过程可让您查看在架构转换之后创建的所有相关对象。

**查看在架构转换期间创建的相关对象**

1. 在架构转换之后，在目标树视图中选择已转换对象。

1. 选择 **Related Converted Objects** (相关的已转换对象) 选项卡。

1. 查看相关目标对象的列表。