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) の処理設定を確認して調整してください。次の手順を実行します。
-
AWS DMS コンソールを開きます。
-
ナビゲーションペインの [移行または複製] で [タスク] をクリックします。
-
該当するタスクを選択します。
-
タスクステータスが [停止] になっていることを確認します。
-
[変更] をクリックします。
-
[タスク設定] をクリックします。
-
[JSON エディタ] をクリックします。
-
ChangeProcessingDdlHandlingPolicy パラメータセクションを見つけます。次に、HandleSourceTableTruncated パラメータと HandleSourceTableDropped パラメータを False に設定します。設定例:
"ChangeProcessingDdlHandlingPolicy": {
"HandleSourceTableDropped": false,
"HandleSourceTableTruncated": false
}
-
[保存] をクリックします。
-
[アクション]、[再開] の順にクリックします。
Amazon S3 にスキーマの変更が反映されない
ソースのテーブルに新しい列を追加しても、スキーマの進化を有効にしないと、AWS DMS は変更をキャプチャしない可能性があります。
欠落しているスキーマの変更を解決するには、次の手順を実行します。
-
AWS DMS コンソールを開きます。
-
ナビゲーションペインの [移行または複製] で [タスク] をクリックします。
-
該当するタスクを選択します。
-
タスクステータスが [停止] になっていることを確認します。
-
[変更] をクリックします。
-
[タスク設定] をクリックします。
-
[JSON エディタ] をクリックします。
-
ChangeProcessingDdlHandlingPolicy パラメータセクションを見つけます。次に、HandleSourceTableAltered パラメータを True に設定します。設定例:
"ChangeProcessingDdlHandlingPolicy": {
"HandleSourceTableAltered": true
}
-
[保存] をクリックします。
-
[アクション]、[再開] の順にクリックします。
-
Amazon S3 データに新しい列を含めるには、テーブルをリロードします。
複数のタスクが同じ Amazon S3 パスに書き込みを行い、データが重複したり、一貫性がなくなる
Amazon S3 はすべての受信オブジェクトを保存するため、複数の AWS DMS タスクが同じ S3 パスに書き込みを行うと、データが重複します。
この問題を解決するには、次の手順を実行します。
- AWS DMS コンソールを開きます。
- ナビゲーションペインの [移行または複製] で [タスク] をクリックします。
- 該当するタスクを選択します。
- タスクステータスが [停止] になっていることを確認します。
注: 未使用のタスクや、まだデータを書き込んでいるテストタスクは必ず停止してください。
- ナビゲーションペインで [エンドポイント] をクリックします。
- ターゲットエンドポイントを選択します。
- [変更] をクリックします。
- 一意の BucketFolder 値を割り当てます。
- [保存] をクリックします。
注: AWS DMS は、ターゲットからレプリケーションインスタンスへの接続を自動的にテストします。接続テストが正常に完了したことを確認してください。
- ナビゲーションペインの [移行または複製] で [タスク] をクリックします。
- 目的のタスクを選択し、[アクション] をクリックします。[再起動] をクリックします。
- 同じソースから複製するタスクごとに、手順 2 ~ 11 を繰り返します。
TargetTablePrepMode が DO_NOTHING に設定されているため、レコードが重複する
タスクの TargetTablePrepMode を DO_NOTHING に設定し、フルロードフェーズ中に停止した場合、タスクは再起動時にフルロードファイルを再度書き込みます。Amazon S3 は自動更新またはクリーンアップをサポートしていないため、これによりフルロードデータが重複します。
この問題を解決するには、次の手順を実行します。
- AWS DMS コンソールを開きます。
- ナビゲーションペインの [移行または複製] で [タスク] をクリックします。
- 該当するタスクを選択します。
- タスクステータスが [停止] になっていることを確認します。
- [変更] をクリックします。
- [タスク設定] をクリックします。
- [JSON エディタ] をクリックします。
- FullLoadSettings パラメータセクションを見つけます。TargetTablePrepMode を TRUNCATE_BEFORE_LOAD に設定します。設定例:
"FullLoadSettings": {
"TargetTablePrepMode": "TRUNCATE_BEFORE_LOAD"
}
注: TargetTablePrepMode を DO_NOTHING に設定して重複を防ぐには、フルロードフェーズが完了した後にのみタスクを停止してください。
- タスクを再開する前に、以前に書き込まれたフルロードファイルを 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 をターゲットとして使用する場合の制限事項)