

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用日誌運送將 LUW 的 Db2 遷移至 Amazon EC2，以減少中斷時間
<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*

## 總結
<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) 搭配自帶授權 (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 帳戶
+ 在 ECDb2EC2 執行個體，符合內部部署檔案系統配置
+ EC2 執行個體可存取的 Amazon Simple Storage Service (Amazon S3) 儲存貯體
+ AWS Identity and Access Management (IAM) 政策和角色，用於對 Amazon S3 進行程式設計呼叫
+ Amazon EC2 和內部部署伺服器上的同步時區和系統時鐘
+ 透過 AWS [ Site-to-Site VPN 或 AWS](https://aws.amazon.com/vpn/) [Direct 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`中設定 。

**產品版本**
+ Db2 for LUW 11.5.9 版及更新版本

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

**來源技術堆疊**
+ Linux** **x86\$164 上的 Db2 

**目標技術堆疊**
+ Amazon EBS
+ Amazon EC2
+ AWS Identity and Access Management (IAM)
+ Amazon S3
+ AWS Site-to-Site或 Direct Connect

**目標架構**

下圖顯示一個在內部部署執行的 Db2 執行個體，具有與 Amazon EC2 上的 Db2 的虛擬私有網路 (VPN) 連線。虛線代表資料中心和 AWS 雲端之間的 VPN 通道。

![\[使用交易日誌運送在短暫中斷時段內完成 Db2 遷移的工作流程。\]](http://docs.aws.amazon.com/zh_tw/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 Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一種開放原始碼工具，可協助您透過命令列 shell 中的命令與 AWS 服務互動。
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 透過標準乙太網路光纖纜線，將您的內部網路連結至 Direct Connect 位置。透過此連線，您可以直接建立與公有 AWS 服務的虛擬介面，同時略過網路路徑中的網際網路服務供應商。
+ [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 中的資料庫備份映像和日誌檔案。
+ 在來源資料庫上，使用適用於 [Amazon S3 的 AWS PrivateLink ](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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定環境變數。 | 此模式使用以下名稱：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定 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，並由 Amazon EC2 上的 Db2 存取。模式使用 ，`LOGARCHMETH2`因為 `LOGARCHMETH1` 可能已設定為使用 AWS CLI 命令無法存取的第三方廠商工具。若要擷取日誌，請執行下列命令：<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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 S3 儲存貯體。 | 為現場部署伺服器建立 S3 儲存貯體，以在 AWS 上將備份 Db2 映像和日誌檔案傳送至 。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 Resource Name (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 主控台上的**修改 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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在內部部署 Db2 伺服器上設定 AWS CLI。 | 使用 設定 AWS CLI，`Access Key ID`並在先前步驟中`Secret Access Key`產生：<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 EC2 上目標 Db2 執行個體可存取的 S3 儲存貯體同步：<pre>aws s3 sync /db2logs s3://logshipmig-db2/SAMPLE_LOG</pre>使用 cron 或其他排程工具定期執行此命令。頻率取決於來源資料庫封存交易日誌檔案的頻率。 | AWS 管理員、遷移工程師 | 

### 將 Amazon EC2 上的 Db2 連線至 Amazon S3 並啟動資料庫同步 Amazon EC2
<a name="connect-db2-on-amazon-ec2-to-amazon-s3-and-start-the-database-sync"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 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 會使用 `DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH`做為臨時區域，在 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> | DBA | 
| 從備份映像還原資料庫。 | 從 S3 儲存貯體中的備份映像還原 Amazon EC2 上的目標資料庫：<pre>db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup replace existing</pre> | DBA | 
| 向前滾動資料庫。 | 還原完成後，目標資料庫將進入向前滾動擱置狀態。設定 `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 分鐘後執行一次。 | DBA | 

### 在切換時段將 Db2 帶入 Amazon EC2
<a name="bring-db2-on-amazon-ec2-online-during-the-cutover-window"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 讓目標資料庫上線。 | 在切換時段期間，執行下列其中一項操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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。 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 STORAGE ACCESS ALIAS 和 DB2REMOTE](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)
+ [Db2 ROLLFORWARD 命令](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)