AWS Database Migration Service での移行タスクのトラブルシューティング - AWS Database Migration Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Database Migration Service での移行タスクのトラブルシューティング

以下では、の問題のトラブルシューティングに関するトピックを見つけることができます。AWSDatabase Migration Service (AWS DMS). これらのトピックは、両方を使用して一般的な問題を解決するのに役立ちます。AWS DMSを選択し、エンドポイントデータベースを選択します。

あなたが開いていればAWSSupport ケースでは、サポートエンジニアが、エンドポイントデータベース構成の 1 つに関する潜在的な問題を特定する可能性があります。エンジニアは、データベースに関する診断情報を返すためにサポートスクリプトを実行するように頼む場合もあります。このタイプのサポートスクリプトからの診断情報のダウンロード、実行、およびアップロードの詳細については、を参照してください。での診断サポートスクリプトの操作AWS DMS

トピック

移行タスクの実行が遅い

移行タスクの実行が遅くなる、または後続のタスクの実行が初期タスクより遅くなる原因として、いくつかの問題が考えられます。

移行タスクの実行が遅くなる最も一般的な原因は、[] に割り当てられているリソースが不十分であることです。AWS DMSレプリケーションインスタンス。インスタンスで実行中のタスクのために十分なリソースがあることを確認するには、レプリケーションインスタンスの CPU、メモリ、スワップファイル、および IOPS の使用率をチェックします。たとえば、エンドポイントとして Amazon Redshift の複数のタスクは I/O 集約型です。レプリケーションのインスタンスに対して IOPS を増やすか、より効率的に移行するためにレプリケーションの複数のインスタンス間で作業を分割できます。

レプリケーションのインスタンスサイズの決定に関する詳細については、「」を参照してください。レプリケーションインスタンス用に最適なサイズを選択する

以下を実行すると、初期の移行のロードがスピードアップします。

  • ターゲットが Amazon RDS DB インスタンスの場合、Multi-AZ がターゲット DB インスタンスに対して有効になっていないことを確認します。

  • ロード中の自動バックアップまたはターゲットデータベースでのログ作成をオフにし、移行が完了したらこれらの機能をオンに戻します。

  • この機能がターゲットで利用可能な場合は、プロビジョンド IOPS を使用します。

  • 移行データに LOB が含まれている場合は、タスクが LOB 移行のために最適化されていることを確認します。LOB 用の最適化の詳細については、「」を参照してください。ターゲットメタデータのタスク設定

タスクのステータスバーが動かない

タスクのステータスバーで、タスクの進捗状況を予測できます。この予測の正確さはソースデータベースのテーブル統計の正確さによって異なります。テーブル統計が正確であればあるほど、正確に予測できます。

予測された列の統計がないテーブルが 1 つだけのタスクでは、AWS DMS完全なパーセンテージの見積もりは提供できません。この場合、タスクの状態と、ロードされた行の表示を使用して、タスクが実行されて進行していることを確認します。

タスクは完了しましたが、何も移行されませんでした

タスクの完了後に何も移行されなかった場合は、次の手順を実行します。

  • エンドポイントを作成したユーザーが、移行するテーブルへの読み取りアクセス権を持っているかどうかを確認します。

  • 移行するオブジェクトがテーブルであるかどうかを確認します。ビューの場合は、テーブルマッピングを更新し、オブジェクトロケータを「ビュー」または「すべて」として指定します。詳細については、「 コンソールからテーブル選択および変換を指定する」を参照してください。

外部キーとセカンダリインデックスが見つからない

AWS DMSは、テーブル、プライマリキー、場合によっては一意のインデックスを作成しますが、効率的にソースからデータを移行するために必要ではない他のオブジェクトは作成されません。たとえば、セカンダリインデックス、非プライマリキーの制約、データデフォルトは作成されません。

データベースからセカンダリオブジェクトを移行するには、ソースデータベースと同じデータベースエンジンに移行中の場合、データベースのネイティブツールを使用します。を使用するAWS Schema Conversion Tool(AWS SCT) は、ソースデータベースでセカンダリオブジェクトを移行するのに使用されるものとは異なるデータベースエンジンに移行している場合。

AWS DMSCloudWatch ログは作成されません

