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

AWS DMS のソースデータベースとターゲットデータベース間でデータが一致しない場合のトラブルシューティング方法を教えてください。

所要時間1分
0

AWS Database Migration Service (AWS DMS) タスクが、移行においてフルロードが完了したか、レプリケーションが進行中の段階です。しかし、ターゲットデータベースのデータがソースのデータと一致しません。

簡単な説明

AWS DMS を使用して異種環境でデータを移行する際、次の理由でデータの不一致が発生することがあります。

  • ラージバイナリオブジェクト (LOB) が正しく設定されていない
  • ソースまたはターゲットのデータ型がサポートされていない
  • 変更データキャプチャ (CDC) のレプリケーション中に発生するエラーまたは例外により、ターゲットのデータベースでデータ操作言語 (DML) トランザクションが失敗する

LOB を正しく設定していない場合、データはタスク設定 LobMaxSize に基づいて切り捨てられます。その結果、ターゲットの LOB 列に含まれるデータは、ソースとは完全一致しないものになります。

異種移行を行う際、AWS DMS はソースのデータ型を内部のデータ型に変換します。次に、AWS DMS は内部データをターゲットのデータ型に変換します。ソースとターゲットにある特定のデータタイプは AWS DMS で完全にはサポートされていないため、ソースとターゲットの間でデータの不一致が発生する可能性があります。

解決策

初期チェックを実施する

フルロードのみのタスクを使用する場合は、移行が完了しており、タスクが停止状態であることを確認してください。

フルロードタスクと CDC タスク、あるいは CDC のみのタスクを使用する場合は、Amazon CloudWatch メトリクス CDCLatencySource および CDCLatencyTarget を確認します。遅延が発生していないことを確認します。

データが操作される可能性があるため、ソースデータベースまたはターゲットデータベースに他のアプリケーションが接続されていないことを確認してください。たとえば、フルロードのみのタスクの実行中に、ソースの日付が別のアプリケーションによって変更された場合、ターゲットでデータの不一致が発生します。または、別のアプリケーションがターゲットデータベース上に移行したターゲットテーブルにデータを書き込むと、ターゲットとソース間でデータが一致しなくなります。

ターゲットの awsdms_validation_failures_v1 テーブルをクエリする

データの一貫性を目標とする場合は、AWS DMS タスクを作成する際に検証を有効にします。

注: テーブルに LOB 列があり、移行に制限付き LOB モードを使用する場合は、ValidationPartialLobSize の値を LobMaxSize と一致させる必要があります。

検証が有効な場合のトラブルシューティング

検証が有効な場合は、ターゲットデータベースの awsdms_Validation_failures_v1 テーブルを確認します。移行中にレコードの状態が ValidationSuspended または ValidationFailed になると、AWS DMS は awsdms_validation_failures_v1 に診断情報を書き込みます。検証エラーをトラブルシューティングするには、次のようなコマンドを実行します。

select * from awsdms_validation_failures_v1 where TASK_NAME = 'ABC123FGJASHKNA345';

障害に関する情報を取得するには、出力の [詳細] 列を確認します。[キー] 列を参照し、ソースとターゲットのレコードデータを比較します。データ検証に関する問題のトラブルシューティング方法の詳細については、「トラブルシューティング」を参照してください。

検証が無効な場合のトラブルシューティング

AWS DMS タスクで検証を有効にしていない場合は、検証のみのタスクを作成します。

1 回限りの移行では、フルロード検証専用機能を使用すると、ソースとターゲットのすべての行を迅速に比較できます。

継続的なレプリケーションでは、CDC 検証専用タスクを使用してください。CDC 検証専用タスクは、ソーステーブルとターゲットテーブルの既存の行を検証します。タスクは進行中の変更が発生するたびに継続し、データ検証の失敗を報告します。

ソースデータとターゲットデータの制限を確認する

データの不一致を特定した後、ソースとターゲットでデータ型に関連する制限がないか確認します。たとえば、PostgreSQL をソースとして使用する場合、ENUM データ型を移行することはできません。

タスクログにエラーがないかを確認する

検証が失敗した場合、タスクログにエラーがないか確認します。または、制御テーブルを参照し、データのレプリケーション段階で記録された例外を確認します、。

切り捨てによって生じた不一致データを解決する

制限付き LOB モードを使用する場合、AWS DMS はレプリケーションインスタンスにメモリを事前に割り当てます。次に、AWS DMS はタスク設定 LobMaxSize を使用して LOB データを一括ロードします。AWS DMS は、最大 LOB サイズを超える LOB を切り捨て、ログファイルに警告メッセージを発行します。

ログファイルにデータが切り捨てられたことを示す警告メッセージがないか確認し、対応する LOB 列の最大サイズを確認します。その LOB 列のサイズよりも大きい LobMaxSize を定義し、データが切り捨てられないようにします。診断サポートスクリプトを使用して LOB データを含むテーブルを特定し、LOB 列のサイズをクエリします。

LOB 列の最大サイズが 100 MB を超える場合は、フル LOB モードまたはインライン LOB モードを使用して LOB 列データの切り捨てを防ぎます。

関連情報

検証のみのタスク

AWS DMS タスクでソースデータベースの LOB サポートを設定する

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

関連するコンテンツ