

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

# 使用日志传送将适用于 LUW 的 Db2 迁移 EC2 到 Amazon 以减少中断时间
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time"></a>

*Feng Cai、Ambarish Satarkar 和 Saurabh Sharma，Amazon Web Services*

## Summary
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-summary"></a>

当客户将他们的 IBM Db2 for LUW（Linux、UNIX 和 Windows）工作负载迁移到亚马逊网络服务 (AWS) 时，使用带有自带许可 (BYOL EC2) 模式的亚马逊弹性计算云 (Amazon) 是最快的方法。不过，将大量数据从本地 Db2 迁移到 AWS 可能是一项挑战，尤其是在停机窗口很短的情况下。许多客户尝试将停机窗口设置为 30 分钟以下，这样留给数据库本身的时间就很少了。

此模式涵盖如何使用事务日志传送在较短的中断窗口内完成 Db2 迁移。此方法适用于小端 Linux 平台上的 Db2。

## 先决条件和限制
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 在与本地文件系统布局相匹配的 EC2 实例上运行的 Db2 实例
+ 实例可以访问的亚马逊简单存储服务 (Amazon S3) Service 存储桶 EC2 
+ 用于向 Amazon S3 进行程序化调用的 AWS Identity and Access Management（IAM）策略和角色
+ Amazon EC2 和本地服务器上的时区和系统时钟同步
+ 通过 AWS [ Site-to-SiteVPN](https://aws.amazon.com/vpn/) 或 AWS Di [rect Connect 连接到 AWS](https://aws.amazon.com/directconnect/) 的本地网络

**限制**
+ Db2 本地实例和 Amazon EC2 必须位于同一个[平台系列](https://www.ibm.com/docs/en/db2/11.1?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)上。
+ 必须记录 Db2 本地工作负载。若要阻止任何未记录的事务，请在数据库配置中设置 `blocknonlogged=yes`。

**产品版本**
+ 适用于 LUW 版本 11.5.9 及以上版本的 Db2

## 架构
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-architecture"></a>

**源技术堆栈**
+ Linux 上的 Db2** **x86\$164

**目标技术堆栈**
+ Amazon EBS
+ Amazon EC2
+ AWS Identity and Access Management (IAM)
+ Amazon S3
+ AWS Site-to-Site VPN 或直接连接

**目标架构**

下图显示了一个在本地运行的 Db2 实例，该实例通过虚拟专用网络 (VPN) 连接到 Amazon 上的 Db2。 EC2虚线代表您的数据中心和 Amazon Web Services Cloud 之间的 VPN 隧道。

![\[使用事务日志传送在较短的中断窗口内完成 Db2 迁移的工作流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/7dec6e4a-a92e-4204-9e42-f89d7dcafbfa/images/a7e1c1d6-2ec1-4271-952d-a58260ad7c81.png)


## 工具
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-tools"></a>

**Amazon Web Services**
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 通过标准的以太网光纤电缆将内部网络链接到 Direct Connect 位置。通过此连接，您可以直接创建连接到公有 Amazon Web Services 的虚拟接口，同时绕过网络路径中的互联网服务提供商。
+ [亚马逊弹性区块存储 (Amazon EBS) E](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) lastic Block Store 提供块级存储卷，用于亚马逊弹性计算云 (Amazon) 实例。 EC2
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 可帮助您在您在 AWS 上启动的实例和您自己的远程网络之间传递流量。

**其他工具**
+ [db2cli](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli) 是 Db2 交互式 CLI 命令。

## 最佳实践
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-best-practices"></a>
+ 在目标数据库上，使用 [Amazon S3 网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)访问 Amazon S3 中的数据库备份映像和日志文件。
+ 在源数据库上，使用[ PrivateLink 适用于 Amazon S3 的 AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html) 将数据库备份映像和日志文件发送到 Amazon S3。

## 操作说明
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-epics"></a>

### 设置环境变量
<a name="set-environment-variables"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置环境变量。 | 此模式使用以下名称：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.html)您可更改它们以适应您的环境。 | 数据库管理员 | 

### 配置本地 Db2 服务器
<a name="configure-the-on-premises-db2-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS CLI。 | 要下载并安装最新版本的 AWS CLI，请运行以下命令：<pre>$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />unzip awscliv2.zip<br />sudo ./aws/install</pre> | Linx 管理员 | 
| 设置 Db2 归档日志的本地目标。 | 要使 Amazon EC2 上的目标数据库与本地源数据库保持同步，需要从源数据库检索最新的事务日志。在此设置中，`/db2logs` 由 `LOGARCHMETH2` 在源上设置作为暂存区域。此目录中的存档日志将同步到 Amazon S3 中，并由亚马逊上的 Db2 访问。 EC2使用 `LOGARCHMETH2` 模式，原因是 `LOGARCHMETH1` 可能已配置为使用 AWS CLI 命令无法访问的第三方供应商工具。若要检索日志，请运行以下命令：<pre>db2 connect to sample<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 disk:/db2logs</pre> | 数据库管理员 | 
| 运行在线数据库备份。 | 运行在线数据库备份，并将其保存至本地备份文件系统：<pre>db2 backup db sample online to /backup </pre> | 数据库管理员 | 

### 设置 S3 存储桶和 IAM policy
<a name="set-up-the-s3-bucket-and-iam-policy"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | 为本地服务器创建 S3 存储桶，以便将备份 Db2 映象和日志文件发送到 AWS 上。Amazon 也将访问该存储桶 EC2：<pre>aws s3api create-bucket --bucket logshipmig-db2 --region us-east-1 </pre> | AWS 系统管理员 | 
|  创建一个 IAM 策略。 | `db2bucket.json` 文件包含用于访问 Amazon S3 存储桶的 IAM 策略：<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "kms:GenerateDataKey",<br />                "kms:Decrypt",<br />                "s3:PutObject",<br />                "s3:GetObject",<br />                "s3:AbortMultipartUpload",<br />                "s3:ListBucket",<br />                "s3:DeleteObject",<br />                "s3:GetObjectVersion",<br />                "s3:ListMultipartUploadParts"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::logshipmig-db2/*",<br />                "arn:aws:s3:::logshipmig-db2"<br />            ]<br />        }<br />    ]<br />}</pre>要创建策略，请使用以下 AWS CLI 命令：<pre>aws iam create-policy \<br />      --policy-name db2s3policy \<br />      --policy-document file://db2bucket.json </pre> JSON 输出显示策略的 Amazon 资源名称（ARN），其中 `aws_account_id` 代表您的账户 ID：<pre>"Arn": "arn:aws:iam::aws_account_id:policy/db2s3policy"</pre> | AWS 管理员、AWS 系统管理员 | 
| 将 IAM 策略附加到 EC2 实例使用的 IAM 角色。 | 在大多数 AWS 环境中，正在运行的 EC2 实例都由您的系统管理员设置的 IAM 角色。如果未设置 IAM 角色，请创建该角色并在 EC2 控制台上选择 M **odify IAM 角色**以将该角色与托管 Db2 数据库的 EC2 实例相关联。使用策略 ARN 将 IAM 策略附加到 IAM 角色：<pre>aws iam attach-role-policy \<br />    --policy-arn "arn:aws:iam::aws_account_id:policy/db2s3policy"  \<br />    --role-name db2s3role  </pre>附加策略后，任何与 IAM 角色关联的 EC2 实例都可以访问 S3 存储桶。 | AWS 管理员、AWS 系统管理员 | 

### 将源数据库备份映象和日志文件发送到 Amazon S3
<a name="send-the-source-database-backup-image-and-log-files-to-amazon-s3"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在本地 Db2 服务器上配置 AWS CLI。 | 使用在前面的步骤中生成的 `Access Key ID` 和 `Secret Access Key` 配置 AWS CLI：<pre>$ aws configure <br />AWS Access Key ID [None]: *************<br />AWS Secret Access Key [None]: ***************************<br />Default region name [None]: us-east-1<br />Default output format [None]: json</pre>  | AWS 管理员、AWS 系统管理员 | 
| 将备份映象发送到 Amazon S3。 | 早些时候，联机数据库备份已保存至 `/backup` 本地目录中。要将备份映象发送到 S3 存储桶，请运行以下命令：<pre>aws s3 sync /backup s3://logshipmig-db2/SAMPLE_backup</pre> | AWS 管理员、迁移工程师 | 
| 将 Db2 存档日志发送至 Amazon S3。 | 将本地 Db2 存档日志与 Amazon 上的目标 Db2 实例可以访问的 S3 存储桶同步： EC2<pre>aws s3 sync /db2logs s3://logshipmig-db2/SAMPLE_LOG</pre>使用 cron 或其他计划工具定期以运行此命令。频率取决于源数据库归档事务日志文件的频率。 | AWS 管理员、迁移工程师 | 

### 将亚马逊上的 Db2 连接 EC2 到 Amazon S3 并开始数据库同步
<a name="connect-db2-on-amazon-ec2-to-amazon-s3-and-start-the-database-sync"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 PKCS12 密钥库。 | Db2 使用公钥加密标准 (PKCS) 加密密钥库，保障 AWS 访问密钥的安全。创建密钥库并配置源 Db2 实例，以将其用于：<pre>gsk8capicmd_64 -keydb -create -db "/home/db2inst1/.keystore/db2s3.p12" -pw "<password>" -type pkcs12 -stash <br /> <br />db2 "update dbm cfg using keystore_location /home/db2inst1/.keystore/db2s3.p12 keystore_type pkcs12"</pre> | 数据库管理员 | 
| 创建 Db2 存储访问别名。 | 若要创建[存储访问别名](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)，请使用以下脚本语法：`db2 "catalog storage access alias <alias_name> vendor S3 server <S3 endpoint> container '<bucket_name>'"`例如，您的脚本可能如下所示：`db2 "catalog storage access alias DB2AWSS3 vendor S3 server s3.us-east-1.amazonaws.com container 'logshipmig-db2'" ` | 数据库管理员 | 
| 设置暂存区域。 | 默认情况下，Db2 使用 `DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH` 作为过渡区域，向 Amazon S3 上传和从 Amazon S3 下载文件。默认路径位于实例主目录 `sqllib/tmp/RemoteStorage.xxxx` 下，`xxxx` 引用 Db2 分区号。请注意，暂存区域必须有足够的容量来容纳备份映象和日志文件。您可使用注册表将暂存区域指向其他目录。我们还建议使用 `DB2_ENABLE_COS_SDK=ON`、`DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore` 和 `awssdk` 库链接，绕过 Amazon S3 暂存区进行数据库备份和恢复：<pre>#By root:<br />cp -rp /home/db2inst1/sqllib/lib64/awssdk/RHEL/7.6/* /home/db2inst1/sqllib/lib64/<br /><br />#By db2 instance owner:<br />db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/db2stage<br />db2set DB2_ENABLE_COS_SDK=ON<br />Db2set DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore<br />db2stop<br />db2start</pre> | 数据库管理员 | 
| 从备份映象恢复数据库。 |  EC2 从 S3 存储桶中的备份映像还原 Amazon 上的目标数据库：<pre>db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup replace existing</pre> | 数据库管理员 | 
| 前滚数据库。 | 恢复完成后，目标数据库进入向前滚挂起状态。配置 `LOGARCHMETH1` 和 `LOGARCHMETH2`，以便 Db2 知道从何处获取事务日志文件：<pre>db2 update db cfg for SAMPLE using LOGARCHMETH1 'DB2REMOTE://DB2AWSS3//SAMPLE_LOGS/'<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 OFF</pre>启动数据库前滚：<pre>db2 ROLLFORWARD DATABASE sample to END OF LOGS</pre>此命令处理已传输至 S3 存储桶的所有日志文件。根据本地 Db2 服务器上 `s3 sync` 命令的频率定期运行该命令。例如，如果 `s3 sync` 每小时运行一次，并且同步所有日志文件需要 10 分钟，则将命令设置为每小时后运行 10 分钟。 | 数据库管理员 | 

### 在转换窗口期间，让 Amazon 上的 Db2 上 EC2 线
<a name="bring-db2-on-amazon-ec2-online-during-the-cutover-window"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将目标数据库联机。 | 在割接窗口中，执行下列操作之一：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.html)将最后一个事务日志同步到 Amazon S3 后，最后一次运行 `ROLLFORWARD` 命令：<pre>db2 rollforward DB sample to END OF LOGS<br />db2 rollforward DB sample complete<br /><br />                                 Rollforward Status<br />....<br /> Rollforward status                     = not pending<br />....<br />DB20000I  The ROLLFORWARD command completed successfully.<br /><br />db2 activate db sample<br />DB20000I  The ACTIVATE DATABASE command completed successfully.</pre>将目标数据库联机，并将应用程序连接指向 Amazon EC2 上的 Db2。 | 数据库管理员 | 

## 问题排查
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 如果多个数据库在不同的主机 (DEV、QA、PROD) 上具有相同的实例名和数据库名称，则备份和日志可能会进入同一个子目录。 | 为 DEV、QA 和 PROD 使用不同的 S3 存储桶，并添加主机名作为子目录前缀，以避免混淆。 | 
| 如果在同一位置有多个备份映象，则恢复时会出现以下错误：`SQL2522N More than one backup file matches the time stamp value provided for the backed up database image.` | 在 `restore` 命令中，添加备份的时间戳：`db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup taken at 20230628164042 replace existing` | 

## 相关资源
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-resources"></a>
+ [不同操作系统和硬件平台之间的 Db2 备份与恢复操作](https://www.ibm.com/docs/en/db2/11.5?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)
+ [设置 Db2 存储访问别名和远程 DB2](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)
+ [db2 前滚命令](https://www.ibm.com/docs/en/db2/11.5?topic=commands-rollforward-database)
+ [Db2 辅助日志存档方法](https://www.ibm.com/docs/en/db2/11.5?topic=parameters-logarchmeth2-secondary-log-archive-method)