

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

# 使用适用于 Linux、Unix、Windows 的 IBM Db2 和亚马逊 RDS 数据库 (Db2 LUW) 作为来源 AWS DMS
<a name="CHAP_Source.DB2"></a>

您可以使用 () 将数据从适用于 Linux、Unix、Windows 和 Amazon RDS (Db2 LUW) 的 IBM Db AWS Database Migration Service 2 数据库迁移到任何支持的目标数据库。AWS DMS

有关 AWS DMS 支持作为源的 Linux、Unix、Windows 和 RDS 上的 Db2 版本的信息，请参阅[的来源 AWS DMS](CHAP_Introduction.Sources.md)。

可以使用安全套接字层 (SSL) 加密 Db2 LUW 端点与复制实例之间的连接。有关将 SSL 用于 Db2 LUW 终端节点的更多信息，请参阅[将 SSL 与 AWS Database Migration Service](CHAP_Security.SSL.md)。

从 IBM Db2 源数据库 AWS DMS 读取数据时，它会使用 Db2 版本 9.7 及更高版本的默认隔离级别 CURSOR STABILITY (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 用户帐户需要以下权限：

  ```
  GRANT CONNECT ON DATABASE TO USER <DMS_USER>;
  GRANT USAGE ON WORKLOAD SYSDEFAULTUSERWORKLOAD 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.ENV_SYS_INFO TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.DBCFG TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.DB2_CF TO USER <DMS_USER>;
  GRANT EXECUTE ON FUNCTION SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID TO USER <DMS_USER>;
  
  -- Use the following queries to generate the grants, and then execute the resulting statements.
  SELECT 'GRANT SELECT ON SYSCAT.' || RTRIM(TABNAME) || ' TO USER <DMS_USER>;' FROM SYSCAT.TABLES WHERE TABSCHEMA = 'SYSCAT' AND TYPE = 'V';
  SELECT 'GRANT SELECT ON SYSIBM.' || RTRIM(TABNAME) || ' TO USER <DMS_USER>;' FROM SYSCAT.TABLES WHERE TABSCHEMA = 'SYSIBM' AND TYPE in ('T', 'V');
  SELECT 'GRANT EXECUTE ON PACKAGE NULLID.' || RTRIM(PKGNAME) || ' TO USER <DMS_USER>;' FROM SYSCAT.PACKAGES WHERE PKGSCHEMA = 'NULLID';
  SELECT 'GRANT EXECUTE ON PROCEDURE SYSIBM.' || RTRIM(PROCNAME) || ' TO USER <DMS_USER>;' FROM SYSCAT.PROCEDURES WHERE PROCSCHEMA = 'SYSIBM';
  
  -- For all the source tables grant the select permission
  GRANT SELECT ON <SCHEMA>.<TABLE> TO USER <DMS_USER>;
  ```
+ 使用 IBM DB2 for 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)。
+ 如果您使用 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 语句。
+ 对 Multi-Dimensional 群集 (MDC) 表执行更新时，每次更新都会在 AWS DMS 控制台中显示为 INSERT \+ 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 实用程序在页面级别加载的数据进行迁移。相反，请使用 IMPORT 实用程序，该实用程序使用 SQL 插入。有关更多信息，请参阅 [IMPORT 和 LOAD 实用程序之间的区别]( 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）时有以下限制：
  + 在 DPF 环境中，DMS 无法在 Db2 节点之间协调事务。这是由于 IBM DB2READLOG API 接口中的限制造成。在 DPF 中，事务可能跨越多个 Db2 节点，具体取决于 DB2 对数据进行分区的方式。因此，您的 DMS 解决方案必须独立地从每个 Db2 节点捕获事务。
  + 通过在多个 DMS 源端点上将 `connectNode` 设置为 `1`，DMS 可以从 DPF 集群中的每个 Db2 节点捕获本地事务。此配置对应于 DB2 服务器配置文件 `db2nodes.cfg` 中定义的逻辑节点号。
  + 单个 Db2 节点上的本地事务可能是更大的全局事务的一部分。DMS 在目标上独立应用每个本地事务，无需与其他 Db2 节点上的事务进行协调。这种独立的处理可能会增加复杂性，尤其是在分区之间移动行时。
  + 当 DMS 从多个 Db2 节点复制时，无法保证目标上的操作顺序正确，因为 DMS 会独立地为每个 Db2 节点应用操作。您必须确保独立地从每个 Db2 节点捕获本地事务适用于您的特定使用案例。
  + 从 DPF 环境迁移时，我们建议先运行不带缓存事件的满载任务，然后运行 CDC-only 任务。我们建议每个 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（更改数据捕获）复制任务。 AWS DMS 将在重启 CDC 或 FULL\+CDC 任务时默认启用此属性。但是，在任务重新启动之前在源数据库中所做的任何更改都可能被遗漏。

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

AWS DMS 不支持从以下 DB2 系统架构迁移表：
+ `SYSIBM`
+ `SYSIBMADM`
+ `SYSCAT`
+ `SYSSTAT`
+ `SYSPROC`
+ `SYSFUN`
+ `SYSPUBLIC`
+ `SYSTOOLS`

这些架构包含无法检索其元数据的 DB2 系统目录表。 AWS DMS如果您的表映射选择规则包括这些架构（例如，使用通配符模式，例如`%`架构名称），则迁移任务可能会失败。

为避免出现此问题，请在表映射规则中使用以下方法之一：
+ 在`include`规则中仅指定要迁移的用户架构。
+ 在`exclude`规则之前为 DB2 系统架构添加一条明确的规则。`include`

以下示例显示了表映射规则，这些规则使用通配符模式排除 DB2 系统架构，然后包括所有剩余的用户架构。

```
	{
	  "rules": [
	    {
	      "rule-type": "selection",
	      "rule-id": "1",
	      "rule-name": "exclude-db2-system-schemas",
	      "object-locator": {
	        "schema-name": "SYS%",
	        "table-name": "%"
	      },
	      "rule-action": "exclude"
	    },
	    {
	      "rule-type": "selection",
	      "rule-id": "2",
	      "rule-name": "include-user-schemas",
	      "object-locator": {
	        "schema-name": "%",
	        "table-name": "%"
	      },
	      "rule-action": "include"
	    }
	  ]
	}
```

**注意：**在表映射规则中，先评估`exclude`规则，然后再评估`include`规则。在此示例中，该`exclude`规则 AWS DMS 禁止选择以 SYS 开头的架构中的任何表，而该`include`规则则会选择其余架构中的所有表。

## 使用 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 用作源时可以使用的端点设置。


| 设置名称 | 说明 | 
| --- | --- | 
| `CurrentLsn` | 对于持续复制 (CDC)，请使用 `CurrentLsn` 指定要在其中启动复制的日志序列号 (LSN)。 | 
| `MaxKBytesPerRead` | 每次读取的最大字节数，以 NUMBER 值表示。默认值为 64 KB。 | 
| `SetDataCaptureChanges` | 启用持续复制 (CDC) 作为 BOOLEAN 值。默认值为 true。 | 

## 使用 Db2 LUW 作为源时的额外连接属性 (ECA) AWS DMS
<a name="CHAP_Source.DB2.ConnectionAttrib"></a>

在使用 AWS DMS 控制台创建源端点时，可以指定额外连接属性 (ECA)，也可以使用中的`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 一起用作源的 ECA。


| 属性名称 | 说明 | 
| --- | --- | 
| `ConnectionTimeout` | 使用此 ECA 设置 Db2 LUW 端点的端点连接超时（以秒为单位）。默认值为 10 秒。<br />示例：`ConnectionTimeout=30;` | 
| `executeTimeout` | 额外连接属性，用于设置 DB2 LUW 端点的语句（查询）超时（以秒为单位）。默认值为 60 秒。<br />示例：`executeTimeout=120;` | 
| `StartFromContext` | 对于持续复制（CDC），请使用 `StartFromContext` 指定日志的下限，复制将从此位置开始。`StartFromContext` 接受不同格式的值。有效值包括：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.DB2.html)[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.DB2.html)[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.DB2.html)<br />要确定日志文件的 LRI/LSN 范围，请按以下示例所示运行`db2flsn`命令。<pre>db2flsn -db {{SAMPLE}} -lrirange 2</pre><br />该示例的输出类似于以下内容。<pre><br />S0000002.LOG: has LRI range 00000000000000010000000000002254000000000004F9A6 to <br />000000000000000100000000000022CC000000000004FB13</pre><br />在该输出中，日志文件为 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 | 
| GRAPHIC (n) | WSTRING，用于长度大于 0 且小于或等于 127 个双字节字符的固定长度图形字符串 | 
| VARGRAPHIC (n) | WSTRING，用于长度大于 0 且小于或等于 16352 个双字节字符的可变长度图形字符串 | 
| LONG VARGRAPHIC (n) | CLOB，用于长度大于 0 且小于或等于 16352 个双字节字符的可变长度图形字符串 | 
| CHARACTER (n) | STRING，用于长度大于 0 且小于或等于 255 个双字节字符的固定长度字符串 | 
| VARCHAR (n) | STRING，用于长度大于 0 且小于或等于 32704 个双字节字符的可变长度字符串 | 
| LONG VARCHAR (n) | CLOB，用于长度大于 0 且小于或等于 32704 个双字节字符的可变长度字符串 | 
| 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<br />最大长度为 2147483647 个字节 | 
| CLOB (n) | CLOB<br />最大长度为 2147483647 个字节 | 
| DBCLOB (n) | CLOB<br />最大长度为 1073741824 个双字节字符 | 
| XML | CLOB | 