

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

# 使用连接到 IBM DB2 以获取 z/OS 数据库 AWS Schema Conversion Tool
<a name="CHAP_Source.DB2zOS"></a>

您可以使用 AWS SCT 将 IBM Db2 中的架构、代码对象和应用程序代码 z/OS 转换为以下目标。
+ Amazon RDS for MySQL
+ Amazon Aurora MySQL 兼容版
+ Amazon RDS for PostgreSQL
+ Amazon Aurora PostgreSQL 兼容版

## Db2 z/OS 作为源数据库的先决条件
<a name="CHAP_Source.DB2zOS.Prerequisites"></a>

 z/OS 版本 12 的 IBM Db2 函数级别 100 数据库版本不支持 IBM Db2 z/OS 版本 12 的大多数新功能。此数据库版本支持回退到 Db2 版本 11 以及与 Db2 版本 11 的数据共享。为避免转换 Db2 版本 11 中不支持的功能，我们建议您使用适用于 z/OS 数据库函数级别 500 或更高版本的 IBM Db2 作为源。 AWS SCT

您可以使用以下代码示例来检查 z/OS 数据库的源 IBM Db2 的版本。

```
SELECT GETVARIABLE('SYSIBM.VERSION') as version FROM SYSIBM.SYSDUMMY1;
```

请确保此代码返回版本 `DSN12015` 或更高版本。

您可以使用以下代码示例来检查源 IBM Db2 z/OS 数据库中`APPLICATION COMPATIBILITY`特殊寄存器的值。

```
SELECT CURRENT APPLICATION COMPATIBILITY as version FROM SYSIBM.SYSDUMMY1;
```

请确保此代码返回版本 `V12R1M500` 或更高版本。

## Db2 z/OS 作为源数据库的权限
<a name="CHAP_Source.DB2zOS.Permissions"></a>

连接到 Db2 以获取 z/OS 数据库以及读取系统目录和表所需的权限如下：
+ SELECT ON SYSIBM.LOCATIONS
+ SELECT ON SYSIBM.SYSCHECKS
+ SELECT ON SYSIBM.SYSCOLUMNS
+ SELECT ON SYSIBM.SYSDATABASE
+ SELECT ON SYSIBM.SYSDATATYPES
+ 在 SYSIBM 上选择。 SYSDUMMY1
+ SELECT ON SYSIBM.SYSFOREIGNKEYS
+ SELECT ON SYSIBM.SYSINDEXES
+ SELECT ON SYSIBM.SYSKEYCOLUSE
+ SELECT ON SYSIBM.SYSKEYS
+ SELECT ON SYSIBM.SYSKEYTARGETS
+ SELECT ON SYSIBM.SYSJAROBJECTS
+ SELECT ON SYSIBM.SYSPACKAGE
+ SELECT ON SYSIBM.SYSPARMS
+ SELECT ON SYSIBM.SYSRELS
+ SELECT ON SYSIBM.SYSROUTINES
+ SELECT ON SYSIBM.SYSSEQUENCES
+ SELECT ON SYSIBM.SYSSEQUENCESDEP
+ SELECT ON SYSIBM.SYSSYNONYMS
+ SELECT ON SYSIBM.SYSTABCONST
+ SELECT ON SYSIBM.SYSTABLES
+ SELECT ON SYSIBM.SYSTABLESPACE
+ SELECT ON SYSIBM.SYSTRIGGERS
+ SELECT ON SYSIBM.SYSVARIABLES
+ SELECT ON SYSIBM.SYSVIEWS

要将 z/OS 表的 Db2 转换为 PostgreSQL 分区表，请使用该实用程序收集数据库中表空间和表的统计信息，如下所示。`RUNSTATS`

```
LISTDEF YOURLIST INCLUDE TABLESPACES DATABASE YOURDB 
RUNSTATS TABLESPACE
LIST YOURLIST
TABLE (ALL) INDEX (ALL KEYCARD)
UPDATE ALL
REPORT YES
SHRLEVEL REFERENCE
```

在上述示例中，将 `YOURDB` 占位符替换为源数据库的名称。

## z/OS 作为源连接到 Db2
<a name="CHAP_Source.DB2zOS.Connecting"></a>

使用以下过程通过连接 z/OS 源数据库的 Db2。 AWS SCT

**连接到 IBM Db2 以获取 z/OS 源数据库**

1. 在中 AWS Schema Conversion Tool，选择**添加来源**。

