AWS Database Migration Service (AWS DMS) を使用する場合、移行のどの段階でセカンダリオブジェクトをターゲットデータベースに追加できますか? また、ターゲットデータベースにセカンダリオブジェクトを作成するための、タスク設定についても教えてください。
簡単な説明
AWS DMS は、TargetTablePrepMode オプションを使用して、ターゲットデータベースにテーブルを作成します。AWS DMS がターゲットテーブルを作成する際は、データをターゲットに効果的に移行するために必要なオブジェクトのみが移行されます。例えば、AWS DMS はテーブル、プライマリキーを作成し、さらに一意のインデックスを作成することもあります。一方で、セカンダリインデックス、非プライマリキーの制約、データのデフォルト、またユーザーアカウントなどは作成されません。詳細については、「外部キーとセカンダリインデックスが見つからない」を参照してください。
移行前に、ターゲットに対し手動でテーブルを作成する場合は、セカンダリインデックスなどのセカンダリオブジェクトを、移行を開始する前に削除しておくのがベストプラクティスです。
注: これは、変更データキャプチャ (CDC) のみのタスクには適用されません。
したがって、正常に移行を終了しタスクのパフォーマンスを向上させるためには、セカンダリオブジェクトを作成するタイミングを把握しておくことが重要です。このタイミングは、タスクが使用している移行方法によって異なります。
- 全ロードのみ (既存データの移行)
- 全ロードと CDC (既存のデータを移行し進行中の変更をレプリケート)
- CDC (データ変更のみをレプリケート)
解決方法
全ロードのみ
全ロードのみのタスクでは、移行の開始前に、プライマリキーとすべてのセカンダリオブジェクトを削除することが、ベストプラクティスです。全ロードが完了するまで、これらのオブジェクトは作成しないでください。全ロード中、ターゲットデータベースにセカンダリオブジェクトがある場合には、追加的なメンテナンスが発生することがあります。
ターゲットに外部キーがある場合、このタスクが失敗する可能性があります。これは、テーブルマッピングで特定の順序を手動により指定しない限り、タスクは、任意の順序でテーブルのグループをロードするためです。
同様に、トリガーがターゲットデータベースに存在する場合、そのトリガーの挿入、更新、または削除において、エラーが発生する可能性があります。例えば、以前にロードされたテーブルにある挿入トリガーによって起動される行挿入が、行の重複を引き起こすことがあります。他のタイプのトリガーも、追加の処理を引き起こすため、パフォーマンスに影響を与えます。
全ロードと CDC
全ロードと CDC のタスクでは、移行の開始前に、すべてのセカンダリオブジェクトを削除することがベストプラクティスです。ただし、移行のさまざまな段階で、ターゲットデータベースに、各セカンダリオブジェクトを適用する必要があります。
以下に、全ロードと CDC のタスクによる移行の各段階と、特定のセカンダリオブジェクトを適用すべき段階を示します。
- 既存データの全ロード – タスクが全体ロードを完了した後、キャッシュにキャプチャされた変更を適用する前に、セカンダリインデックスを追加します。
- キャッシュされた変更の適用 – タスクにより、キャッシュされた変更の適用が行われた後に、外部キー (参照整合性の制約) を追加します。
- 進行中のレプリケーション – 移行が完了し、アプリケーションがカットオーバーされる前にトリガーを作成します。
全ロードの進行中、ロード中のテーブルに加えた変更はキャッシュされます。キャッシュされたこれらの変更は、テーブルの全ロードが完了した時点で適用されます。全ロードが完了し、キャッシュされた変更の適用が行われたターゲットテーブルでは、トランザクションのための整合性が保たれています。その後、AWS DMS は進行中のレプリケーションフェーズを開始します。この詳細については、「High-level view of AWS DMS」(AWS DMS の概要) を参照してください。
移行中にタスクを停止するには、次のタスク設定を使用します。
- キャッシュされた変更を適用する前にタスクを停止するには、 StopTaskCachedChangesNotApplied を使用します。
- キャッシュされた変更の適用後にタスクを停止するには、StopTaskCachedChangesApplied を使用します。
注: AWS コマンドラインインターフェイス (AWS CLI) を使用することで、StopTaskCachedChangesNotApplied と StopTaskCachedChangesApplied の両方をオンにできます。AWS CLI コマンドの実行時にエラーが発生した場合は、使用している AWS CLI を最新バージョンにする必要があります。
CDC のみのタスク
CDC のみのタスクでは、移行前のターゲットデータベースに、セカンダリインデックスと外部キーを作成することができます。この場合、移行が完了し、アプリケーションがカットオーバーされる前に、ターゲットにおいてトリガーを作成します。
関連情報
Creating a task (タスクの作成)
Full-load task settings (全ロードタスクの設定)