

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ログ配信を使用して Db2 for LUW を Amazon EC2 に移行することで、システム停止時間を短縮する
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time"></a>

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

## 概要
<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) のワークロードを Amazon Web Services (AWS) に移行する場合は、Amazon Elastic Compute Cloud (Amazon EC2) と Bring Your Own License (BYOL) モデルを使用すると最も迅速に行うことができます。しかし、膨大なデータをオンプレミスの 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>

**前提条件**
+ アクティブな AWS アカウント
+ オンプレミスファイルシステムのレイアウトと一致する EC2 インスタンス上で実行される Db2 インスタンス
+ EC2 インスタンスにアクセス可能な Amazon Simple Storage Service (Amazon S3) バケット
+ Amazon S3 をプログラムで呼び出すための AWS Identity and Access Management (IAM) ポリシーとロール 
+ Amazon EC2 とオンプレミスサーバーのタイムゾーンとシステムクロックの同期
+ [AWS Site-to-Site VPN](https://aws.amazon.com/vpn/) または [AWS Direct Connect](https://aws.amazon.com/directconnect/) を介して AWS に接続されたオンプレミスのネットワーク

**制限事項**
+ 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` を設定します。

**製品バージョン**
+ Db2 for LUW バージョン 11.5.9 以降

## アーキテクチャ
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-architecture"></a>

**ソーステクノロジースタック**
+ Db2 on Linux** **x86\$164

**ターゲットテクノロジースタック**
+ Amazon EBS
+ Amazon EC2
+ AWS Identity and Access Management (IAM)
+ Amazon S3
+ AWS Site-to-Site VPN または Direct Connect

**ターゲットアーキテクチャ**

次の図は、Db2 on Amazon EC2 への仮想プライベートネットワーク (VPN) 接続を介してオンプレミスで実行されている Db2 インスタンスの例を示しています。点線は、データセンターと AWS クラウド間の VPN トンネルを表しています。

![\[トランザクションログ配信を使用して、短い停止期間内で Db2 の移行を実現するワークフロー。\]](http://docs.aws.amazon.com/ja_jp/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>

**AWS サービス**
+ 「[AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) は、標準のイーサネット光ファイバーケーブルを介して内部ネットワークを Direct Connect の場所にリンクします。この接続を使用すると、Amazon S3 などのパブリックサービス、または Amazon VPC に対する仮想インターフェイスを直接作成できるため、ネットワークパスのインターネットサービスプロバイダーを回避できます。
+ [Amazon Elastic Block Store (Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) は、 Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで使用するブロックレベルストレージのボリュームを提供します。
+ 「[Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/)」は、AWS クラウドでスケーラブルなコンピューティング容量を提供します。仮想サーバーを必要な数だけ起動して、迅速にスケールアップまたはスケールダウンができます。
+ 「[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」は、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 のデータベースバックアップイメージとログファイルにアクセスします。
+ ソースデータベースで、[AWS PrivateLink for Amazon S3](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>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 環境変数を設定する。 | このパターンは、次の名前を使用しています。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.html)環境に合わせて変更することができます。 | DBA | 

### オンプレミスの Db2 サーバーを設定する
<a name="configure-the-on-premises-db2-server"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 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> | Linux 管理者 | 
| Db2 アーカイブログのローカル送信先を設定します。 | Amazon EC2 上のターゲットデータベースをオンプレミスのソースデータベースと同期させるには、ソースデータベースから最新のトランザクションログを取得する必要があります。このセットアップでは、`/db2logs` はソース上の `LOGARCHMETH2` によってステージング領域として設定されます。このディレクトリにアーカイブされたログは Amazon S3 に同期され、Db2 on Amazon EC2 によってアクセスされます。AWS CLI コマンドではアクセスできないサードパーティベンダーツールを使用するように `LOGARCHMETH2` が設定されている可能性があるため、このモードでは `LOGARCHMETH1` が使用されます。ログを取得するには、次のコマンドを実行します。<pre>db2 connect to sample<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 disk:/db2logs</pre> | DBA | 
| オンラインデータベースのバックアップを実行します。 | オンラインデータベースのバックアップを実行し、ローカルのバックアップファイルシステムに保存します。<pre>db2 backup db sample online to /backup </pre> | DBA | 

### S3 バケットおよび IAM ポリシーをセットアップする
<a name="set-up-the-s3-bucket-and-iam-policy"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 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 システム管理者 | 
| EC2 インスタンスが使用する IAM ロールに IAM ポリシーをアタッチします。 | ほとんどの AWS 環境では、システム管理者によって、実行中の EC2 インスタンスに IAM ロールが設定されています。IAM ロールが設定されていない場合は、ロールを作成し、EC2 コンソールで **[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>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| オンプレミスの 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 管理者、移行エンジニア | 
| Amazon S3 に Db2 アーカイブログを送信します。 | オンプレミスの Db2 アーカイブログを、Amazon EC2 上のターゲット Db2 インスタンスがアクセスできる S3 バケットと同期します。<pre>aws s3 sync /db2logs s3://logshipmig-db2/SAMPLE_LOG</pre>cron または他のスケジューリングツールを使用して、このコマンドを定期的に実行します。この頻度は、ソースデータベースがトランザクションログファイルをアーカイブする頻度に応じて異なります。 | AWS 管理者、移行エンジニア | 

### Db2 on Amazon EC2 を Amazon S3 に接続し、データベース同期を開始します。
<a name="connect-db2-on-amazon-ec2-to-amazon-s3-and-start-the-database-sync"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 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> | DBA | 
| 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'" ` | DBA | 
| ステージング領域を設定します。 | デフォルトでは、Db2 は Amazon S3 でファイルをアップロードおよびダウンロードするためのステージング領域として `DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH` を使用します。デフォルトのパスは、インスタンスのホームディレクトリの下にある `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> | DBA | 
| バックアップイメージからデータベースを復元します。 | S3 バケットのバックアップイメージから Amazon EC2 上のターゲットデータベースを復元します。<pre>db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup replace existing</pre> | DBA | 
| データベースをロールフォワードします。 | 復元が完了すると、ターゲットデータベースはロールフォワード保留状態になります。Db2 がトランザクションログファイルを取得する場所を認識できるように、`LOGARCHMETH1` と `LOGARCHMETH2` を設定します。<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 バケットに転送されたすべてのログファイルを処理します。`s3 sync` コマンドは、オンプレミス Db2 サーバー上で定期的に実行されます。例えば、`s3 sync` を 1 時間ごとに実行し、すべてのログファイルを同期するのに 10分 かかる場合は、コマンドを 1 時間おきに 10 分間実行するように設定します。 | DBA | 

### カットオーバー期間中に Db2 on Amazon EC2 をオンラインにします
<a name="bring-db2-on-amazon-ec2-online-during-the-cutover-window"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ターゲットデータベースをオンラインにします。 | カットオーバー期間中、以下のいずれかの操作を行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/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>ターゲットデータベースをオンラインにし、アプリケーション接続を Db2 on Amazon EC2 にポイントします。 | DBA | 

## トラブルシューティング
<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-REMOTE の設定」](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)