

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

# 使用 連線至適用於 z/OS 資料庫的 IBM DB2 AWS Schema Conversion Tool
<a name="CHAP_Source.DB2zOS"></a>

您可以使用 AWS SCT 將 z/OS 的結構描述、程式碼物件和應用程式程式碼從 IBM Db2 轉換為下列目標。
+ Amazon RDS for MySQL
+ Amazon Aurora MySQL-Compatible Edition
+ Amazon RDS for PostgreSQL
+ Amazon Aurora PostgreSQL-Compatible Edition

## z/OS 的 Db2 做為來源資料庫的先決條件
<a name="CHAP_Source.DB2zOS.Prerequisites"></a>

IBM Db2 for z/OS 版本 12 函數層級 100 資料庫版本不支援 IBM Db2 for z/OS 版本 12 的大多數新功能。此資料庫版本支援回復至 Db2 第 11 版，以及與 Db2 第 11 版共用資料。為了避免轉換 Db2 第 11 版的不支援功能，我們建議您將 IBM Db2 用於 z/OS 資料庫函數層級 500 或更高版本作為來源 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` 或更新版本。

## z/OS 作為來源資料庫的 Db2 權限
<a name="CHAP_Source.DB2zOS.Permissions"></a>

連線至 z/OS 資料庫和讀取系統目錄和資料表的 Db2 所需的權限如下：
+ 在 SYSIBM.LOCATIONS 上選取
+ 在 SYSIBM.SYSCHECKS 上選取
+ 在 SYSIBM.SYSCOLUMNS 上選取
+ 在 SYSIBM.SYSDATABASE 上選取
+ 在 SYSIBM.SYSDATATYPES 上選取
+ 在 SYSIBM.SYSDUMMY1 上選取
+ 在 SYSIBM.SYSFOREIGNKEYS 上選取
+ 在 SYSIBM.SYSINDEXES 上選取
+ 在 SYSIBM.SYSKEYCOLUSE 上選取
+ SELECT ON SYSIBM.SYSKEYS
+ 在 SYSIBM.SYSKEYTARGETS 上選取
+ 在 SYSIBM.SYSJAROBJECTS 上選取
+ 在 SYSIBM.SYSPACKAGE 上選取
+ SELECT ON SYSIBM.SYSPARMS
+ SELECT ON SYSIBM.SYSRELS
+ 在 SYSIBM.SYSROUTINES 上選取
+ 在 SYSIBM.SYSSEQUENCES 上選取
+ 在 SYSIBM.SYSSEQUENCESDEP 上選取
+ 在 SYSIBM.SYSSYNONYMS 上選取
+ 在 SYSIBM.SYSTABCONST 上選取
+ 在 SYSIBM.SYSTABLES 上選取
+ 在 SYSIBM.SYSTABLESPACE 上選取
+ 在 SYSIBM.SYSTRIGGERS 上選取
+ 在 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。

**連線至 z/OS 來源資料庫的 IBM Db2**

1. 在 中 AWS Schema Conversion Tool，選擇**新增來源**。

1. 針對 **z/OS 選擇 Db2**，然後選擇**下一步**。

   新增**來源**對話方塊隨即出現。

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)。
   + 若要手動輸入 z/OS 來源資料庫連線資訊的 IBM Db2，請使用下列指示：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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
+ 參考開啟 \$1.\$1
+ SELECT ON \$1.\$1
+ 在 \$1.\$1 上建立檢視
+ SHOW VIEW ON \$1.\$1
+ 觸發開啟 \$1.\$1
+ CREATE ROUTINE ON \$1.\$1
+ ALTER ROUTINE ON \$1.\$1
+ EXECUTE ON \$1.\$1
+ SELECT ON mysql.proc
+ INSERT，更新 AWS\$1DB2ZOS\$1EXT.\$1
+ 在 AWS\$1DB2ZOS\$1EXT\$1DATA 上插入、更新、刪除。\$1
+ 在 AWS\$1DB2ZOS\$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 資料庫授予此權限。

若要使用 Amazon RDS for PostgreSQL 做為目標， 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` 角色。

## z/OS 到 PostgreSQL 轉換設定的 Db2
<a name="CHAP_Source.DB2zOS.PostgreSQLConversionSettings"></a>

若要編輯 z/OS 的 Db2 至 PostgreSQL 轉換設定，請選擇**設定**，然後選擇**轉換設定**。從上方清單中選擇 **z/OS 的 Db2**，然後選擇 **z/OS 的 Db2 – PostgreSQL** 或 **z/OS 的 Db2 – Amazon Aurora (PostgreSQL 相容）**。 AWS SCT 會顯示 z/OS 至 PostgreSQL 轉換的 IBM Db2 所有可用設定。

中的 z/OS 到 PostgreSQL 轉換設定的 Db2 AWS SCT 包含下列項目的選項：
+ 限制轉換程式碼中具有動作項目的註解數量。

  針對**所選嚴重性及更高之動作項目在轉換後的程式碼中新增註解**，請選擇動作項目的嚴重性。 會在轉換後的程式碼中 AWS SCT 新增所選嚴重性及更高之動作項目的註解。

  例如，若要將已轉換程式碼中的註解數量降到最低，請選擇**僅限錯誤**。若要在已轉換的程式碼中包含所有動作項目的註解，請選擇**所有訊息**。
+ 為目標資料庫中的限制產生唯一名稱。

  在 PostgreSQL 中，您使用的所有限制條件名稱必須是唯一的。 AWS SCT 可以在轉換後的程式碼中為限制條件產生唯一名稱，方法是將具有資料表名稱的字首新增至您的限制條件名稱。若要確保 為您的限制 AWS SCT 產生唯一名稱，請選取**為限制產生唯一名稱**。
+ 在轉換後的程式碼中保留 DML 陳述式中資料欄名稱、表達式和子句的格式。

  AWS SCT 可以將 DML 陳述式中資料欄名稱、表達式和子句的配置保留在與原始程式碼類似的位置和順序。若要這樣做，請選取**是**，以**保留 DML 陳述式中資料欄名稱、表達式和子句的格式**。
+ 從轉換範圍中排除資料表分割區。

  AWS SCT 可以在轉換期間略過來源資料表的所有分割區。若要這麼做，請選取**從轉換範圍排除資料表分割區**。
+ 針對依成長分割的資料表使用自動分割。

  對於資料遷移， AWS SCT 可以自動分割大於指定大小的所有資料表。若要使用此選項，請選取**強制執行大於 資料表的分割區**，然後輸入以 GB 為單位的資料表大小。接著，輸入 partitions 的數量。當您開啟此選項時， AWS SCT 請考慮來源資料庫的直接存取儲存裝置 (DASD) 大小。

  AWS SCT 可以自動判斷分割區的數量。若要這樣做，請選取**按比例增加分割區數量**，然後輸入分割區數量上限。
+ 將動態結果集傳回為 refcursor 資料類型值的陣列。

  AWS SCT 可以將傳回動態結果集的來源程序轉換為具有一系列開放反射器作為額外輸出參數的程序。若要這樣做，請選取**使用反射器陣列來傳回所有動態結果集**。
+ 指定用於將日期和時間值轉換為字串表示法的標準。

  AWS SCT 可以使用其中一個支援的產業格式，將日期和時間值轉換為字串表示法。若要這樣做，請選取**使用日期值的字串表示**法或**使用時間值的字串表示**法。接著，選擇下列其中一個標準。
  + 國際標準組織 (ISO)
  + IBM 歐洲標準 （歐元）
  + IBM USA Standard （美國）
  + 日本工業標準基督教時代 (JIS)