移行エラーのトラブルシューティング
移行ジョブのプロセスで、ランタイム中にエラーが発生することがあります。
- エラーには、ソース データベースの不正なパスワードなど、回復可能なものもあります。つまり、エラーを修正して移行ジョブを自動的に再開できます。
- データのレプリケーションのエラーなど、回復できないものもあります。この場合、移行ジョブを最初から再開する必要があります。
エラーが発生すると、移行ジョブのステータスが Failed に変わり、サブステータスには失敗する前の最後のステータスが反映されます。
エラーのトラブルシューティングを行うには、失敗した移行ジョブに移動してエラーを表示し、エラー メッセージに記載されている手順に沿って操作します。
エラーの詳細を表示するには、移行ジョブのリンクを使用して Cloud Monitoring に移動します。ログは、特定の移行ジョブにフィルタされます。
次の表に、問題の例と解決方法を示します。
| 症状 | 考えられる原因 | 次の方法をお試しください |
|---|---|---|
| ソース データベース インスタンスに接続できません。 | ソース データベース インスタンスと移行先インスタンスの間に接続の問題がありました。 | 接続のデバッグの手順に沿って操作します。 |
| ソース データベースと移行先データベースのバージョンに互換性がないため、移行ジョブを実行できません。 | ソース データベースと移行先データベースのバージョンが、サポートされている組み合わせではありません。具体的には、指定されたソース データベースのバージョンが移行先データベースのバージョンと互換性がありません。 | 移行先データベースのバージョンが、ソース データベースのバージョンと同じか、1 つ上のメジャー バージョンであることを確認します。次に、新しい移行ジョブを作成します。 |
| ソースでデータ定義言語(DDL)またはデータ操作言語(DML)がブロックされています。 | ACCESS EXCLUSIVE ロックを必要とし、完全なダンプフェーズ中に実行される DDL はブロックされます。 |
最初の同期プロセス(完全なダンプ)では、 たとえば、テーブルが最初の同期プロセスにあり、同じテーブルで |
エラー メッセージ: No pglogical extension installed on databases (X)
|
1 つ以上のソース データベースに pglogical がインストールされていません。 |
移行元インスタンスのデータベースに pglogical をインストールするには、次のガイドラインに沿って操作します。 |
エラー メッセージ: Replication user 'x' doesn't have sufficient privileges.
|
Database Migration Service を使用しているユーザーに、指定されたオペレーションを実行するために必要な権限がありません。 | このユーザーに必要な権限があることを確認するには、次のガイドラインに沿って操作します。 |
エラー メッセージ: Unable to connect to source database server.
|
Database Migration Service がソース データベース サーバーへの接続を確立できません。 | 移行元データベース インスタンスと移行先データベース インスタンスが相互に通信できることと、移行ジョブの設定を定義したときに表示された必要な前提条件をすべて満たしていることを確認します。 |
エラー メッセージ: The source database 'wal_level' configuration must be equal to 'logical'.
|
ソース データベースの wal_level が logical 以外の値に設定されています。 |
wal_level を logical に設定します。 |
エラー メッセージ: The source database 'max_replication_slots' configuration is not sufficient.
|
max_replication_slots パラメータが正しく構成されていません。 |
このパラメータを正しく設定するには、次のガイドラインに沿って操作します。 |
エラー メッセージ: The source database 'max_wal_senders' configuration is not sufficient.
|
max_wal_senders パラメータが正しく構成されていません。 |
このパラメータを正しく設定するには、次のガイドラインに沿って操作します。 |
エラー メッセージ: The source database 'max_worker_processes' configuration is not sufficient.
|
max_worker_processes パラメータが正しく構成されていません。 |
このパラメータを正しく設定するには、次のガイドラインに沿って操作します。 |
|
エラー メッセージ: または
エラー メッセージ: |
移行ジョブの昇格中に、レプリケーションに必要な設定をクリーンアップできません。 | データベースごとに、 実行するコマンドの詳細については、レプリケーション スロットをクリーンアップするをご覧ください。 |
|
エラー メッセージ: |
Database Migration Service に提供されたソース CA 証明書にルート証明書のみが含まれている可能性があります。ただし、ソース証明書にはルート証明書と中間証明書が必要です。 たとえば、Amazon Relational Database Service の場合、rds-ca-2019-root.pem 証明書を使用すると、この問題が発生する可能性があります。 |
ルート証明書と必要な中間証明書の両方を含む、結合されたソース CA 証明書を作成します。 Amazon Relational Database Service のユースケースでは、rds-ca-2019-root.pem 証明書の代わりに rds-combined-ca-bundle.pem 証明書を使用します。 |
|
エラー メッセージ: |
max_locks_per_transaction パラメータに設定された値が不十分です。 |
このパラメータの値を {max_number_of_tables_per_database}/(max_connections + max_prepared_transactions) 以上に設定します。 |
|
エラー メッセージ: |
pglogical パッケージが移行元インスタンスに正しくインストールされていません。 | このパッケージを正しくインストールする方法の詳細については、移行元インスタンスに pglogical パッケージをインストールするをご覧ください。 |
|
エラー メッセージ: |
構成されているソースが復旧モードになっています。 | 復旧モードではないソースを構成します。 |
| 完全なダンプに時間がかかります。 | AlloyDB の移行先で、ソース データベースから大量のデータをインポートするのに時間がかかることがあります。 |
|
エラー メッセージ: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again |
完全なダンプフェーズ中に移行ジョブが失敗し、ジョブを復旧できません。ソース データベース インスタンスが再起動されたか、復旧モードになっています。または、 問題の根本原因を特定するには:
|
|
エラー メッセージ: ERROR: unknown column name {column_name} |
プライマリ ノードのレプリケートされたテーブルに列が追加されましたが、レプリカノードには追加されていません。 |
継続的な移行中に自動的に更新されるのは、データ操作言語(DML)の変更のみです。移行元と移行先のデータベースの互換性を維持するようにデータ定義言語(DDL)の変更を管理するのはユーザーの責任であり、次の 2 つの方法があります。
継続的な移行で |
エラー メッセージ: ERROR: cannot truncate a table referenced in a foreign key constraint |
ユーザーが外部キー制約のあるテーブルを切り捨てようとしました。 |
最初に外部キー制約を削除してから、テーブルを切り捨てます。 |
エラー メッセージ: ERROR: connection to other side has died |
|
|
| 選択したデータベースを移行し、移行ジョブが 1 つ以上のデータベースにデータをレプリケートできない場合、データベースのリストに [失敗] ステータスが表示されます。 | 移行ジョブのエラーはさまざまです。 | [エラー] 列で [エラーを表示] をクリックして修正します。失敗したデータベースを移行ジョブから削除することもできます。 移行ジョブから失敗したデータベースを削除する方法の詳細については、移行ジョブを管理するをご覧ください。 |
レプリケーション スロットをクリーンアップする
次のいずれかのメッセージが表示されます。
Cleanup may have failed on source due to error: generic::unknown: failed to connect to on-premises database.Error promoting EM replica: finished drop replication with errors.
考えられる原因
AlloyDB インスタンスを昇格する際に、AlloyDB インスタンスからソース インスタンスにアクセスできない場合(ソース インスタンスが実行されていない場合や、ソース インスタンスの許可リストから AlloyDB インスタンスを削除した場合など)、移行ジョブの昇格中にレプリケーションに必要な設定をクリーンアップできません。レプリケーション スロットは手動でクリーンアップする必要があります。
次の方法をお試しください
データベースごとに、superuser 権限を持つユーザーとして次のコマンドを実行します。
エラー メッセージからレプリケーション スロット名を取得し、次のコマンドを実行してスロットを 1 つずつ削除します。
select pg_drop_replication_slot({slot_name});-
エラー メッセージにレプリケーション スロット名が表示されない場合は、次のコマンドを実行して既存のレプリケーション スロットをクエリします。
select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%alloydb%' and active = 'f';
-
ソース インスタンスを使用する AlloyDB レプリカがない場合は、次のコマンドを実行して
pglogical設定をクリーンアップします。select pglogical.drop_node(node_name) from pglogical.node where node_name like
'alloydb'; -
pglogical拡張機能が不要になった場合は、次のコマンドを実行して拡張機能をアンインストールします。DROP EXTENSION IF EXISTS pglogical;
ブートストラップ モードで孤立した AlloyDB クラスタを削除する
まれに、移行ジョブが削除されても、関連する AlloyDB クラスタが削除されず、ブートストラップ モードのままになっていることがあります。AlloyDB のクラスタ削除用の gcloud コマンドと --force オプションを組み合わせて使用すると、クラスタを削除できます。
移行ジョブで使用されているブートストラップ クラスタを削除すると、動作が未定義になることに注意してください。
ユーザーとロールを管理する
既存のユーザーを移行する
現在、Database Migration Service では、移行元インスタンスから移行先 AlloyDB インスタンスへの既存のユーザーの移行はサポートされていません。この移行を管理するには、AlloyDB でユーザーを手動で作成します。
alloydbexternalsync ユーザーについて
移行中、AlloyDB プライマリのすべてのオブジェクトは alloydbexternalsync ユーザーが所有します。データの移行後、次の手順を完了して、オブジェクトの所有権を他のユーザーに変更できます。
GRANT alloydbexternalsync to {USER}コマンドを実行します。- データベースごとに、
reassign owned by alloydbexternalsync to {USER};コマンドを実行します。 alloydbexternalsyncユーザーを削除するには、drop role alloydbexternalsyncコマンドを実行します。