

# 针对 Amazon RDS for Db2 从 Linux 迁移到 Linux，停机时间接近零
<a name="db2-near-zero-downtime-migration"></a>

使用这种迁移方法，您可以将基于 Linux 的 Db2 数据库从自行管理的 Db2 数据库（源）迁移到 Amazon RDS for Db2。这种方法可使应用程序或用户最大限度地减少甚至没有中断或停机时间。这种方法可以备份您的数据库并通过日志重播进行还原，这有助于防止中断正在进行的操作并提供数据库的高可用性。

为了实现停机时间接近零的迁移，RDS for Db2 实施带日志重播的还原。此方法对自行管理的基于 Linux 的 Db2 数据库进行备份，然后在 RDS for Db2 服务器上还原它。使用 Amazon RDS 存储过程，您可以应用后续的事务日志来使数据库保持最新。

**Topics**
+ [

## 停机时间接近零的迁移的限制和建议
](#db2-near-zero-downtime-migration-limitations)
+ [

## 将数据库备份到 Amazon S3
](#db2-near-zero-downtime-backing-up-database)
+ [

## 创建默认自动存储组
](#db2-near-zero-migration-creating-auto-storage-group)
+ [

## 迁移 Db2 数据库
](#db2-migrating-db2-database)

## 停机时间接近零的迁移的限制和建议
<a name="db2-near-zero-downtime-migration-limitations"></a>

以下限制和建议适用于使用停机时间接近零的迁移。
+ Amazon RDS 需要在线备份才能实现近乎零停机的迁移。这是因为在您上传存档的事务日志时，Amazon RDS 会使您的数据库处于前滚挂起状态。有关更多信息，请参阅 [迁移 Db2 数据库](#db2-migrating-db2-database)。
+ 您无法从与 RDS for Db2 数据库实例所在区域不同的 AWS 区域中的 Amazon S3 存储桶进行还原。
+ Amazon S3 将上传到 S3 存储桶的文件大小限制为 5TB。如果数据库备份文件超过 5TB，则将备份文件拆分为较小的文件。
+ Amazon RDS 不支持非防护外部例程、增量还原或 Delta 还原。
+ 您无法从加密的源数据库中还原，但可以还原到加密的 Amazon RDS 数据库实例。

根据您的配置，还原过程会有所不同。

如果 `USE_STREAMING_RESTORE` 设置为 `TRUE`，Amazon RDS 将在还原期间直接从 S3 存储桶流式传输您的备份。流式传输可显著降低存储要求。您只需预调配等于或大于备份大小或原始数据库大小（以较大者为准）的存储空间即可。

如果 `USE_STREAMING_RESTORE` 设置为 `FALSE`，Amazon RDS 将首先将备份下载到 RDS for Db2 数据库实例，然后提取备份。提取需要额外的存储空间。您必须预调配的存储空间大小应等于或大于备份大小与原始数据库大小之和。

还原数据库的最大大小等于支持的最大数据库大小减去还原过程中临时存储所需的所有空间。

## 将数据库备份到 Amazon S3
<a name="db2-near-zero-downtime-backing-up-database"></a>

要在 Amazon S3 上备份数据库，您需要以下 AWS 组件：
+ *用于存储备份文件的 Amazon S3 存储桶*：上传您要迁移到 Amazon RDS 的所有备份文件。Amazon RDS 需要在线备份才能实现近乎零停机的迁移。如果您已有一个 S3 存储桶，则可以使用该存储桶。如果没有 S3 存储桶，请参阅《Amazon S3 用户指南》**中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。
**注意**  
如果数据库很大，需要很长时间才能传输到 S3 存储桶，则可以订购 AWS Snow Family 设备并要求 AWS 执行备份。将文件复制到设备并将其返还给 Snow 系列团队后，该团队会将备份的映像传输到您的 S3 存储桶。有关详情，请参阅 [AWS Snow Family 文档](https://docs.aws.amazon.com/snowball/)。
+ *用于访问 S3 存储桶的 IAM 角色*：如果您已经有一个 AWS Identity and Access Management（IAM）角色，则可以使用该角色。如果您还没有角色，请参阅[步骤 2：创建 IAM 角色并附加您的 IAM policy](db2-s3-integration.md#db2-creating-iam-role)。
+ *一个 IAM 策略，其中包含附加到 IAM 角色的信任关系和权限*：有关更多信息，请参阅[步骤 1：创建 IAM policy](db2-s3-integration.md#db2-creating-iam-policy)。
+ *添加到 RDS for Db2 数据库实例的 IAM 角色*：有关更多信息，请参阅[步骤 3：将您的 IAM 角色添加到 RDS for Db2 数据库实例](db2-s3-integration.md#db2-adding-iam-role)。

## 创建默认自动存储组
<a name="db2-near-zero-migration-creating-auto-storage-group"></a>

源数据库必须具有默认自动存储组。如果数据库没有默认自动存储组，则必须创建一个这类组。

**创建默认自动存储组**

1. 连接到您的源数据库。在以下示例中，将 *source\$1database* 替换为数据库的名称。

   ```
   db2 connect to source_database 
   ```

1. 创建自动存储组并将其设置为默认存储组。在以下示例中，将 *storage\$1path* 替换为存储组所在位置的绝对路径。

   ```
   db2 "create stogroup IBMSTOGROUP ON storage_path set as default"
   ```

1. 终止后端进程。

   ```
   db2 terminate
   ```

## 迁移 Db2 数据库
<a name="db2-migrating-db2-database"></a>

设置为停机时间接近零的迁移后，就可以将 Db2 数据库从 Amazon S3 存储桶迁移到 RDS for Db2 数据库实例了。

**将备份文件从 Amazon S3 存储桶近乎零停机地迁移至 RDS for Db2 数据库实例**

1. 对源数据库进行联机备份。有关更多信息，请参阅 IBM Db2 文档中的 [BACKUP DATABASE 命令](https://www.ibm.com/docs/en/db2/11.5?topic=commands-backup-database)。

1. 将数据库备份复制到 Amazon S3 存储桶。有关使用 Amazon S3 的更多信息，请参阅 [Amazon Simple Storage Service 用户指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)。

1. 使用 RDS for Db2 数据库实例的 *master\$1username* 和 *master\$1password* 连接到 `rdsadmin` 服务器。

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. （可选）要确保为您的数据库配置了最佳设置，请通过调用 [rdsadmin.show\$1configuration](db2-sp-managing-databases.md#db2-sp-show-configuration) 来检查以下参数的值：
   + `RESTORE_DATABASE_NUM_BUFFERS`
   + `RESTORE_DATABASE_PARALLELISM`
   + `RESTORE_DATABASE_NUM_MULTI_PATHS`
   + `USE_STREAMING_RESTORE`

   根据需要使用 [rdsadmin.set\$1configuration](db2-sp-managing-databases.md#db2-sp-set-configuration) 修改这些值。正确配置这些参数可以显著提高还原包含大量数据的数据库时的性能。对于大多数迁移场景，我们建议将 `USE_STREAMING_RESTORE` 设置为 `TRUE`，因为它可以降低存储需求并可以提高还原速度。

1. 通过调用 `rdsadmin.restore_database`，在 RDS for Db2 服务器上还原备份。将 `backup_type` 设置为 `ONLINE`。有关更多信息，请参阅 [rdsadmin.restore\$1database](db2-sp-managing-databases.md#db2-sp-restore-database)。

1. 将源服务器中的归档日志复制到 S3 存储桶。有关更多信息，请参阅 IBM Db2 文档中的[归档日志记录](https://www.ibm.com/docs/en/db2/11.5?topic=logging-archive)。

1. 根据需要，通过调用 `rdsadmin.rollforward_database` 多次应用归档日志。将 `complete_rollforward` 设置为 `FALSE` 可使数据库保持 `ROLL-FORWARD PENDING` 状态。有关更多信息，请参阅 [rdsadmin.rollforward\$1database](db2-sp-managing-databases.md#db2-sp-rollforward-database)。

1. 应用所有归档日志后，通过调用 `rdsadmin.complete_rollforward` 使数据库联机。有关更多信息，请参阅 [rdsadmin.complete\$1rollforward](db2-sp-managing-databases.md#db2-sp-complete-rollforward)。

1. 通过更新数据库的应用程序端点或更新 DNS 端点以将流量重定向到 RDS for Db2 服务器，将应用程序连接切换到 RDS for Db2 服务器。还可以使用 RDS for Db2 数据库端点在自行管理的 Db2 数据库上使用 Db2 自动客户端重新路由功能。有关更多信息，请参阅 IBM Db2 文档中的 [Automatic client reroute description and setup](https://www.ibm.com/docs/en/db2/11.5?topic=reroute-configuring-automatic-client)。

1. （可选）关闭源数据库。