

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# を使用した IBM DB2 for Linux、UNIX、および Windows データベースへの ConnConnecting AWS Schema Conversion Tool
<a name="CHAP_Source.DB2LUW"></a>

 AWS SCT を使用して、IBM Db2 for Linux、Unix、Windows (Db2 LUW) のスキーマ、SQL 言語のコードオブジェクト、アプリケーションコードを次のターゲットに変換できます。
+ Amazon RDS for MySQL
+ Amazon Aurora MySQL 互換エディション
+ Amazon RDS for PostgreSQL
+ Amazon Aurora PostgreSQL 互換エディション
+ Amazon RDS for MariaDB

AWS SCT は、ソースとして Db2 LUW バージョン 9.1、9.5、9.7、10.1、10.5、11.1、および 11.5 をサポートします。

## ソースとしての Db2 LUW の権限
<a name="CHAP_Source.DB2LUW.Permissions"></a>

Db2 LUW データベースに接続して利用可能な特権を確認し、ソースのスキーマメタデータを読み取るために必要な特権を以下に示します。
+ 接続を確立するために必要な特権:
  + CONNECT ON DATABASE
+ SQL ステートメントを実行するために必要な特権:
  + EXECUTE ON PACKAGE NULLID.SYSSH200
+ インスタンスレベルの情報を取得するために必要な特権:
  + EXECUTE ON FUNCTION SYSPROC.ENV\$1GET\$1INST\$1INFO
  + SELECT ON SYSIBMADM.ENV\$1INST\$1INFO
  + SELECT ON SYSIBMADM.ENV\$1SYS\$1INFO
+ ロール、グループ、および機関を通じて付与された特権を確認するために必要な特権:
  + EXECUTE ON FUNCTION SYSPROC.AUTH\$1LIST\$1AUTHORITIES\$1FOR\$1AUTHID
  + EXECUTE ON FUNCTION SYSPROC.AUTH\$1LIST\$1GROUPS\$1FOR\$1AUTHID
  + EXECUTE ON FUNCTION SYSPROC.AUTH\$1LIST\$1ROLES\$1FOR\$1AUTHID
  + SELECT ON SYSIBMADM.PRIVILEGES
+ システムカタログとテーブルで必要な特権:
  + SELECT ON SYSCAT.ATTRIBUTES
  + SELECT ON SYSCAT.CHECKS
  + SELECT ON SYSCAT.COLIDENTATTRIBUTES
  + SELECT ON SYSCAT.COLUMNS
  + SELECT ON SYSCAT.DATAPARTITIONEXPRESSION
  + SELECT ON SYSCAT.DATAPARTITIONS
  + SELECT ON SYSCAT.DATATYPEDEP
  + SELECT ON SYSCAT.DATATYPES
  + SELECT ON SYSCAT.HIERARCHIES
  + SELECT ON SYSCAT.INDEXCOLUSE
  + SELECT ON SYSCAT.INDEXES
  + SELECT ON SYSCAT.INDEXPARTITIONS
  + SELECT ON SYSCAT.KEYCOLUSE
  + SELECT ON SYSCAT.MODULEOBJECTS
  + SELECT ON SYSCAT.MODULES
  + SELECT ON SYSCAT.NICKNAMES
  + SELECT ON SYSCAT.PERIODS
  + SELECT ON SYSCAT.REFERENCES
  + SELECT ON SYSCAT.ROUTINEPARMS
  + SELECT ON SYSCAT.ROUTINES
  + SELECT ON SYSCAT.ROWFIELDS
  + SELECT ON SYSCAT.SCHEMATA
  + SELECT ON SYSCAT.SEQUENCES
  + SELECT ON SYSCAT.TABCONST
  + SELECT ON SYSCAT.TABLES
  + SELECT ON SYSCAT.TRIGGERS
  + SELECT ON SYSCAT.VARIABLEDEP
  + SELECT ON SYSCAT.VARIABLES
  + SELECT ON SYSCAT.VIEWS
  + SELECT ON SYSIBM.SYSDUMMY1
+  SQL ステートメントを実行するには、データベースで有効になっているワークロードの少なくとも 1 つを使用する特権がユーザーアカウントに必要です。いずれのワークロードもユーザーに割り当てられていない場合は、デフォルトのユーザーワークロードがユーザーに対してアクセス可能であることを確認します。
  + ワークロードでの使用 (システム/デフォルト/ユーザーワークロード)

クエリを実行するには、ページサイズが 8K、16K、および 32K であるシステム一時テーブルスペースを作成する必要があります (存在しない場合)。一時テーブルスペースを作成するには、以下のスクリプトを実行します。

