スキップしてコンテンツを表示

Amazon S3 バケットを AWS DMS 移行のターゲットとして使用する場合、一貫性のないデータを解決する方法を教えてください。

所要時間2分
0

AWS Database Migration Service (AWS DMS) 移行のターゲットとして Amazon Simple Storage Service (Amazon S3) を使用する際に、一貫性のないデータを解決したいです。

簡単な説明

ソースデータベースから S3 バケットにデータを移行すると、スキーマが変更された後に、データが失われたり、データが重複したり、列が失われたりすることがあります。これは、Amazon S3 がプライマリキー、更新、参照整合性をサポートしていないために発生します。

一貫性のないデータを解決するには、問題に応じた解決策を実施してください。

解決策

S3 ターゲット内でデータが見つからない、または削除されている

TRUNCATE TABLE または DROP TABLE オペレーションがソースデータベースで実行された場合、AWS DMS はそのオペレーションを Amazon S3 にレプリケートします。このレプリケーションにより、データが失われる可能性があります。

TRUNCATE または DROP TABLE オペレーションによるデータの欠落や削除を防ぐには、データ定義言語 (DDL) の処理設定を確認して調整してください。次の手順を実行します。

  1. AWS DMS コンソールを開きます。

  2. ナビゲーションペインの [移行または複製] で [タスク] をクリックします。

  3. 該当するタスクを選択します。

  4. タスクステータスが [停止] になっていることを確認します。

  5. [変更] をクリックします。

  6. [タスク設定] をクリックします。

  7. [JSON エディタ] をクリックします。

  8. ChangeProcessingDdlHandlingPolicy パラメータセクションを見つけます。次に、HandleSourceTableTruncated パラメータと HandleSourceTableDropped パラメータを False に設定します。設定例:

    "ChangeProcessingDdlHandlingPolicy": {
       "HandleSourceTableDropped": false,
       "HandleSourceTableTruncated": false
    }
  9. [保存] をクリックします。

  10. [アクション]、[再開] の順にクリックします。

Amazon S3 にスキーマの変更が反映されない

ソースのテーブルに新しい列を追加しても、スキーマの進化を有効にしないと、AWS DMS は変更をキャプチャしない可能性があります。

欠落しているスキーマの変更を解決するには、次の手順を実行します。

  1. AWS DMS コンソールを開きます。

  2. ナビゲーションペインの [移行または複製] で [タスク] をクリックします。

  3. 該当するタスクを選択します。

  4. タスクステータスが [停止] になっていることを確認します。

  5. [変更] をクリックします。

  6. [タスク設定] をクリックします。

  7. [JSON エディタ] をクリックします。

  8. ChangeProcessingDdlHandlingPolicy パラメータセクションを見つけます。次に、HandleSourceTableAltered パラメータを True に設定します。設定例:

    "ChangeProcessingDdlHandlingPolicy": {
       "HandleSourceTableAltered": true
    }
  9. [保存] をクリックします。

  10. [アクション]、[再開] の順にクリックします。

  11. Amazon S3 データに新しい列を含めるには、テーブルをリロードします。

複数のタスクが同じ Amazon S3 パスに書き込みを行い、データが重複したり、一貫性がなくなる

Amazon S3 はすべての受信オブジェクトを保存するため、複数の AWS DMS タスクが同じ S3 パスに書き込みを行うと、データが重複します。

この問題を解決するには、次の手順を実行します。

  1. AWS DMS コンソールを開きます。
  2. ナビゲーションペインの [移行または複製] で [タスク] をクリックします。
  3. 該当するタスクを選択します。
  4. タスクステータスが [停止] になっていることを確認します。
    注: 未使用のタスクや、まだデータを書き込んでいるテストタスクは必ず停止してください。
  5. ナビゲーションペインで [エンドポイント] をクリックします。
  6. ターゲットエンドポイントを選択します。
  7. [変更] をクリックします。
  8. 一意の BucketFolder 値を割り当てます。
  9. [保存] をクリックします。
    注: AWS DMS は、ターゲットからレプリケーションインスタンスへの接続を自動的にテストします。接続テストが正常に完了したことを確認してください。
  10. ナビゲーションペインの [移行または複製] で [タスク] をクリックします。
  11. 目的のタスクを選択し、[アクション] をクリックします。[再起動] をクリックします。
  12. 同じソースから複製するタスクごとに、手順 2 ~ 11 を繰り返します。

TargetTablePrepMode が DO_NOTHING に設定されているため、レコードが重複する

タスクの TargetTablePrepMode を DO_NOTHING に設定し、フルロードフェーズ中に停止した場合、タスクは再起動時にフルロードファイルを再度書き込みます。Amazon S3 は自動更新またはクリーンアップをサポートしていないため、これによりフルロードデータが重複します。

この問題を解決するには、次の手順を実行します。

  1. AWS DMS コンソールを開きます。
  2. ナビゲーションペインの [移行または複製] で [タスク] をクリックします。
  3. 該当するタスクを選択します。
  4. タスクステータスが [停止] になっていることを確認します。
  5. [変更] をクリックします。
  6. [タスク設定] をクリックします。
  7. [JSON エディタ] をクリックします。
  8. FullLoadSettings パラメータセクションを見つけます。TargetTablePrepMode を TRUNCATE_BEFORE_LOAD に設定します。設定例:
    "FullLoadSettings": {
    "TargetTablePrepMode": "TRUNCATE_BEFORE_LOAD"
    }
    注: TargetTablePrepMode を DO_NOTHING に設定して重複を防ぐには、フルロードフェーズが完了した後にのみタスクを停止してください。
  9. タスクを再開する前に、以前に書き込まれたフルロードファイルを S3 バケットから手動で削除します。

関連情報

Endpoint settings when using Amazon S3 as a target for AWS DMS (Amazon S3 を AWS DMS のターゲットとして使用する場合のエンドポイント設定)

Limitations to using Amazon S3 as a target (Amazon S3 をターゲットとして使用する場合の制限事項)

AWS公式更新しました 8ヶ月前
コメントはありません

関連するコンテンツ