

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

# 使用適用於 Linux、Unix、Windows 和 Amazon RDS 資料庫 (Db2 LUW) 的 IBM Db2 作為 的來源 AWS DMS
<a name="CHAP_Source.DB2"></a>

您可以使用 AWS Database Migration Service ()，將資料從適用於 Linux、Unix、Windows 和 Amazon RDS (Db2 LUW) 的 IBM Db2 資料庫遷移到任何支援的目標資料庫AWS DMS。

如需 AWS DMS 支援 做為來源的 Linux、Unix、Windows 和 RDS 上的 Db2 版本資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

您可以使用 Secure Sockets Layer (SSL) 加密您 Db2 LUW 端點與複寫執行個體之間的連線。如需使用 SSL 搭配 Db2 LUW 端點的詳細資訊，請參閱[搭配 使用 SSL AWS Database Migration Service](CHAP_Security.SSL.md)。

當 從 IBM Db2 來源資料庫 AWS DMS 讀取資料時，它會使用 Db2 9.7 版及更新版本的預設隔離層級 CURSOR 穩定性 (CS)。如需詳細資訊，請參閱適用於 [Linux、UNIX 和 Windows 的 IBM Db2 ](https://www.ibm.com/docs/en/db2/12.1.0) 文件。

## 使用 Db2 LUW 做為 來源時的先決條件 AWS DMS
<a name="CHAP_Source.DB2.Prerequisites"></a>

您必須完成以下的事前準備，才能使用 Db2 LUW 資料庫做為來源。

若要啟用進行中複寫，也稱為變更資料擷取 (CDC)，請執行以下作業：
+ 將資料庫設定為可復原，這 AWS DMS 需要擷取變更。如果資料庫組態參數 `LOGARCHMETH1` 和 `LOGARCHMETH2` 其中之一或兩者皆設定為 `ON`，則資料庫為可復原。

  如果您的資料庫可復原，則 AWS DMS 可以`ARCHIVE LOG`視需要存取 Db2。
+ 確保 DB2 交易日誌可用，且有足夠的保留期間可供 處理 AWS DMS。
+ DB2 需要 `SYSADM` 或 `DBADM` 授權才能擷取交易日誌記錄。授予使用者帳戶以下許可：
  + `SYSADM` 或 `DBADM`
  + `DATAACCESS`
**注意**  
對於僅完全載入的任務，DMS 使用者帳戶需要 DATAACCESS 許可。
+ 將 IBM DB2 用於 LUW 9.7 版作為來源時，請如下所示，設定額外連線屬性 (ECA)，即 `CurrentLsn`：

  `CurrentLsn=LSN` (其中 `LSN` 會指定您希望複寫開始的日誌序號 (LSN))。或 `CurrentLsn=scan`。
+ 使用 Amazon RDS for Db2 LUW 做為來源時，請確定封存日誌可供 使用 AWS DMS。由於 AWS受管 Db2 資料庫會盡快清除封存日誌，因此您應該增加日誌保持可用的時間長度。例如，若要將日誌保留增加到 24 小時，請執行下列命令：

  ```
  db2 "call rdsadmin.set_archive_log_retention( ?, 'TESTDB', '24')"
  ```

  如需 Amazon RDS for Db2 LUW 程序的詳細資訊，請參閱[《Amazon Relational Database Service 使用者指南》中的 Amazon RDS for Db2 預存程序參考](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-stored-procedures.html)。 *Amazon Relational Database Service *
+ 如果您使用 DB2 特定的預遷移評估，請授予下列權限：

  ```
  GRANT CONNECT ON DATABASE TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBM.SYSDUMMY1 TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.ENV_INST_INFO TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.DBCFG TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.SCHEMATA TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.COLUMNS TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.TABLES TO USER <DMS_USER>;
  GRANT EXECUTE ON FUNCTION SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID TO <DMS_USER>;
  GRANT EXECUTE ON PACKAGE NULLID.SYSSH200 TO USER <DMS_USER>;
  ```

## 使用 Db2 LUW 做為 來源的限制 AWS DMS
<a name="CHAP_Source.DB2.Limitations"></a>

AWS DMS 不支援叢集資料庫。然而，您可以針對叢集的每個端點分別定義 Db2 LUW。例如，您可以使用叢集中的任一個節點建立「完全載入」遷移任務，然後從每個節點建立單獨的任務。

AWS DMS 不支援來源 Db2 LUW 資料庫中的`BOOLEAN`資料類型。

使用進行中複寫 (CDC) 時，有下列限制：
+ 當具有多個分割區的資料表遭到截斷時， AWS DMS 主控台中顯示的 DDL 事件數目等於分割區數目。這是因為 Db2 LUW 會針對每個分割區分別記錄 DDL。
+ 分區資料表上不支援以下 DDL 動作：
  + ALTER TABLE ADD PARTITION
  + ALTER TABLE DETACH PARTITION
  + ALTER TABLE ATTACH PARTITION
+ AWS DMS 不支援從 DB2 高可用性災難復原 (HADR) 待命執行個體進行持續複寫遷移。待命執行個體是無法存取的狀態。
+ 不支援 DECFLOAT 資料類型。因此，進行中複寫期間會忽略 DECFLOAT 資料行的變更。
+ 不支援 RENAME COLUMN 陳述式。
+ 執行多維叢集 (MDC) 資料表的更新時，每個更新都會在 AWS DMS 主控台中顯示為 INSERT \$1 DELETE。
+ 任務設定 **Include LOB columns in replication (在複寫中包含 LOB 資料行)** 啟用時，會在進行中複寫期間暫停任何有 LOB 資料行的資料表。
+ 針對 Db2 LUW 10.5 版和更新版本：忽略資料列不足儲存資料的變數長度字串資料行。此限制僅適用於針對 VARCHAR 和 VARGRAPHIC 等資料類型的資料欄，使用擴大資料列大小建立的資料表。若要解決此限制，請將資料表移至頁面大小較高的資料表空間。如需詳細資訊，請參閱[如果我想要變更 DB2 資料表空間的頁面尺寸，該怎麼辦]( https://www.ibm.com/support/pages/what-can-i-do-if-i-want-change-pagesize-db2-tablespaces )。
+ 對於進行中複寫，DMS 不支援遷移 DB2 LOAD 公用程式在頁面層級載入的資料。請改用使用 SQL 插入的 IMPORT 公用程式。如需詳細資訊，請參閱[匯入與載入公用程式之間的差異]( https://www.ibm.com/docs/en/db2/11.1?topic=utilities-differences-between-import-load-utility)。
+ 執行複寫任務時，只有當使用 DATA CAPTURE CHANGE 屬性建立資料表時，DMS 才會擷取 CREATE TABLE DDL。
+ DMS 使用 Db2 資料庫分割區功能 (DPF) 時有下列限制：
  + DMS 無法在 DPF 環境中跨 Db2 節點協調交易。這是因為 IBM DB2READLOG API 介面中的限制。在 DPF 中，交易可能會跨越多個 Db2 節點，取決於 DB2 分割資料的方式。因此，DMS 解決方案必須獨立擷取每個 Db2 節點的交易。
  + DMS 可以在多個 DMS 來源端點`1`上`connectNode`將 設定為 ，從 DPF 叢集中的每個 Db2 節點擷取本機交易。此組態對應至 DB2 伺服器組態檔案 中定義的邏輯節點號碼`db2nodes.cfg`。
  + 個別 Db2 節點上的本機交易可能是大型全域交易的一部分。DMS 會在目標上獨立套用每個本機交易，而不協調其他 Db2 節點上的交易。這種獨立處理可能會導致複雜性，特別是在分割區之間移動資料列時。
  + 當 DMS 從多個 Db2 節點複寫時，無法保證目標的正確操作順序，因為 DMS 會為每個 Db2 節點獨立套用操作。您必須確保獨立於每個 Db2 節點擷取本機交易適用於您的特定使用案例。
  + 從 DPF 環境遷移時，我們建議您先在沒有快取事件的情況下執行 Full Load 任務，然後執行僅限 CDC 的任務。我們建議每個 Db2 節點執行一個任務，從使用`StartFromContext`端點額外連線屬性設定的完全載入開始時間戳記或 LRI （日誌記錄識別符） 開始。如需有關判斷複寫起點的資訊，請參閱 *IBM 支援文件中*[尋找複寫開始的 LSN 或 LRI 值](https://www.ibm.com/support/pages/db2-finding-lsn-or-lri-value-replication-start)。
+ 對於持續複寫 (CDC)，如果您計劃從特定時間戳記開始複寫，則必須將`StartFromContext`額外的連線屬性設定為所需的時間戳記。
+ DMS 目前不支援 Db2 pureScale 功能，這是 DB2 LUW 的擴充功能，您可以用來擴展資料庫解決方案。
+ `DATA CAPTURE CHANGES` 資料表選項是 DB2 資料複寫程序的重要先決條件。在建立資料表時忽略啟用此選項可能會導致遺失資料，尤其是對於 CDC （變更資料擷取），僅限從較早的起點啟動的複寫任務。在重新啟動 CDC 或 FULL\$1CDC 任務時， 預設 AWS DMS 會啟用此屬性。不過，在任務重新啟動之前，在來源資料庫中所做的任何變更都可能會遺失。

  ```
  ALTER TABLE TABLE_SCHEMA.TABLE_NAME DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
  ```

## 使用 Db2 LUW 做為 來源時的端點設定 AWS DMS
<a name="CHAP_Source.DB2.ConnectionSettings"></a>

您可以在使用 AWS DMS 主控台建立來源端點時指定設定，或使用 中的 `create-endpoint`命令[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html)搭配

`--ibm-db2-settings '{"EndpointSetting1": "value1","EndpointSetting2": "value2"}'`

JSON 語法。

下列資料表顯示您可以在將 Db2 LUW 作為來源搭配使用的端點設定。


| 設定名稱 | Description | 
| --- | --- | 
|  `CurrentLsn`  |  對於進行中複寫 (CDC)，請使用 `CurrentLsn` 來指定您希望複寫開始的日誌序號 (LSN)。  | 
|  `MaxKBytesPerRead`  |  每次讀取的位元組數目上限，為 NUMBER 值。預設值為 64 KB。  | 
|  `SetDataCaptureChanges`  |  將進行中複寫 (CDC) 啟用作為 BOOLEAN 值。預設值為 true。  | 

## 使用 Db2 LUW 做為 來源時的額外連線屬性 (ECAs) AWS DMS
<a name="CHAP_Source.DB2.ConnectionAttrib"></a>

您可以在使用 AWS DMS 主控台建立來源端點時指定額外連線屬性 (ECAs)，或使用 中的 `create-endpoint`命令[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html)搭配

`--extra-connection-attributes 'ECAname1=value1;ECAname2=value2;'`

下表顯示您可以搭配 Db2 LUW 做為來源使用的 ECAs。


| 屬性名稱 | 描述 | 
| --- | --- | 
|  `ConnectionTimeout`  |  使用此 ECA 設定 Db2 LUW 端點的端點連線逾時，以秒為單位。預設值為 10 秒。 範例：`ConnectionTimeout=30;`  | 
|  `executeTimeout`  |  設定 DB2 LUW 端點陳述式 （查詢） 逾時的額外連線屬性，以秒為單位。預設值為 60 秒。 範例：`executeTimeout=120;`  | 
|  `StartFromContext`  |  對於進行中複寫 (CDC)，使用 `StartFromContext` 指定開始複寫的日誌下限。`StartFromContext` 會接受不同形式的值。有效值包含： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DB2.html) 若要判斷日誌檔的 LRI/LSN 範圍，請如以下範例所示，執行 `db2flsn` 命令。 <pre>db2flsn -db SAMPLE -lrirange 2</pre> 範例中的輸出與以下內容類似。 <pre><br />S0000002.LOG: has LRI range 00000000000000010000000000002254000000000004F9A6 to <br />000000000000000100000000000022CC000000000004FB13</pre> 在該輸出中，日誌檔案是 S0000002.LOG，而 **StartFromContext** LRI 值是在該範圍結尾的 34 個位元組。 <pre>0100000000000022CC000000000004FB13</pre>  | 

## IBM Db2 LUW 的來源資料類型
<a name="CHAP_Source.DB2.DataTypes"></a>

使用 Db2 LUW 做為 來源的資料遷移 AWS DMS 支援大多數 Db2 LUW 資料類型。下表顯示使用 時支援的 Db2 LUW 來源資料類型， AWS DMS 以及來自 AWS DMS 資料類型的預設映射。如需 Db2 LUW 資料類型的詳細資訊，請參閱 [Db2 LUW 文件](https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008483.html)。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  Db2 LUW 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC (p,s)  | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  如果精確度是 16，則是 REAL8；如果精確度是 34，則是 STRING  | 
|  圖像 (n)  |  WSTRING，適用於長度大於 0 與小於或等於 127 的雙倍位元組字元的固定長度圖片字串  | 
|  VARGRAPHIC (n)  |  WSTRING，適用於長度大於 0 與小於或等於 16,352 的雙倍位元組字元的變動長度圖片字串  | 
|  LONG VARGRAPHIC (n)  |  CLOB，適用於長度大於 0 與小於或等於 16,352 的雙倍位元組字元的變動長度圖片字串  | 
|  CHARACTER (n)  |  STRING，適用於長度大於 0 與小於或等於 255 的雙倍位元組字元的固定長度字串  | 
|  VARCHAR (n)  |  STRING，適用於長度大於 0 與小於或等於 32,704 的雙倍位元組字元的變動長度字串  | 
|  LONG VARCHAR (n)  |  CLOB，適用於長度大於 0 與小於或等於 32,704 的雙倍位元組字元的變動長度字串  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  DATETIME  | 
|  BLOB(n)  |  BLOB 長度上限為 2,147,483,647 個位元組  | 
|  CLOB(n)  |  CLOB 長度上限為 2,147,483,647 個位元組  | 
|  DBCLOB (n)  |  CLOB 最大長度是 1,073,741,824 個雙位元組字元  | 
|  XML  |  CLOB  | 