```
CREATE BUFFERPOOL BP8K
  IMMEDIATE
  ALL DBPARTITIONNUMS
  SIZE AUTOMATIC
  NUMBLOCKPAGES 0
  PAGESIZE 8K;
  
CREATE SYSTEM TEMPORARY TABLESPACE TS_SYS_TEMP_8K 
  PAGESIZE 8192 
  BUFFERPOOL BP8K;
  
CREATE BUFFERPOOL BP16K
  IMMEDIATE
  ALL DBPARTITIONNUMS
  SIZE AUTOMATIC
  NUMBLOCKPAGES 0
  PAGESIZE 16K;
  
CREATE SYSTEM TEMPORARY TABLESPACE TS_SYS_TEMP_BP16K 
  PAGESIZE 16384 
  BUFFERPOOL BP16K;  
  
CREATE BUFFERPOOL BP32K
  IMMEDIATE
  ALL DBPARTITIONNUMS
  SIZE AUTOMATIC
  NUMBLOCKPAGES 0
  PAGESIZE 32K;
  
CREATE SYSTEM TEMPORARY TABLESPACE TS_SYS_TEMP_BP32K 
  PAGESIZE 32768 
  BUFFERPOOL BP32K;
```

## ソースとしての Db2 LUW への接続
<a name="CHAP_Source.DB2LUW.Connecting"></a>

以下の手順を使用して、Db2 LUW ソースデータベースを AWS Schema Conversion Toolに接続します。

**Db2 LUW ソースデータベースに接続するには**

1. で AWS Schema Conversion Tool、**ソースの追加** を選択します。

1. [**Db2 LUW**]、[**次へ**] の順に選択します。

   [**Add source**] (ソースの追加) ダイアログボックスが表示されます。

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 LUW ソースデータベース接続情報を手動で入力するには、以下の手順に従ってください。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/SchemaConversionTool/latest/userguide/CHAP_Source.DB2LUW.html)

1. **接続のテスト**を選択して、 がソースデータベースに接続 AWS SCT できることを確認します。

1. [**Connect**] (接続) を選択して、ソースデータベースに接続します。

# IBM DB2 for Linux、UNIX、および Windows から Amazon Relational Database Service for PostgreSQL または Amazon Aurora PostgreSQL 互換エディションへの移行
<a name="CHAP_Source.DB2LUW.ToPostgreSQL"></a>

IBM Db2 LUW を PostgreSQL に移行すると、 は Db2 LUW で使用されるさまざまなトリガーステートメントを変換 AWS SCT できます。例えば、次のようなトリガーステートメントです。
+ **トリガーイベント** - INSERT、DELETE、および UPDATE トリガーイベントは、イベントがサブジェクトテーブルまたはサブジェクトビューに適用されるたびに、トリガーされたアクションの実行を指定します。INSERT、DELETE、UPDATE イベントの任意の組み合わせを指定できますが、各イベントは 1 回のみ指定できます。 は単一および複数のトリガーイベント AWS SCT をサポートします。イベントについては、PostgreSQL が実質的に同じ機能を備えています。
+ **イベント OF COLUMN** - ベーステーブルからの列名を指定できます。このトリガーは、列名リストで列の更新が識別された場合にのみアクティブ化されます。PostgreSQL にも同じ機能があります。
+ **ステートメントトリガー** – トリガーされるアクションがステートメント全体で 1 回のみ適用されるように指定します。このタイプのトリガー単位を、BEFORE トリガーまたは INSTEAD OF トリガーに指定することはできません。指定した場合、対象の行がなくても、UPDATE または DELETE トリガーがアクティブ化されます。PostgreSQL にもこの機能があり、ステートメントトリガーのトリガー宣言は PostgreSQL と Db2 LUW で同じです。
+ **Referencing 句** - 移行テーブルの移行変数とテーブル名の相関を指定します。相関名は、SQL オペレーションがトリガーされることで影響を受ける一連の行のうちの特定の行を識別します。テーブル名は、営業を受ける一連の行全体を識別します。SQL オペレーションのトリガーにより影響を受ける各行は、列を特定の相関名で分類することで、トリガーされたアクションで利用できます。PostgreSQL ではこの機能はサポートされていません。NEW または OLD 相関名のみが使用されます。
+ **INSTEAD OF トリガー** – AWS SCT は、これらをサポートしています。

## Db2 LUW パーティションテーブルから PostgreSQL バージョン 10 パーティションテーブルへの変換
<a name="CHAP_Source.DB2LUW.ToPostgreSQL.PartitionedTables"></a>