1. 选择 **Db2 for z/OS**，然后选择**下一步**。

   此时显示**添加源**对话框。

1. 对于**连接名称**，输入数据库的名称。 AWS SCT 会在左侧面板的树中显示此名称。

1. 使用来自的数据库凭据 AWS Secrets Manager 或手动输入：
   + 要使用 Secrets Manager 中的数据库凭证，请按照以下说明进行操作：

     1. 对于 **AWS 密钥**，输入密钥名称。

     1. 选择**填充**可使用 Secrets Manager 中的数据库凭证自动填写数据库连接对话框中的所有值。

     有关使用 Secrets Manager 中的数据库凭证的信息，请参阅[AWS Secrets Manager 在中配置 AWS Schema Conversion Tool](CHAP_UserInterface.SecretsManager.md)。
   + 要手动输入 IBM Db2 以获取 z/OS 源数据库连接信息，请按照以下说明进行操作：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/CHAP_Source.DB2zOS.html)

1. 选择 “**测试连接**” 以验证是否 AWS SCT 可以连接到您的源数据库。

1. 选择**连接**以连接到源数据库。

## 将 MySQL 用作目标数据库的权限
<a name="CHAP_Source.DB2zOS.ConfigureMySQL"></a>

下面列出了将 MySQL 用作目标所需的权限：
+ CREATE ON \$1.\$1
+ ALTER ON \$1.\$1
+ DROP ON \$1.\$1
+ INDEX ON \$1.\$1
+ REFERENCES ON \$1.\$1
+ SELECT ON \$1.\$1
+ CREATE VIEW ON \$1.\$1
+ SHOW VIEW ON \$1.\$1
+ TRIGGER ON \$1.\$1
+ CREATE ROUTINE ON \$1.\$1
+ ALTER ROUTINE ON \$1.\$1
+ EXECUTE ON \$1.\$1
+ SELECT ON mysql.proc
+ 插入，在 AWS\$1DB 2ZOS\$1EXT 上更新。 \$1
+ 在 AWS\$1DB 2ZOS\$1EXT\$1DATA 上插入、更新、删除。 \$1
+ 在 AWS\$1DB 2ZOS\$1EXT\$1DATA 上创建临时表。 \$1

您可以使用以下代码示例创建数据库用户并授予权限。

```
CREATE USER 'user_name' IDENTIFIED BY 'your_password';
GRANT CREATE ON *.* TO 'user_name';
GRANT ALTER ON *.* TO 'user_name';
GRANT DROP ON *.* TO 'user_name';
GRANT INDEX ON *.* TO 'user_name';
GRANT REFERENCES ON *.* TO 'user_name';
GRANT SELECT ON *.* TO 'user_name';
GRANT CREATE VIEW ON *.* TO 'user_name';
GRANT SHOW VIEW ON *.* TO 'user_name';
GRANT TRIGGER ON *.* TO 'user_name';
GRANT CREATE ROUTINE ON *.* TO 'user_name';
GRANT ALTER ROUTINE ON *.* TO 'user_name';
GRANT EXECUTE ON *.* TO 'user_name';
GRANT SELECT ON mysql.proc TO 'user_name';
GRANT INSERT, UPDATE ON AWS_DB2ZOS_EXT.* TO 'user_name';
GRANT INSERT, UPDATE, DELETE ON AWS_DB2ZOS_EXT_DATA.* TO 'user_name';
GRANT CREATE TEMPORARY TABLES ON AWS_DB2ZOS_EXT_DATA.* TO 'user_name';
```

在前面的示例中，*user\$1name*使用您的用户名替换。然后，*your\$1password*替换为安全密码。

要使用 Amazon RDS for MySQL 作为目标，请将 `log_bin_trust_function_creators` 参数设置为 true，将 `character_set_server` 设置为 `latin1`。要配置这些参数，请创建新的数据库参数组或修改现有数据库参数组。

要使用 Aurora MySQL 作为目标，请将 `log_bin_trust_function_creators` 参数设置为 true，将 `character_set_server` 设置为 `latin1`。此外，还要将 `lower_case_table_names` 参数设置为 True。要配置这些参数，请创建新的数据库参数组或修改现有数据库参数组。

## 将 PostgreSQL 用作目标数据库的权限
<a name="CHAP_Source.DB2zOS.ConfigurePostgreSQL"></a>

要使用 PostgreSQL 作为目标 AWS SCT ，需要权限。`CREATE ON DATABASE`请确保为每个目标 PostgreSQL 数据库授予此权限。