レプリケーションタスクで CloudWatch ログが作成されない場合は、アカウントに [dms-cloudwatch-logs-roleロール。このロールが存在しない場合は、次の手順を実行してロールを作成します。

  1. AWS Management Console にサインインして、https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

  2. [ロールタブ。[Create role] (ロールの作成) を選択します。

  3. 信頼されたエンティティのタイプを選択セクションで、[] を選択します。AWS のサービス

  4. ユースケースを選択するセクションで、[] を選択します。DMS

  5. [Next: (次へ:)] を選択します アクセス許可.

  6. EnterAmazonDMSCloudWatchLogsRole[] を検索フィールドに表示し、[] の横にあるチェックボックスをオンにします。AmazonDMSCloudWatchlogsRole。この助成金AWS DMSCloudWatch にアクセスするためのアクセス許可。

  7. [Next: (次へ:)] を選択します タグ

  8. [Next: (次へ:)] を選択します 確認.

  9. Enterdms-cloudwatch-logs-roleにとってロール名。この名前は、大文字と小文字が区別されます。

  10. [Create role] (ロールの作成) を選択します。

Amazon RDS への接続で問題が発生する

ソースまたはターゲットとして設定した Amazon RDS DB インスタンスに接続できない理由は複数考えられます。チェックすべき項目は次のとおりです。

  • ユーザー名とパスワードの組み合わせが正しいことを確認します。

  • インスタンス用に Amazon RDS コンソールに表示されるエンドポイント値が、作成に使用したエンドポイント識別子と同じであることを確認します。AWS DMSエンドポイントにする必要があります。

  • インスタンス用に Amazon RDS コンソールに表示されるポート値が、に割り当てられたポートと同じであることを確認します。AWS DMSエンドポイントにする必要があります。

  • Amazon RDS DB インスタンスに割り当てられたセキュリティグループが、AWS DMS のレプリケーションのインスタンスからの接続を許可することを確認します。

  • そのファイルにAWS DMSレプリケーションインスタンスと Amazon RDS DB インスタンスが同じ仮想プライベートクラウド (VPC) にない場合は、DB インスタンスがパブリックにアクセス可能であることを確認します。

エラーメッセージ: スレッド接続文字列が正しくない: スレッド値 0 が正しくありません

エンドポイントへの接続をテストしているとき、このエラーが頻繁に発生します。このエラーは、接続文字列にエラーがあることを示します。たとえば、ホスト IP アドレスの後ろにスペースがあります。もう一つは、接続文字列にコピーされた不正な文字です。

ネットワーキングの問題が発生

最も一般的なネットワーキング問題には、AWS DMS のレプリケーションのインスタンスによって使用される VPC のセキュリティグループが関係しています。デフォルトでは、このセキュリティグループではすべてのポートの 0.0.0.0/0 からの送信を許可するルールがあります。多くの場合、このセキュリティグループを変更するか、独自のセキュリティグループを使用します。その場合は、少なくとも、それぞれのデータベースポートでソースエンドポイントとターゲットエンドポイントに出力を渡してください。

その他の設定関連の問題には、次のようなものがあります。

  • レプリケーションインスタンスと、同じ VPC 内のソースエンドポイントとターゲットエンドポイントの両方— エンドポイントで使用されるセキュリティグループは、レプリケーションインスタンスからの受信をデータベースポートで許可する必要があります。レプリケーションインスタンスで使用されるセキュリティグループにエンドポイントへの進入があることを確認します。または、エンドポイントによって使用されるセキュリティグループに、レプリケーションインスタンスのプライベート IP アドレスへのアクセスを許可するルールを作成することができます。

  • ソースエンドポイントが、レプリケーションインスタンスによって使用される VPC 外にある(インターネットゲートウェイを使用)— VPC セキュリティグループには、VPC に向かわないトラフィックをインターネットゲートウェイに送信するルーティングルールが含まれている必要があります。この設定では、エンドポイントへの接続がレプリケーションインスタンス上のパブリック IP アドレスから行われているように見えます。

  • ソースエンドポイントが、レプリケーションインスタンスによって使用される VPC 外にある(NAT ゲートウェイを使用)— ネットワークアドレス変換 (NAT) ゲートウェイを 1 つの Elastic network interface にバインドされた単一の Elastic IP アドレスを使用して設定することができます。この NAT ゲートウェイは NAT 識別子 (nat-#####) を受け取ります。

    VPC には、インターネットゲートウェイではなく、その NAT ゲートウェイへのデフォルトルートが含まれている場合があります。このような場合、レプリケーションインスタンスが NAT ゲートウェイのパブリック IP アドレスを使用してデータベースエンドポイントに接続しているように見えます。ここでは、VPC 外のデータベースエンドポイントへの進入は、レプリケーションインスタンスのパブリック IP アドレスではなく NAT アドレスからの進入を許可する必要があります。

独自のオンプレミスネームサーバーの使用については、「」を参照してください。 独自のオンプレミスネームサーバーの使用

全ロード後、CDC が停止する

複数の AWS DMS 設定が互いに競合すると、全ロード移行後に、レプリケーション変更が遅くなるか停止することがあります。

たとえば、ターゲットテーブル作成モードパラメータの設定何もしないまたは切り詰め。この場合、あなたは指示しましたAWS DMSは、プライマリキーと一意なインデックスの作成を含め、ターゲットテーブル上でのセットアップを行いません。ターゲットテーブルでプライマリキーまたは一意なキーを作成していない場合、AWS DMSは、更新プログラムごとにテーブル全体のスキャンを行います。このアプローチは、パフォーマンスに大きな影響を与える可能性があります。

タスクを再開すると、プライマリキー違反エラーが発生します

このエラーは、以前の移行タスクからのターゲットデータベースにデータが残っている場合に発生することがあります。そのファイルにターゲットテーブル作成モードオプションがに設定されている何もしない,AWS DMSは、以前のタスクから挿入されたデータの削除を含め、ターゲットテーブルの準備を行いません。

タスクを再開し、これらのエラーを回避するために、以前のタスクの実行からターゲットテーブルに挿入される行を削除します。

スキーマの初回ロードが失敗する

場合によっては、スキーマの初期ロードが次のエラーで失敗することがあります。Operation:getSchemaListDetails:errType=, status=0, errMessage=, errDetails=

このような場合、によって使用されるユーザーアカウントAWS DMSソースエンドポイントに接続するためのアクセス許可がありません。

タスクが不明なエラーで失敗する

不明なタイプのエラーの原因はさまざまです。しかし、多くの場合、問題には、に割り当てられたリソースが不十分であることがわかります。AWS DMSレプリケーションインスタンス。

レプリケーションのインスタンスで移行を実行するために十分なリソースがあることを確認するには、インスタンスの使用率をチェックし、インスタンスの CPU、メモリ、スワップファイル、および IOPS の使用率をチェックします。モニタリングの詳細については、「AWS Database Migration Service のメトリクス」を参照してください。

タスクを再開するとテーブルが最初からロードされる

AWS DMSは、テーブルの初回ロードを完了しなかった場合、テーブルのロードを最初から再開します。タスクが再起動されると、AWS DMS最初のロードが完了しなかったときに、テーブルを最初からリロードします。

課題の原因となるタスクあたりのテーブル数

レプリケーションタスクあたりのテーブル数に制限はありません。ただし、経験則として、タスク内のテーブルの数を 60,000 個未満に制限することをお勧めします。1 つのタスクが 60,000 個超のテーブルを使用すると、多くの場合リソース使用がボトルネックになることがあります。

LOB カラムにプライマリキーが作成されると、タスクが失敗する

FULL LOB モードまたは LIMITTED LOB モードでは、AWS DMSは LOB データ型のプライマリキーのレプリケーションをサポートしていません。

DMS は、最初に LOB 列が NULL である行を移行し、後で LOB 列を更新します。したがって、LOB 列にプライマリキーが作成されると、プライマリキーを NULL にできないため、最初の挿入は失敗します。回避方法として、別の列をプライマリキーとして追加し、LOB 列からプライマリキーを削除します。

プライマリキーのないターゲットテーブルで重複レコードが発生する

Full load and CDC タスクを実行すると、プライマリキーまたは一意なインデックスがないターゲットテーブルに重複レコードが作成される可能性があります。全ロードタスクと CDC タスク中にターゲットテーブルのレコードが重複しないようにするには、ターゲットテーブルにプライマリキーまたは一意のインデックスがあることを確認します。

送信元エンドポイントは予約済み IP 範囲に含まれます

もしあればAWS DMSソースデータベースが 192.168.0.0/24 の予約済み IP 範囲内の IP アドレスを使用していると、ソースエンドポイント接続テストが失敗します。次の手順は、考えられる回避方法を提供します。

  1. 192.168.0.0/24 のソースデータベースと通信できる予約済み範囲外の Amazon EC2 インスタンスを見つけます。

  2. socat プロキシをインストールして実行します。例を以下に示します。

    yum install socat socat -d -d -lmlocal2 tcp4-listen:database port,bind=0.0.0.0,reuseaddr,fork tcp4:source_database_ip_address:database_port &

EC2 インスタンスの IP アドレスと、上記の [] のデータベースポートを [] に使用します。AWS DMSエンドポイントにする必要があります。エンドポイントに、許可されるセキュリティグループがあることを確認してください。AWS DMSデータベースポートで通信します。

Amazon Athena クエリでタイムスタンプが文字化けする

Athena クエリでタイムスタンプが文字化けする場合は、AWS Management ConsoleまたはModifyEndpoint設定するアクションparquetTimestampInMillisecondAmazon S3 エンドポイントの値true。詳細については、「」を参照してください。S3Settings

Oracle に関する問題のトラブルシューティング

以下では、使用に固有の問題のトラブルシューティングについて学習できます。AWS DMSOracle データベースを使用します。

ビューからデータを取得する

ビューからデータを 1 回プルできます。これを継続的なレプリケーションに使用することはできません。ビューからデータを抽出可能にするため、次のコードを [] に追加する必要があります。追加の接続属性アドバンストOracle ソースエンドポイントページのセクション。ビューからデータを抽出すると、そのビューはターゲットスキーマのテーブルとして表示されます。

exposeViews=true

Oracle 12c から LOB を移行する

Oracle データベースへの変更をキャプチャするために AWS DMS が使用できる方法は、Binary Reader と Oracle LogMiner の 2 つです。デフォルトでは AWS DMS は Oracle LogMiner を使用して変更をキャプチャします。ただし、Oracle 12c では、Oracle LogMiner は LOB 列をサポートしていません。Oracle 12c での LOB 列の変更をキャプチャするには、Binary Reader を使用します。

Oracle LogMiner と Binary Reader の切り替え

ソース Oracle データベースへの変更をキャプチャするために AWS DMS が使用できる方法は、Binary Reader と Oracle LogMiner の 2 つです。Oracle LogMiner がデフォルトです。Binary Reader を使用して変更をキャプチャするように切り替えるには、次を実行します。

Binary Reader を使用して変更をキャプチャするには

  1. にサインインします。AWS Management Console[] を開き、AWS DMSコンソールhttps://console.aws.amazon.com/dms/v2/

  2. 選択エンドポイント

  3. Binary Reader を使用したい Oracle ソースエンドポイントを選択します。

  4. Modify を選択します。

  5. 選択アドバンスト[] を選択し、次のコードを追加します。追加の接続属性

    useLogminerReader=N
  6. SQL-Plus などの Oracle 開発者用ツールを使用して、AWS DMSOracle エンドポイントへの接続に使用されるユーザーアカウント。

    SELECT ON V_$TRANSPORTABLE_PLATFORM

エラー: Oracle CDC は停止しました。122301 Oracle CDC の最大再試行カウンタを超えました。

このエラーは、AWS DMS が変更をキャプチャするために使用できるようになる前に、必要な Oracle アーカイブログがサーバーから削除されると発生します。データベースサーバーのログリテンションポリシーを増やします。Amazon RDS データベースでは、ログの保持を延長するために、以下の手順を実行します。たとえば、以下のコードを使うと Amazon RDS DB インスタンスでのログの保持が 24 時間に延長されます。

exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);

Oracle ソースエンドポイントにサプリメンタルロギングを自動的に追加する

デフォルトでは、AWS DMS のサプリメンタルロギングはオフになっています。Oracle ソースエンドポイントのサプリメンタルロギングを自動的にオンにするには、以下の手順を実行します。

Oracle ソースエンドポイントにサプリメンタルロギングを追加するには

  1. にサインインします。AWS Management Console[] を開き、AWS DMSコンソールhttps://console.aws.amazon.com/dms/v2/

  2. 選択エンドポイント

  3. サプリメンタルロギングを追加する Oracle ソースエンドポイントを選択します。

  4. Modify を選択します。

  5. 選択アドバンスト[] を選択し、次のコードを追加の接続属性[テキストボックス]:

    addSupplementalLogging=Y
  6. Modify を選択します。

LOB の変更がキャプチャされていない

現在、LOB の変更をキャプチャするには、テーブルに AWS DMS のプライマリキーがあることが必要です。LOB を含むテーブルにプライマリキーがない場合、LOB の変更をキャプチャするにはいくつかのアクションを行うことができます。

  • テーブルにプライマリキーを追加します。この手順は、ID 列を追加し、トリガーを使用してシーケンスを入力するだけです。

  • プライマリキーとしてシステム生成 ID を含むテーブルのマテリアライズドビューを作成し、テーブルではなくマテリアライズドビューを移行します。

  • ロジカルスタンバイを作成し、テーブルにプライマリキーを追加して、ロジカルスタンバイから移行します。

エラー: ORA-12899: 列の値が大きすぎますcolumn-name

エラー「ORA-12899: 列の値が大きすぎるcolumn-name「は、多くの場合、いくつかの問題によって引き起こされます。

これらの問題の 1 つで、ソースデータベースとターゲットデータベースで使用される文字セットに不一致があります。

これらの問題の別の問題では、2 つのデータベース間で各国語サポート (NLS) の設定が異なります。このエラーの一般的な原因は、ソースデータベースの NLS_LENGTH_SEMANTICS パラメータが CHAR に設定されており、ターゲットデータベースの NLS_LENGTH_SEMANTICS パラメータが BYTE に設定されていることです。

NUMBER のデータ型が誤って解釈される

Oracle NUMBER データ型は、さまざまなAWS DMSNUMBER の精度とスケールに応じてのデータ型。このような変換は「Oracle のソースデータ型」に記載されています。NUMBER 型の変換方法によっては、Oracle のソースエンドポイントの追加の接続属性の使用に影響を及ぼす場合があります。これらの追加の接続属性については、「AWS DMS のソースとして Oracle を使用する場合の追加の接続属性」に記載されています。

全ロード中にレコードが欠落している

全負荷を実行する場合、AWS DMSデータベースレベルで開いているトランザクションを検索し、トランザクションがコミットされるのを待ちます。たとえば、タスクの設定に基づいてTransactionConsistencyTimeout=600,AWS DMSオープントランザクションがテーブルマッピングに含まれていないテーブル上にある場合でも、は 10 分間待機します。ただし、開いているトランザクションがテーブルマッピングに含まれるテーブルにあり、トランザクションが時間内にコミットされていない場合、ターゲットテーブルの結果にレコードが欠落します。

[] を変更できます。TransactionConsistencyTimeoutタスクの設定を行い、開いているトランザクションがコミットに時間がかかることがわかっている場合は、待機時間を増やします。

また、[] のデフォルト値に注意してください。FailOnTransactionConsistencyBreachedタスク設定はfalse。これは、AWS DMS他のトランザクションは引き続き適用されますが、未処理のトランザクションは失われます。未完了のトランザクションが時間内に閉じられていないときにタスクが失敗するようにするには、FailOnTransactionConsistencyBreachedtrue

テーブルエラー

Table Errorレプリケーション中にテーブル統計情報に表示されるWHERE句はプライマリキー列を参照するわけではなく、サプリメンタルログがすべての列に使用されるわけではありません。

この問題を解決するには、参照されるテーブルのすべての列のサプリメンタルロギングを有効にします。詳細については、「サプリメンタル ロギングの設定」を参照してください。

エラー: Oracle アーカイブされた REDO ログの宛先 ID を取得できません

このエラーは、Oracle ソースにアーカイブログが生成されていないか、V$ARCHIVED_LOG が空である場合に発生します。ログを手動で切り替えることで、エラーを解決できます。

Amazon RDS データベースでは、ログファイルを切り替えるには、以下の手順を実行します。-switch_logfileプロシージャにはパラメータがありません。

exec rdsadmin.rdsadmin_util.switch_logfile;

自己管理型Oracleソース・データベースの場合、次のコマンドを使用してログ・スイッチを強制します。

ALTER SYSTEM SWITCH LOGFILE ;

MySQL に関する問題のトラブルシューティング

以下では、使用に固有の問題のトラブルシューティングについて学習できます。AWS DMSMySQL データベースを使用します。

バイナリログ作成が無効化されるため、Amazon RDS DB インスタンスのエンドポイントの CDC タスクが失敗する

自動バックアップが無効化されているためにこの問題が Amazon RDS DB インスタンスに発生します。バックアップ保持期間を 0 以外の値に設定することで自動バックアップを有効にすることができます。

ターゲット MySQL のインスタンスへの接続は、タスクの実行中に接続が切断されます

タスクが MySQL ターゲットから切断されている LOB のタスクがある場合、タスクログに次のようなエラーが表示されることがあります。

[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: 08S01 NativeError: 2013 Message: [MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16-log]Lost connection to MySQL server during query [122502] ODBC general error.
[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: HY000 NativeError: 2006 Message: [MySQL][ODBC 5.3(w) Driver]MySQL server has gone away [122502] ODBC general error.

この場合、タスク設定の一部を調整する必要がある場合があります。

タスクが MySQL ターゲットから切断される問題を解決するには、以下を実行します。

  • 最大の LOB を保持するために、十分に大きい値に設定された データベース変数 max_allowed_packetがあることを確認します。

  • 以下の変数が大きいタイムアウト値に設定されていることを確認します。これらの変数ごとに、少なくとも 5 分の値を使用することをお勧めします。

    • net_read_timeout

    • net_write_timeout

    • wait_timeout

MySQL システム変数の設定については、「」を参照してください。サーバのシステム変数MySQL のドキュメント

MySQL 互換エンドポイントへの自動コミットを追加する

MySQL 互換ターゲットエンドポイントに自動コミットを追加するには

  1. にサインインします。AWS Management Console[] を開き、AWS DMSコンソールhttps://console.aws.amazon.com/dms/v2/

  2. 選択エンドポイント

  3. オートコミットを追加する MySQL 互換ターゲットエンドポイントを選択します。

  4. Modify を選択します。

  5. 選択アドバンスト[] を選択し、次のコードを追加の接続属性[テキストボックス]:

    Initstmt= SET AUTOCOMMIT=1
  6. Modify を選択します。

MySQL 互換ターゲットエンドポイントで外部キーを無効化する

MySQL の外部キーチェックを無効にするには、以下を追加の接続属性アドバンストターゲットMySQL、Amazon Aurora MySQL互換エディション、または MariaDB エンドポイントのセクション。

MySQL 互換ターゲットエンドポイントで外部キーを無効化するには

  1. にサインインします。AWS Management Console[] を開き、AWS DMSコンソールhttps://console.aws.amazon.com/dms/v2/

  2. 選択エンドポイント

  3. 外部キーを無効にしたい MySQL、Aurora MySQL、または MariaDB ターゲットエンドポイントを選択します。

  4. Modify を選択します。

  5. 選択アドバンスト[] を選択し、次のコードを追加の接続属性[テキストボックス]:

    Initstmt=SET FOREIGN_KEY_CHECKS=0
  6. Modify を選択します。

文字が疑問符に置き換えられる

この問題を引き起こす可能性がある最も一般的な状況は、AWS DMS がサポートしない文字セットでソースエンドポイントの文字がエンコードされている場合です。

[Bad event] ログのエントリ

移行ログの [Bad event] のエントリは通常、ソースデータベースエンドポイントで、サポートされていないデータ定義言語 (DDL) オペレーションが試行されたことを指します。サポートされていない DDL オペレーションは、レプリケーションインスタンスがスキップできないイベントを引き起こし、bad event が記録されます。

この問題を解決するには、タスクを最初から再起動します。これにより、テーブルがリロードされ、サポートされていない DDL オペレーションの発行後の時点で変更のキャプチャが開始されます。

MySQL 5.5 の変更データキャプチャ

AWS DMSAmazon RDS MySQL 互換データベースの変更データキャプチャ (CDC) では、MySQL バージョン 5.5 以前でサポートされていない、完全なイメージ行ベースのバイナリログ作成が必要です。AWS DMS CDC を使用するには、Amazon RDS DB インスタンスを MySQL バージョン 5.6 にアップグレードする必要があります。

Amazon RDS DB インスタンスのバイナリログ保持を延長する

AWS DMS では、変更データキャプチャのバイナリログファイルを保持する必要があります。Amazon RDS DB インスタンスでログの保持を延長するには、以下の手順を使用します。以下の例では、バイナリログの保持を 24 時間に延長します。

call mysql.rds_set_configuration('binlog retention hours', 24);

ログメッセージ: ソースデータベースからの一部の変更は、ターゲットデータベースに適用されても効果がありません。

AWS DMS が MySQL データベースの列の値を既存の値に更新すると、MySQL は zero rows affected のメッセージを返します。この動作は、Oracle や SQL Server などの他のデータベースエンジンとは異なります。これらのエンジンは、置換値が現在の値と同じであっても 1 行を更新します。

エラー: 識別子が長すぎます

以下のエラーは識別子が長すぎるときに発生します。

TARGET_LOAD E: RetCode: SQL_ERROR SqlState: HY000 NativeError: 1059 Message: MySQLhttp://ODBC 5.3(w) Driverhttp://mysqld-5.6.10Identifier name 'name' is too long 122502 ODBC general error. (ar_odbc_stmt.c:4054)

場合によっては、AWS DMSをクリックして、ターゲットデータベースにテーブルとプライマリキーを作成します。このような場合、DMS は現在、ソースデータベースで使用されたプライマリキーと同じ名前を使用していません。代わりに、DMS はテーブル名に基づいてプライマリキー名を作成します。テーブル名が長いと、作成される自動生成された識別子が、MySQL で許可されている制限よりも長くなる場合があります。

この問題を解決するには、まずターゲットデータベースでテーブルとプライマリキーを事前に作成する方法が現在のアプローチです。次に、タスク設定でタスクを使用します。ターゲットテーブル作成モードに設定する何もしないまたは切り詰め[] をクリックして、ターゲットテーブルに入力します。

エラー: サポートされていない文字セットによりフィールドデータ変換が失敗しました

以下のエラーは、サポートされていない文字セットによりフィールドデータ変換が失敗した場合に発生します。

"[SOURCE_CAPTURE ]E: Column 'column-name' uses an unsupported character set [120112] A field data conversion failed. (mysql_endpoint_capture.c:2154)

接続に関連するデータベースのパラメータを確認します。以下のコマンドを使用してこれらのパラメータを設定できます。

SHOW VARIABLES LIKE '%char%';

エラー: Codepage 1252 to UTF8 [120112] A field data conversion failed

以下のエラーは、ソース MySQL データベースにコードページ 1252 以外の文字コードが含まれている場合に発生することがあります。

[SOURCE_CAPTURE ]E: Error converting column 'column_xyz' in table 'table_xyz with codepage 1252 to UTF8 [120112] A field data conversion failed. (mysql_endpoint_capture.c:2248)

回避策として、ソースの MySQL エンドポイントで追加の接続属性 (CharsetMapping) を使用して、文字セットのマッピングを指定します。の再起動が必要になる場合があります。AWS DMSこの接続属性をさらに追加した場合、最初から移行タスク。

たとえば、ソース文字セットが設定されている MySQL ソースエンドポイントでは、次の追加の接続属性を使用することができます。utf8またはlatin1。65001 は UTF8 コードのページ識別子です。

CharsetMapping=utf8,65001 CharsetMapping=latin1,65001

PostgreSQL に関する問題のトラブルシューティング

以下では、使用に固有の問題のトラブルシューティングについて学習できます。AWS DMSPostgreSQLデータベースで。

切り捨てられる JSON データ型

AWS DMS では、PostgreSQL の JSON データ型は LOB データ型の列として処理されます。つまり、制限付き LOB モードを使用するときの LOB サイズ制限が、JSON データに適用されます。

たとえば、制限付き LOB モードが 4,096 KB に設定されているとします。この場合、4,096 KB よりも大きい JSON データは 4,096 KB の制限で切り捨てられ、PostgreSQL の検証テストに合格しません。

以下のログ情報は、制限付き LOB モードにより切り捨てられた JSON と、失敗した検証を示しています。

03:00:49 2017-09-19T03:00:49 [TARGET_APPLY ]E: Failed to execute statement: 'UPDATE "public"."delivery_options_quotes" SET "id"=? , "enabled"=? , "new_cart_id"=? , "order_id"=? , "user_id"=? , "zone_id"=? , "quotes"=? , "start_at"=? , "end_at"=? , "last_quoted_at"=? , "created_at"=? , "updated_at"=? WHERE "id"=? ' [1022502] (ar_odbc_stmt 2017-09-19T03:00:49 [TARGET_APPLY ]E: Failed to execute statement: 'UPDATE "public"."delivery_options_quotes" SET "id"=? , "enabled"=? , "new_cart_id"=? , "order_id"=? , "user_id"=? , "zone_id"=? , "quotes"=? , "start_at"=? , "end_at"=? , "last_quoted_at"=? , "created_at"=? , "updated_at"=? WHERE "id"=? ' [1022502] (ar_odbc_stmt.c:2415)  03:00:49 2017-09-19T03:00:49 [TARGET_APPLY ]E: RetCode: SQL_ERROR SqlState: 22P02 NativeError: 1 Message: ERROR: invalid input syntax for type json;, Error while executing the query [1022502] (ar_odbc_stmt.c:2421) 2017-09-19T03:00:49 [TARGET_APPLY ]E: RetCode: SQL_ERROR SqlState: 22P02 NativeError: 1 Message: ERROR: invalid input syntax for type json;, Error while executing the query [1022502] (ar_odbc_stmt.c:2421)

ユーザー定義のデータ型の列が正しく移行されない

PostgreSQL ソースからレプリケートする場合、AWS DMS はユーザー定義のデータ型を含む列とは別に、すべての列に対して同じデータ型のターゲットテーブルを作成します。このような場合、データ型はターゲットで「character varying」として作成されます。

エラー: 作成用のスキーマが選択されていない

場合によっては、「SQL_ERROR SqlState: 3F000 NativeError: 7 メッセージ: エラー:作成用のスキーマが選択されていません。

このエラーは、JSON テーブルのマッピングがスキーマに対してワイルドカード値を含み、ソースデータベースがその値をサポートしていない時に発生することがあります。

CDC を使用してテーブルへの削除や更新がレプリケートされない

変更データキャプチャ (CDC) 中の削除および更新オペレーションは、ソーステーブルにプライマリキーがない場合、無視されます。AWS DMSは、プライマリキーを持つ PostgreSQL テーブルの変更データキャプチャ (CDC) をサポートしています。

テーブルにプライマリキーがない場合、先書きログ (WAL) ログにはデータベース行の前イメージが含まれていません。この場合、AWS DMSテーブルを更新できません。削除オペレーションをレプリケートするには、ソーステーブルにプライマリキーを作成します。

truncate ステートメントが伝播されない

変更データキャプチャ (CDC) を使用する場合、は TRUNCATE オペレーションをサポートしません。AWS DMS。

PostgreSQL の DDL キャプチャを防止する

以下の [Extra Connection Attribute (追加の接続属性)] ステートメントを追加して、PostgreSQL ターゲットエンドポイントが DDL ステートメントをキャプチャするのを防止できます。[Extra Connection Attribute (追加の接続属性)​​] パラメータは、ソースエンドポイントの [Advanced (詳細)] タブで利用可能です。

captureDDLs=N

DDL キャプチャ用のデータベースオブジェクトを作成するスキーマの選択

DDL キャプチャに関連したデータベースオブジェクトをどのスキーマで作成するかを制御できます。以下の [Extra Connection Attribute (追加の接続属性)] ステートメントを追加します。[Extra Connection Attribute (追加の接続属性)​​] パラメータは、ソースエンドポイントの [Advanced (詳細)] タブで利用可能です。

ddlArtifactsSchema=xyzddlschema

PostgreSQL に移行した後 Oracle テーブルが存在しない

この場合、通常、テーブルとデータには引き続きアクセスできます。

Oracle のデフォルトは大文字のテーブル名で、PostgreSQL のデフォルトは小文字のテーブル名です。Oracle から PostgreSQL への移行を実行するときは、タスクのテーブルマッピングセクションの下に特定の変換ルールを指定することをお勧めします。これらは、テーブル名の大文字と小文字を変換するための変換ルールです。

変換ルールを使用してテーブル名のケースを変換せずにテーブルを移行した場合、それらを参照するときにはテーブル名を引用符で囲みます。

replicationSlotDiskUsage が増加し、restart_lsn は ETL ワークロードなどの長いトランザクション中に前進を停止します

論理レプリケーションが有効な場合、トランザクションあたりのメモリに保持される変更の最大数は 4MB です。その後、変更がディスクにこぼれます。その結果、ReplicationSlotDiskUsageが増加し、restart_lsnトランザクションが完了/中止され、ロールバックが完了するまで進みません。トランザクションが長いため、ロールバックに時間がかかることがあります。

したがって、論理レプリケーションが有効になっている場合は、トランザクションの長期実行を避けてください。代わりに、トランザクションをいくつかの小さなトランザクションに分割してください。

ソースとしてビューを使用したタスクで行がコピーされない

ビューをマイグレートするには、table-typeallまたはview。詳細については、「 コンソールからテーブル選択および変換を指定する」を参照してください。

ビューをサポートするソースには、次のようなものがある。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • IBM Db2 LUW

  • SAP Adaptive Server Enterprise (ASE)

Microsoft SQL Server に関する問題のトラブルシューティング

以下では、使用に固有の問題のトラブルシューティングについて学習できます。AWS DMSMicrosoft SQL Server データベースと。

SQL Server データベースの変更キャプチャエラー

変更データキャプチャ (CDC) 中のエラーは、前提条件の 1 つが満たされていないことを示している可能性があります。たとえば、最も一般的に見過ごされる前提条件は、完全データベースバックアップです。タスクログは以下のエラーで、この欠落を示します。

SOURCE_CAPTURE E: No FULL database backup found (under the 'FULL' recovery model). To enable all changes to be captured, you must perform a full database backup. 120438 Changes may be missed. (sqlserver_log_queries.c:2623)

「」で、SQL Server をソースとして使用するための前提条件を確認します。Microsoft SQL Server データベースの AWS DMS のソースとしての使用

IDENTITY 列が存在しない

AWS DMSでは、ターゲットスキーマを作成する場合の IDENTITY 列がサポートされていません。初期ロードの完了後に追加する必要があります。

エラー: SQL Server はパブリケーションをサポートしていません

以下のエラーは、SQL Server Express をソースエンドポイントとして使用する際に生成されます。

RetCode: SQL_ERROR SqlState: HY000 NativeError: 21106 Message: This edition of SQL Server does not support publications.

AWS DMSでは現在、ソースまたはターゲットとして SQL Server Express はサポートされていません。

変更がターゲットに表示されない

AWS DMS では、変更を一貫してキャプチャするために、ソース SQL Server データベースが「FULL」または「BULK LOGGED」データ復旧モデルのいずれかであることが必要です。「SIMPLE」モデルはサポートされていません。

SIMPLE 復旧モデルは、ユーザーがデータベースを復旧するのに必要な最低限の情報を記録します。すべての非アクティブのログエントリは、チェックポイントが発生すると自動的に切り捨てられます。

すべての操作は引き続きログに記録されます。ただし、チェックポイントが発生するとすぐに、ログは自動的に切り捨てられます。この切り捨ては、ログが再利用可能になり、古いログエントリを上書きできることを意味します。ログエントリが上書きされると、変更をキャプチャできません。この問題が理由ですAWS DMSでは、SIMPLE データ復旧モデルはサポートされていません。SQL Server をソースとして使用するためのその他の前提条件については、「」を参照してください。Microsoft SQL Server データベースの AWS DMS のソースとしての使用

パーティションにまたがってマッピングされる不均一テーブル

変更データキャプチャ (CDC) 中に、特殊な構造を持つテーブルの移行は、次の場合に中断されます。AWS DMSテーブルで CDC を正しく実行できません。次のようなメッセージが発行されます。

[SOURCE_CAPTURE ]W: Table is not uniformly mapped across partitions. Therefore - it is excluded from CDC (sqlserver_log_metadata.c:1415) [SOURCE_CAPTURE ]I: Table has been mapped and registered for CDC. (sqlserver_log_metadata.c:835)

SQL Server テーブルで CDC を実行する場合、AWS DMS は SQL Server の tlog を解析します。各 tlog レコードで、AWS DMS は変更中に挿入、更新、または削除されたカラムのデータを含む 16 進値を解析します。

16 進レコードを解析するために、AWS DMS は SQL Server システムテーブルからテーブルメタデータを読み取ります。これらのシステムテーブルは、特別に構造化されたテーブルカラムが何であるかを識別し、「xoffset」や「null bit position」などの内部プロパティの一部を表示します。

AWS DMS では、メタデータがテーブルのすべての未加工パーティションで同じであることを想定しています。しかし、場合によっては、特別に構造化されたテーブルのすべてのパーティションで同じメタデータが保持されないことがあります。この場合、AWS DMSは、そのテーブルの CDC を中断して、変更を誤って解析したり、ターゲットに誤ったデータを提供したりするのを避けることができます。回避策には、次のものが含まれます。

  • テーブルにクラスター化されたインデックスがある場合は、インデックスの再構築を実行します。

  • テーブルにクラスター化されたインデックスがない場合は、クラスター化されたインデックスをテーブルに追加します (必要に応じて後で削除できます)。

Amazon Redshift に関する問題のトラブルシューティング

以下では、使用に固有の問題のトラブルシューティングについて学習できます。AWS DMSAmazon Redshift データベースで。

別の Amazon Redshift クラスターに読み込むAWSリージョン

Amazon Redshift クラスターを別のクラスターに読み込むことはできませんAWSあなたの地域よりも地域AWS DMSレプリケーションインスタンス。DMS では、レプリケーションインスタンスと Amazon Redshift クラスターが同じリージョンにあることが必要です。

エラー: リレーション「awsdms_apply_exceptions」がすでに存在します

エラー "リレーション「awsdms_apply_exceptions」がすでに存在します" は、Redshift エンドポイントが PostgreSQL エンドポイントとして指定されている場合に頻繁に発生します。この問題を解決するには、エンドポイントを変更し、[Target engine] を「redshift」に変更します。

名前が「awsdms_changes」で始まるテーブルのエラー

名前が「awsdms_changes」で始まるテーブルのエラーメッセージは、同一の Amazon Redshift クラスターにデータをロードしようとする 2 つのタスクが同時に実行される時に発生することがあります。一時テーブルに名前が付けられる方法のため、同じテーブルを更新する場合、同時に実行されるタスクは競合する場合があります。

DMS.awsdms_changes000000000XXXX のような名前のクラスターのテーブルを表示する

AWS DMSでは、Amazon S3 に保存されるファイルからデータがロードされると、一時テーブルが作成されます。これらのテンポラリテーブルの名前には、それぞれプレフィックスが付いています。dms.awsdms_changes。AWS DMS では、データの初回ロード時と最終ターゲットテーブルへの保存前にデータを保存できるように、このようなテーブルが必要です。

Amazon Redshift での作業に必要なアクセス許可

を使用するにはAWS DMSAmazon Redshift では、Amazon Redshift にアクセスするのに使用するユーザーアカウントは、以下のアクセス権限を必要とします。

  • CRUD (選択、INSERT、UPDATE、DELETE)

  • 一括ロード

  • 作成、変更、ドロップ (タスクの定義によって必要な場合)

Amazon Redshift をターゲットとして使用するための前提条件を確認するには、「」を参照してください。のターゲットとして Amazon Redshift データベースを使用するAWS Database Migration Service

Amazon Aurora MySQL に関する問題のトラブルシューティング

以下では、使用に固有の問題のトラブルシューティングについて学習できます。AWS DMSAmazon Aurora MySQL データベースと。

エラー: 文字セット UTF8 フィールドが「,」で切り取られています。行が「\ n」で切り取られています。

ターゲットとして Amazon Aurora MySQL を使用している場合、ログに以下のようなエラーが表示されることがあります。このタイプのエラーは、通常、SQL_MODE パラメータの一部に ANSI_QUOTES があることを示しています。SQL_MODE パラメータの一部として ANSI_QUOTES を指定すると、二重引用符が引用符として処理され、タスクの実行時に問題が起きることがあります。

このエラーを修正するには、SQL_MODE パラメータから ANSI_QUOTES を削除します。

2016-11-02T14:23:48 [TARGET_LOAD ]E: Load data sql statement. load data local infile "/rdsdbdata/data/tasks/7XO4FJHCVON7TYTLQ6RX3CQHDU/data_files/4/LOAD000001DF.csv" into table `VOSPUSER`.`SANDBOX_SRC_FILE` CHARACTER SET UTF8 fields terminated by ',' enclosed by '"' lines terminated by '\n'( `SANDBOX_SRC_FILE_ID`,`SANDBOX_ID`, `FILENAME`,`LOCAL_PATH`,`LINES_OF_CODE`,`INSERT_TS`,`MODIFIED_TS`,`MODIFIED_BY`, `RECORD_VER`,`REF_GUID`,`PLATFORM_GENERATED`,`ANALYSIS_TYPE`,`SANITIZED`,`DYN_TYPE`, `CRAWL_STATUS`,`ORIG_EXEC_UNIT_VER_ID` ) ; (provider_syntax_manager.c:2561)

SAP ASE に関する問題のトラブルシューティング

以下では、使用に固有の問題のトラブルシューティングについて学習できます。AWS DMSSAP ASEデータベースを使用します。

エラー: ソースに NULL 値を持つ複合一意インデックスがある場合、LOB 列には NULL 値があります。

NULL 値を許可する複合一意インデックスで構成されたテーブルで SAP ASE をソースとして使用すると、進行中のレプリケーション中に LOB 値が移行されないことがあります。通常、この動作は、DMS レプリケーションインスタンスクライアントで ANSI_NULL をデフォルトで 1 に設定した結果です。

LOB フィールドが正しく移行されるようにするには、追加接続属性 (ECA) を含めます。'AnsiNull=0'にAWS DMSタスクのソースエンドポイント。