AWS DMS タスクを使用してどのようなオブジェクトを移行できますか?

最終更新日: 2022 年 7 月 25 日

すべてのデータベーススキーマオブジェクトを移行していない AWS Database Migration Service (AWS DMS) タスクがあります。AWS DMS タスクはどのオブジェクトを移行しますか? また、残りのオブジェクトを移行するにはどうすればよいですか?

簡単な説明

AWS DMS タスクがオブジェクトを移行していない場合、AWS DMS タスクがこのタイプのオブジェクトを移行しないことが原因である可能性があります。AWS DMS は、テーブルやプライマリキーなどの多数のオブジェクトを作成しますが、ソースからのデータの移行に必要のないオブジェクトは作成しません。AWS DMS が作成しないオブジェクトの例には、セカンダリインデックス、データのデフォルト、非プライマリキーの制約などが含まれます。

AWS DMS が作成するオブジェクトの詳細については、「Troubleshooting migration tasks in AWS Database Migration Service」(AWS Database Migration Service での移行タスクのトラブルシューティング) を参照してください。

AWS DMS によって移行されない残りのオブジェクトを移行するには、次のいずれかの方法を使用します。

  • 同種移行 (同じエンジンタイプの 2 つのデータベース間) では、エンジンのネイティブツールを使用してスキーマを移行し、データなしでスキーマ自体をエクスポートおよびインポートします。
  • 異種移行 (異なるエンジンタイプを使用する 2 つのデータベース間) では、AWS Schema Conversion Tool (AWS SCT) を使用して完全なターゲットスキーマを生成します。

解決方法

オブジェクトが AWS DMS タスクによって移行されているかどうかを確認する

まず、次のガイドラインを参照して、オブジェクトが AWS DMS タスクによって移行されるかどうかを確認します。

  • AWS DMS タスクは、プライマリキーの制約およびインデックスとともに、ターゲット上にテーブルを作成します。
  • プライマリキーが存在しない場合、タスクは一意キーを作成します (ソーステーブルに存在する場合)。
  • ソーステーブルに NOT NULL 制約が存在する場合、AWS DMS タスクはターゲットに NOT NULL 制約を作成します。これには、ラージオブジェクト (LOB) 列は含まれません。AWS DMS がターゲットテーブルを作成する場合、LOB 列はデフォルトで Null 許容に設定されます。詳細については、「ラージバイナリオブジェクト (LOB) の移行」を参照してください。
  • ソーステーブルに自動インクリメント列がある場合、自動インクリメントプロパティは移行されません。
  • 外部キー制約、チェック、データのデフォルト、コメントなど、他のテーブル固有のプロパティは、AWS DMS タスクによってレプリケートされません。
  • セカンダリインデックス、ビュー、プロシージャ、関数、パッケージ、トリガーなどのデータベースオブジェクトは、AWS DMS タスクによって移行されません。これらのオブジェクトは個別に移行します。

エンジンのネイティブツールを使用してオブジェクトを移行する (同種移行)

同種データベース移行では、ネイティブツールを使用して、データなしでスキーマのメタデータをエクスポートします。このメタデータのみのダンプは、ターゲットデータベースにインポートされ、データなしでデータベースオブジェクトが作成されます。その後、TargetTablePrepMode タスク設定を TRUNCATE_BEFORE_LOAD に設定して AWS DMS タスクを実行します。これは、タスクがターゲット上のテーブルをドロップして再作成しないことを意味します。

Oracle

Oracle データベースを使用してオブジェクトを移行するには、エクスポートデータポンプユーティリティ (expdp) を使用してメタデータのみのダンプを取得します。CONTENT=METADATA_ONLY パラメータを使用すると、データポンプユーティリティはデータベースオブジェクト定義のみをアンロードします。このユーティリティは、テーブルの行データをアンロードしません。

1.    メタデータのみのダンプを取得するには、スキーマをエクスポートするパラメータファイルを作成します。

$> cat export_sample_user.par 
userid=DMS_USER/password@SOURCE_DB
directory=DATA_PUMP_DIR
logfile=export_dms_sample_user_metadata.log
dumpfile=export_dms_sample_user_metadata_%U.dmp
schemas=DMS_SAMPLE
CONTENT=METADATA_ONLY