AWS SCT は、Db2 LUW テーブルを PostgreSQL 10 のパーティションテーブルに変換できます。Db2 LUW パーティションテーブルを PostgreSQL に変換する場合はいくつかの制限があります。
+ Db2 LUW では null 値が許容される列をもつパーティションテーブルを作成したり、パーティションに null 値を保存するように指定できます。しかし、PostgreSQL は RANGE パーティションの NULL 値をサポートしていません。
+ Db2 LUW は INCLUSIVE または EXCLUSIVE 句を使用して範囲境界値を設定できます。PostgreSQL は開始境界で INCLUSIVE のみ、終了境界で EXCLUSIVE のみをサポートします。変換されたパーティション名の形式は <original\$1table\$1name>\$1<original\$1partition\$1name> です。
+ Db2 LUW のパーティションテーブルでプライマリキーや固有キーを作成できます。PostgreSQL では、プライマリキーや固有キーをパーティションごとに直接作成する必要があります。プライマリキーや固有キーの制約を親テーブルから削除する必要があります。変換されたキー名の形式は <original\$1key\$1name>\$1<original\$1partition \$1name> です。
+ Db2 LUW ではパーティションテーブルから、またはテーブルに、外部キー制約を作成できます。しかし、PostgreSQL はパーティションテーブルで外部キーの参照をサポートしていません。また、PostgreSQL はパーティションテーブルから別のテーブルへの外部キーの参照をサポートしていません。
+ Db2 LUW ではパーティションテーブルにインデックスを作成できます。しかし PostgreSQL では、インデックスをパーティションごとに直接作成する必要があります。親テーブルからインデックスを削除する必要があります。変換されたインデックス名の形式は <original\$1index\$1name>\$1<original\$1partition\$1name> です。
+ 行トリガーはパーティションテーブルではなく、個別のパーティションで定義する必要があります。親テーブルからトリガーを削除する必要があります。変換されたトリガー名の形式は <original\$1trigger\$1name>\$1<original\$1partition\$1name> です。

## PostgreSQL をターゲットとする場合の権限
<a name="CHAP_Source.DB2LUW.ToPostgreSQL.ConfigureTarget"></a>

PostgreSQL をターゲットとして使用するには、 `CREATE ON DATABASE` 権限 AWS SCT が必要です。ターゲット PostgreSQL データベースごとにこの権限を必ず付与してください。

変換されたパブリックシノニムを使用するには、データベースのデフォルト検索パスを `"$user", public_synonyms, public` に変更します。

次のコード例を使用してデータベースユーザーを作成し、権限を付与できます。

```
CREATE ROLE user_name LOGIN PASSWORD 'your_password';
GRANT CREATE ON DATABASE db_name 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` ロールを使用してください。

# IBM DB2 for Linux、UNIX、および Windows から Amazon RDS for MySQL または Amazon Aurora MySQL への移行
<a name="CHAP_Source.DB2LUW.ToMySQL"></a>

IBM Db2 LUW データベースを RDS for MySQL または Amazon Aurora MySQL に変換するときは、次の点に注意してください。

## MySQL をターゲットとする場合の権限
<a name="CHAP_Source.DB2LUW.ToMySQL.ConfigureTarget"></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
+ INSERT, UPDATE ON AWS\$1DB2\$1EXT.\$1
+ INSERT, UPDATE, DELETE ON AWS\$1DB2\$1EXT\$1DATA.\$1
+ CREATE TEMPORARY TABLES ON AWS\$1DB2\$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_DB2_EXT.* TO 'user_name';
GRANT INSERT, UPDATE, DELETE ON AWS_DB2_EXT_DATA.* TO 'user_name';
GRANT CREATE TEMPORARY TABLES ON AWS_DB2_EXT_DATA.* TO 'user_name';
```

前述の例では、[*user\$1name*] をお客様の設定のユーザー名に置き換えます。次に、*your\$1password* を安全なパスワードに置き換えます。

Amazon RDS for MySQL または Aurora MySQL をターゲットとして使用するには、`lower_case_table_names` パラメータを `1` に設定します。この値は、MySQL サーバーがテーブル、インデックス、トリガー、データベースなどのオブジェクト名の識別子を、大文字と小文字を区別せずに処理することを意味します。ターゲットインスタンスでバイナリログを有効にしている場合は、`log_bin_trust_function_creators` パラメータを `1` と設定します。この場合、ストアド関数を作成するのに、`DETERMINISTIC` 特性、`READS SQL DATA` 特性、`NO SQL` 特性を使用する必要はありません。これらのパラメータを設定するには、新しい DB パラメータグループを作成するか、既存の DB パラメータグループを変更します。