要使用适用于 PostgreSQL 的 Amazon RDS 作为目标 AWS SCT ，需要权限。`rds_superuser`

要使用转换后的公共同义词，请将数据库的默认搜索路径更改为 `"$user", public_synonyms, public`。

您可以使用以下代码示例创建数据库用户并授予权限。

```
CREATE ROLE user_name LOGIN PASSWORD 'your_password';
GRANT CREATE ON DATABASE db_name TO user_name;
GRANT rds_superuser TO user_name;
ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;
```

在前面的示例中，*user\$1name*使用您的用户名替换。然后，*db\$1name*替换为目标数据库的名称。最后，*your\$1password*替换为安全密码。

在 PostgreSQL 中，只有架构所有者或 `superuser` 才能删除架构。即使架构的所有者并不拥有架构的某些对象，该所有者也可以删除该架构及其包含的所有对象。

当你使用不同的用户转换不同的架构并将其应用到目标数据库时，当无法删除架构时，你 AWS SCT 可能会收到一条错误消息。要避免出现此错误消息，请使用 `superuser` 角色。

## Db2 for z/OS 到 PostgreSQL 的转换设置
<a name="CHAP_Source.DB2zOS.PostgreSQLConversionSettings"></a>

**要编辑 Db2 z/OS 到 PostgreSQL 的转换设置，**请选择 “设置”，然后选择 “**转换设置”。**从上面的列表中选择 Db2 for **z/OS，然后选择 Db2（PostgreSQL），或者为 **Ama z/OS ** z** **on Aurora（兼容 z/OS PostgreSQL）选择 Db2（兼容 Post** greSQL）。 AWS SCT 显示所有可用的 IBM Db2 转换为 PostgreSQL 的 z/OS 设置。

中的 Db2 fo z/OS r 到 PostgreSQL 的转换设置包括以下各项 AWS SCT 的选项：
+ 限制转换后的代码中操作项的注释数量。

  对于在**转换后的代码中为所选严重性及更高的措施项添加注释**，请选择措施项的严重性。 AWS SCT 在转换后的代码中为选定严重性及更高的措施项添加注释。

  例如，要最大限度地减少转换后的代码中的注释数量，请选择**仅错误**。要在转换后的代码中包含所有操作项的注释，请选择**所有消息**。
+ 为目标数据库中的约束生成唯一名称。

  在 PostgreSQL 中，您使用的所有约束名称都必须是唯一的。通过在约束名称中添加带有表名的前缀， AWS SCT 可以在转换后的代码中为约束生成唯一的名称。要确保 AWS SCT 为约束生成唯一的名称，请选择**为约束生成唯一名称**。
+ 在转换后的代码中保留 DML 语句中列名、表达式和子句的格式。

  AWS SCT 可以保持 DML 语句中列名、表达式和子句的布局与源代码中的位置和顺序相似。为此，请为**保留 DML 语句中列名、表达式和子句的格式设置**选择**是**。
+ 将表分区排除在转换范围之外。

  AWS SCT 可以在转换过程中跳过源表的所有分区。为此，请选择**将表分区排除在转换范围之外**。
+ 按增长分区的表使用自动分区。

  对于数据迁移， AWS SCT 可以自动对所有大于指定大小的表进行分区。要使用此选项，请选择**强制对较大的表进行分区**，然后输入以千兆字节为单位的表大小。接下来，输入分区的数量。 AWS SCT 启用此选项时，会考虑源数据库的直接访问存储设备 (DASD) 的大小。

  AWS SCT 可以自动确定分区的数量。为此，请选择**按比例增加分区数**，然后输入最大分区数。
+ 以 refcursor 数据类型值数组的形式返回动态结果集。

  AWS SCT 可以将返回动态结果集的源过程转换为将打开的 refcursors 数组作为附加输出参数的过程。为此，请选择**使用引用游标数组返回所有动态结果集**。
+ 指定用于将日期和时间值转换为字符串表示形式的标准。

  AWS SCT 可以使用支持的行业格式之一将日期和时间值转换为字符串表示形式。为此，请选择**使用日期值的字符串表示形式**或**使用时间值的字符串表示形式**。接下来，请选择下列标准之一。
  + 国际标准组织（ISO）标准
  + IBM 欧洲标准（欧洲）
  + IBM 美国标准（美国）
  + 日本工业标准基督教时代（JIS）