

# 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\$1username* と *master\$1password* を自分の情報に置き換えます。

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

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

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

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

   このストアドプロシージャの詳細については、「[rdsadmin.catalog\$1storage\$1access](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\$1s3\$1datafile.csv* という名前のデータファイルから *my\$1db2\$1table *という名前のテーブルにデータをロードします。この例では、データファイルが *my\$1s3\$1alias* という名前のエイリアスが指す Amazon S3 バケットにあることを前提としています。

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

   次の例では、*my\$1table1\$1export.ixf* という名前のデータファイルから *my\$1db2\$1table *という名前のテーブルに LOB をロードします。この例では、データファイルが *my\$1s3\$1alias* という名前のエイリアスが指す 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)」を参照してください。