

# Amazon S3 から Amazon RDS for Db2 への Db2 データの移行
<a name="db2-migration-load-from-s3"></a>

この移行アプローチでは、まず 1 つのテーブルから Amazon S3 バケットに配置するデータファイルにデータを保存します。次に、[LOAD コマンド](https://www.ibm.com/docs/en/db2/11.5?topic=commands-load)を使用して、そのデータファイルから Amazon RDS for Db2 データベースのテーブルにデータをロードします。Amazon S3 の使用の詳細については、「[Amazon RDS for Db2 DB インスタンスと Amazon S3 の統合](db2-s3-integration.md)」を参照してください。

**Topics**
+ [Amazon S3 にデータを保存する](#db2-migration-load-from-s3-saving-data-file)
+ [RDS for Db2 テーブルへのデータのロード](#db2-migration-load-from-s3-into-db-table)

## Amazon S3 にデータを保存する
<a name="db2-migration-load-from-s3-saving-data-file"></a>

単一のテーブルから Amazon S3 にデータを保存するには、データベースユーティリティを使用して、データベース管理システム (DBMS) から CSV ファイルにデータを抽出します。次に、各ファイルを Amazon S3 にアップロードします。

Amazon S3 にデータファイルを保存するには、次の AWS コンポーネントが必要です。
+ *バックアップファイルを保存する Amazon S3 バケット*: S3 バケットが既にある場合は、そのバケットを使用できます。S3 バケットがない場合は、「*Amazon S3 ユーザーガイド*」の「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。
+ **S3 バケットにアクセスするための IAM ロール: IAM ロールが既にある場合は、そのロールを使用できます。ロールがない場合は、「[ステップ 2: IAM ロールを作成して IAM ポリシーをアタッチする](db2-s3-integration.md#db2-creating-iam-role)」を参照してください。
+ **IAM ロールにアタッチされた信頼関係とアクセス許可を持つ IAM ポリシー: 詳細については、「[ステップ 1: IAM ポリシーを作成する](db2-s3-integration.md#db2-creating-iam-policy)」を参照してください。
+ **RDS for Db2 DB インスタンスに追加された IAM ロール: 詳細については、「[ステップ 3: RDS for Db2 DB インスタンスに IAM ロールを追加する](db2-s3-integration.md#db2-adding-iam-role)」を参照してください。

## RDS for Db2 テーブルへのデータのロード
<a name="db2-migration-load-from-s3-into-db-table"></a>

データファイルを Amazon S3 に保存した後、これらのファイルから RDS for Db2 DB インスタンスの個々のテーブルにデータをロードできます。

**Db2 テーブルデータを RDS for Db2 DB データベーステーブルにロードするには**

1. RDS for Db2 DB インスタンスのマスターユーザー名とマスターパスワードを使用して、`rdsadmin` データベースに接続します。次の例で、{{master\_username}} と {{master\_password}} を自分の情報に置き換えます。

   ```
   db2 connect to rdsadmin user {{master_username}} using {{master_password}}
   ```

1. 保存したファイルが保存されている Amazon S3 バケットを指すストレージアクセスエイリアスをカタログ化します。次のステップで使用するこのエイリアスの名前を書き留めます。同じ Amazon S3 バケットに保存されているデータファイルから複数のテーブルをロードする予定の場合、このステップを 1 回だけ実行する必要があります。

   次の例では、{{jorge\_souza}} という名前のユーザーに {{amzn-s3-demo-bucket}} という名前のバケットへのアクセスを許可する {{my\_s3\_alias}} という名前のエイリアスをカタログ化します。

   ```
   db2 "call rdsadmin.catalog_storage_access(?, '{{my_s3_alias}}', '{{amzn-s3-demo-bucket}}', 'USER', '{{jorge_souza}}')"
   ```

   このストアドプロシージャの詳細については、「[rdsadmin.catalog\_storage\_access](db2-sp-managing-storage-access.md#db2-sp-catalog-storage-access)」を参照してください。

1. Amazon S3 バケットを指すストレージアクセスエイリアスを使用して、`LOAD` コマンドを実行します。
**注記**  
`LOAD` コマンドがエラーを返す場合は、Amazon S3 の VPC ゲートウェイエンドポイントを作成し、セキュリティグループにアウトバウンドルールを追加する必要がある場合があります。詳細については、「[ファイル I/O エラー](db2-troubleshooting.md#db2-file-input-output-error)」を参照してください。

   次の例では、{{my\_s3\_datafile.csv}} という名前のデータファイルから {{my\_db2\_table }}という名前のテーブルにデータをロードします。この例では、データファイルが {{my\_s3\_alias}} という名前のエイリアスが指す Amazon S3 バケットにあることを前提としています。

   ```
   db2 "load from db2remote://{{my_s3_alias}}//{{my_s3_datafile.csv}} of DEL insert into {{my_db2_table}}";
   ```

   次の例では、{{my\_table1\_export.ixf}} という名前のデータファイルから {{my\_db2\_table }}という名前のテーブルに LOB をロードします。この例では、データファイルが {{my\_s3\_alias}} という名前のエイリアスが指す Amazon S3 バケットにあることを前提としています。

   ```
   db2 "call sysproc.admin_cmd('load from "db2remote://{{my_s3_alias}}//{{my_table1_export.ixf}}" of ixf
           lobs from "db2remote://{{my_s3_alias}}//" xml from "db2remote://{{my_s3_alias}}//"
           modified by lobsinfile implicitlyhiddeninclude identityoverride generatedoverride periodoverride transactionidoverride
           messages on server
           replace into "{{my_schema}}"."{{my_db2_table}}"
                                  nonrecoverable
           indexing mode incremental allow no access')"
   ```

   RDS for Db2 DB インスタンスのテーブルにロードする Amazon S3 バケット内のデータファイルごとに、このステップを繰り返します。

   `LOAD` コマンドの詳細については、「[LOAD コマンド](https://www.ibm.com/docs/en/db2/11.5?topic=commands-load)」を参照してください。