2    expdp ユーティリティを使用してエクスポートを実行します。

expdp parfile=export_sample_user.par

3.    ダンプファイルがソースデータベースの DATA_PUMP_DIR に作成されたら、ターゲット Oracle データベースの DATA_PUMP_DIR にそれらのファイルをコピーします。ターゲット Oracle データベースにオブジェクトを作成するには、インポートデータポンプユーティリティ (impdp) を実行してメタデータをインポートします。

impdp admin@TARGET_DB directory=DATA_PUMP_DIR logfile=import.log dumpfile=export_dms_sample_user_metadata_%U.dmp

SQL Server

SQL Server を使用してオブジェクトを移行するには、データベーススキーマの SQL スクリプトを生成します。

  1. SQL Server Management Studio (SSMS) を使用してソースデータベースにログインします。
  2. スクリプトを生成するデータベースを右クリックし、[Tasks] (タスク) を選択してから、[Generate Scripts] (スクリプトを生成) を選択します。
  3. [Select specific database objects] (特定のデータベースオブジェクトを選択) で、使用するテーブル、ビュー、および他のオブジェクトを選択してから、[Next] (次へ) を選択します。
  4. [Advanced] (詳細設定) ボタンを選択してから、スクリプトを作成するデータのタイプを選択します。
  5. セカンダリインデックスの SQL を取得する場合は、[Script indexes] (スクリプトインデックス) を [true] に設定します。スクリプトインデックスは、デフォルトで [false] に設定されています。
  6. スクリプトの保存方法を選択します。例えば、ディスク上に SQL ファイルを作成したり、SQL を新しいクエリウィンドウにコピーしたり、スクリプトをクリップボードにコピーしたりします。
  7. [Next] (次へ) を選択します。
  8. [Next] (次へ) を再度選択してから、[Finish] (完了) を選択します。

ターゲットデータベースにオブジェクトを作成するには、これらのステップを完了した後に生成される SQL スクリプトを実行します。

MySQL

MySQL でオブジェクトを移行するには、mysqldump ユーティリティを使用して、スキーマメタデータのみを含むダンプファイルを生成します。--no-data オプションは mysqldump にテーブルデータをダンプしないように指示するため、ダンプファイルの結果にはテーブルを作成するステートメントのみが含まれます。定義のみのダンプの場合は、--routines および --events オプションを追加して、ストアドルーチンとイベント定義も含めます。

例:

mysqldump --no-data --routines --events -h SOURCE_DB_SERVER_NAME -u DMS_USER -p SOURCE_DB > path_to_dump_file.sql

ターゲットデータベースにオブジェクトを作成するには、前のコマンドを実行した後に生成される SQL スクリプトを実行します。

PostgreSQL

PostgreSQL データベースを使用してオブジェクトを移行するには、pg_dump ユーティリティを使用して、スキーマメタデータのみを含むダンプファイルを生成します。-s または --schema-only オプションは、データではなくオブジェクト定義 (スキーマ) をダンプします。

例:

pg_dump --host SOURCE_DB_SERVER_NAME --port 5432 --username DMS_USER --schema-only --verbose SOURCE_DB > path_to_dump_file.sql

ターゲットデータベースにオブジェクトを作成するには、前のコマンドを実行した後に生成される SQL スクリプトを実行します。

AWS Schema Conversion Tool (AWS SCT) を使用してオブジェクトを移行する

AWS SCT を使用して、既存のデータベーススキーマを変換し、あるデータベースエンジンから別のデータベースエンジンに移行します。または、AWS SCT を使用して、既存のオンプレミスのデータベーススキーマを、同じエンジンを実行している Amazon Relational Database Service (Amazon RDS) DB インスタンスにコピーします。

データベーススキーマを変換するには、次のステップに従います。

  1. AWS SCT で移行ルールを作成します
  2. AWS SCT を使用してスキーマを変換します
  3. 変換したスキーマを AWS SCT に保存して適用します

詳細については、「Converting database schemas using AWS SCT」(AWS SCT を使用したデータベーススキーマの変換) を参照してください。


High-level view of AWS DMS (AWS DMS の概要ビュー)

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?