AWS DMS タスクを使用してどのようなオブジェクトを移行できますか?
すべてのデータベーススキーマオブジェクトを移行していない 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 スクリプトを生成します。
- SQL Server Management Studio (SSMS) を使用してソースデータベースにログインします。
- スクリプトを生成するデータベースを右クリックし、[Tasks] (タスク) を選択してから、[Generate Scripts] (スクリプトを生成) を選択します。
- [Select specific database objects] (特定のデータベースオブジェクトを選択) で、使用するテーブル、ビュー、および他のオブジェクトを選択してから、[Next] (次へ) を選択します。
- [Advanced] (詳細設定) ボタンを選択してから、スクリプトを作成するデータのタイプを選択します。
- セカンダリインデックスの SQL を取得する場合は、[Script indexes] (スクリプトインデックス) を [true] に設定します。スクリプトインデックスは、デフォルトで [false] に設定されています。
- スクリプトの保存方法を選択します。例えば、ディスク上に SQL ファイルを作成したり、SQL を新しいクエリウィンドウにコピーしたり、スクリプトをクリップボードにコピーしたりします。
- [Next] (次へ) を選択します。
- [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 インスタンスにコピーします。
データベーススキーマを変換するには、次のステップに従います。
詳細については、「Converting database schemas using AWS SCT」(AWS SCT を使用したデータベーススキーマの変換) を参照してください。
関連情報
High-level view of AWS DMS (AWS DMS の概要ビュー)
関連するコンテンツ
- 質問済み 1年前lg...
- 質問済み 5ヶ月前lg...
- AWS公式更新しました 1年前
- AWS公式更新しました 2年前
- AWS公式更新しました 1年前
- AWS公式更新しました 10ヶ月前