次の方法で共有


Azure Database for PostgreSQL の移行サービスでの既知のエラー

この記事には、エラー メッセージ番号と、事前移行検証の説明が含まれています。

次の表に、Azure Database for PostgreSQL の移行サービス機能のエラー コードの包括的な一覧を示します。 これらのエラー コードは、移行プロセス中の問題のトラブルシューティングと解決に役立ちます。 各エラー コードには、問題を解決するためのコンテキストとガイダンスを提供するエラー メッセージとその他の詳細があります。

接続タイムアウト

現象

移行エラーは、多くの場合、接続の問題を示すエラー メッセージによって発生します。 これらの問題は、データ転送プロセス中に発生する可能性があります。 このようなエラーが発生すると、次のエラー メッセージが表示されます。

  • サーバーが予期せず接続を閉じた
  • SSL SYSCALL エラー: EOF が検出されました
  • クライアント接続での予期しない EOF
  • クライアントからデータを受信できませんでした: ピアによる接続のリセット

原因

これらの症状の根本的な原因は connection timeoutです。 これは一般に、サーバーまたはクライアントが特定の期間内にデータを受信することを想定しているが、データが送受信されなくなり、接続がタイムアウトになった場合に発生します。接続タイムアウトの具体的な理由はさまざまですが、一般的な要因としては、ネットワークの輻輳、ネットワーク設定の誤った構成、過度に積極的なタイムアウト設定などがあります。

Azure Database for PostgreSQL の移行サービスのコンテキストでは、ソースと移行サービス間、または移行サービスとターゲット間の接続タイムアウトによってデータ転送プロセスが中断され、上記の現象が発生する可能性があります。

解決方法

  • 接続タイムアウトの問題に対処するには、次のようにソース サーバーとターゲット サーバーの両方で TCP パラメーターを調整します。

    • tcp_keepalives_idle=10
    • tcp_keepalives_interval=10
    • tcp_keepalives_count=60

これらの設定は、非アクティブな状態によるタイムアウトを防ぐためにキープアライブ プローブを送信することで、接続を維持するのに役立ちます。 重要なのは、これらの TCP パラメーターを変更する場合、ソースまたはターゲット PostgreSQL インスタンスを再起動する必要はありません。 変更を動的に適用できるため、データベース操作を中断することなくサービスをシームレスに継続できます。

アイドル状態のトランザクションタイムアウトが原因で接続が終了しました

現象

  • 移行サービスで接続終了メッセージが表示されます。
  • ログには、 terminating connection due to idle-in-transaction timeoutというエラーが表示されます。

原因

このエラーは、 idle_in_transaction_timeout パラメーターで指定された値よりも長い間、トランザクション内でデータベース接続がアイドル状態のままである場合に発生します。 PostgreSQL は、リソースのロックの問題を回避するために、このような接続を自動的に終了します。

解決方法

  • 移行プロセス中にタイムアウトを無効にするには、 idle_in_transaction_timeout パラメーターを 0 に設定します。
  • この設定を適用するコマンドの例:
ALTER SYSTEM SET idle_in_transaction_timeout = 0;
  • データベースのパフォーマンスを維持し、アイドル接続の長期化を防ぐために、移行後にこのパラメーターを元の値にリセットしてください。

共有メモリの枯渇

現象

移行プロセスが予期せず停止します。 ログには、 out of shared memoryというエラーが表示されます。

原因

このエラーは、PostgreSQL がロックに割り当てられた共有メモリを使い果たしたことを示します。 これは通常、移行プロセスに、max_locks_per_transaction パラメーターの現在の設定を超える多くのロックが含まれている場合に発生します。

解決方法

  • 移行プロセス中に必要な別のロックに対応するために、 max_locks_per_transaction パラメーターの値を増やします。
  • この設定を変更するコマンドの例: ALTER SYSTEM SET max_locks_per_transaction = <<>>;
  • 次のことを確認します。 max_locks_per_transaction * max_connections > Number of tables + Number of indexes
  • 問題が解決しない場合は、ロック管理に十分な共有メモリを使用できるように、shared_buffers パラメーターを増やすことを検討してください。

移行エラー コード

エラー コード エラー メッセージ 解決方法
603000 接続できませんでした。 サーバー {serverName} への接続に失敗しました。 ソース サーバーがターゲット サーバーまたはランタイム サーバーから到達可能であることを確認します。 接続の問題のデバッグについては、 Network ガイド を参照してください。
603001 SSL 構成エラー。 サーバー {serverName} は SSL をサポートしていません。 SSL 設定を確認します。 SSL モードを prefer に設定し、移行を再試行します。 接続の問題のデバッグについては、 Network ガイド を参照してください。
603100 認証に失敗した。 サーバー {serverName} のパスワードが正しくありません。 正しいパスワードを入力し、移行を再試行します。 該当なし
603101 ターゲットにデータベースが存在します。 データベース {dbName} はターゲット サーバーに存在します。 ターゲット サーバーにデータベースがないことを確認し、移行を再試行します。 該当なし
603102 ソース データベースがありません。 データベース {dbName} がソース サーバーに存在しません。 有効なデータベースを指定し、移行を再試行します。 該当なし
603103 Microsoft Entra ロールがありません。 ターゲット サーバーに Microsoft Entra ロール {roleNames} がありません。 Entra ロールを作成し、移行を再試行します。 該当なし
603104 レプリケーション ロールがありません。 ユーザー {0} には、サーバー {1}のレプリケーション ロールがありません。 移行を再試行する前に、レプリケーション ロールを付与します。 ALTER ROLE <rolename> WITH REPLICATION;を使用して、必要なアクセス許可を付与します。
603105 GUC 設定エラー。 移行のためのソース サーバー上のレプリケーション スロットが不足しています。 max_replication_slots GUC パラメーターを{0}以上に増やします。 ソース サーバーには、オンライン移行を実行するための十分なレプリケーション スロットがありません。 このクエリ SELECT * FROM pg_replication_slots WHERE active = false AND slot_type = 'logical'; を使用して、非アクティブなレプリケーション スロットの一覧を取得し、移行を開始する前に SELECT pg_drop_replication_slot('slot_name'); を使用して削除します。 または、"max_replication_slots" サーバー パラメーターを {0} 以上に設定します。 max_wal_senders パラメーターも、max_replication_slots' parameter以上に変更されていることを確認します。
603106 GUC 設定エラー。 max_wal_senders GUC パラメーターは {0} に設定されます。 'max_replication_slots' 値と一致するか、それを超えているか確認します。 該当なし
603107 GUC 設定エラー。 ソース・サーバー WAL レベル・パラメーターが {0}に設定されています。 GUC パラメーター WAL レベルを '論理' に設定します。 該当なし
603108 拡張機能の許可リストが必要です。 拡張機能 {0} 許可リストに登録されていないため、ターゲット サーバーにインストールできませんでした。 拡張機能を許可リストに登録し、移行を再試行します。 許可リストを設定するには、 PostgreSQL 拡張機能で説明されている手順に従います。
603109 共有プリロード ライブラリの構成エラー。 許可リストに登録された拡張機能 {0} をターゲット サーバーの 'shared_preload_libraries' に追加し、移行を再試行します。 PostgreSQL 拡張機能で説明されている手順に従って、共有プリロード ライブラリを設定します。 これには、サーバーの再起動が必要です。
603110 特権が不十分です。 移行ユーザーには、データベース アクセスに必要なアクセス許可がありません。 移行ユーザーがソース データベースの所有者であり、読み取りと書き込みの両方の権限を持っていることを確認し、移行を再試行します。 該当なし
603111 ターゲット データベースのクリーンアップに失敗しました。 移行前フェーズ中にターゲット データベースのアクティブな接続を終了できません。 移行ユーザー pg_signal_backendロールを付与し、移行を再試行します。 'GRANT pg_signal_backend to <migration_user>' コマンドを使用して、移行ユーザーにpg_signal_backendロールを追加する
603112 GUC 設定エラー。 GUC パラメーター default_transaction_read_only off に設定できませんでした。 ユーザーの書き込みアクセスが適切に設定されていることを確認し、移行を再試行します。 Azure portal または psql コマンド (ALTER SYSTEM SET default_transaction_read_only = off など) を使用して、ソース サーバーで 'default_transaction_read_only' を OFF に設定します。
603113 カットオーバーエラー。 移行の状態が既に完了/失敗/取り消されているため、データベース '{dbName}' のカットオーバーを開始できません。 該当なし
603114 カットオーバーエラー。 オフライン移行モードでは、データベース '{dbName}' に対してカットオーバーを開始できません。 該当なし
603115 ユーザー特権がありません。 移行ユーザー '{0}' は、azure_pg_admin ロールのメンバーではありません。 ターゲット サーバーに必要な特権を追加し、移行を再試行します。 該当なし
603116 ユーザー特権がありません。 移行ユーザー '{0}' には、ロールの作成特権がありません。 ターゲット サーバーに必要な特権を追加し、移行を再試行します。 ターゲット サーバーでクエリ ALTER ROLE <rolename> WITH CREATEROLE; を実行します。
603117 ユーザー特権がありません。 移行ユーザー '{0}' には、ターゲット サーバー上の '{dbName}' データベースを削除するために必要な特権がありません。 ターゲット サーバーからデータベースを手動で削除し、移行を再試行します。 該当なし
603400 サポートされていないソース バージョン。 {0}以下の PostgreSQL バージョンの移行はサポートされていません。 別の移行方法を使用する必要があります。
603401 照合順序の不一致。 データベース {1}の照合順序{0}がターゲット サーバーに存在しません。 該当なし
603402 照合順序の不一致。 列{2}のテーブル {1}の照合順序{0}がターゲット サーバーに存在しません。 必要な照合順序を追加するには Microsoft サポートにお問い合わせください。
603403 照合順序の不一致。 ソース データベースには、ユーザー定義の照合順序が含まれています。 これらの照合順序を削除し、移行を再試行します。 該当なし
603404 サポートされていない OID が検出されました。 データベース {0}で 'WITH OID' が検出されたテーブル。 PostgreSQL バージョン 12 以降ではサポートされていません。 PostgreSQL のリリース ノートを参照してください。
603405 サポートされていない拡張機能。 移行サービスでは、ターゲット サーバー上の {0} 拡張機能を使用したデータベースの移行はサポートされていません。 該当なし
603406 サポートされていない拡張機能。 Target PostgreSQL {0} では、ソースの {1}と互換性のない POSTGIS バージョン 3.2.3 がサポートされています。 ターゲット サーバーをバージョン 11 にアップグレードすることをお勧めします。 PostGIS の破壊的変更にアクセスしてください
603407 拡張スキーマ エラー。 ソース サーバー上のシステム スキーマにある拡張機能 {0} は、ターゲット サーバーではサポートされていません。 非システム スキーマで拡張機能を削除して再作成してから、移行を再試行します。 PostgreSQL 拡張機能にアクセスしてください
603408 サポートされていない拡張機能。 ターゲット サーバー バージョン 16 では、 {0} 拡張機能はサポートされていません。 バージョン 15 以下に移行し、拡張機能がサポートされたらアップグレードします。 該当なし
603409 ユーザー定義のキャストが存在します。 ソース データベース {0} には、ターゲット サーバーに移行できないユーザー定義キャストが含まれています。 該当なし
603410 システム テーブルのアクセス許可エラー。 ユーザーは、ターゲットに移行できないpg_authidやpg_shadowなどのシステム テーブルにアクセスできます。 これらのアクセス許可を取り消し、移行を再試行します。 pg_authidpg_shadowなど、pg_catalogテーブル/ビューに付与される既定のアクセス許可の検証は不可欠です。 ただし、これらのアクセス許可をターゲットに割り当てることはできません。 具体的には、ユーザー {1}{2} アクセス許可を持ち、ユーザー {3}{4} アクセス許可を保持します。 回避策については、 User、Roles、および Permissions に関するセクションを参照してください。
603413 サポートされていない言語。 移行サービスでは、ターゲット サーバー上の {0} 言語を使用したデータベースの移行はサポートされていません。 言語とその実装された関数を削除します。 ターゲット サーバーは、サポートされていない言語をサポートしていません。 ターゲット サーバーに移行する前に、ソース サーバーでそれぞれの言語を無効にするか、削除してみてください。
603700 ターゲット データベースのクリーンアップに失敗しました。 移行前/移行後フェーズ中に、ターゲット データベースのアクティブな接続を終了できません。 該当なし
603701 内部サーバー エラーです。 ターゲット サーバーでロールを作成できませんでした。 詳細な分析については、Microsoft サポート にお問い合わせください。
603702 内部サーバー エラーです。 ソース サーバーからロールをダンプできませんでした。 詳細な分析については、Microsoft サポート にお問い合わせください。
603703 内部サーバー エラーです。 グローバル ロール ダンプ ファイルを編集できませんでした。 詳細な分析については、Microsoft サポート にお問い合わせください。
603704 内部サーバー エラーです。 すべてのソース ロールをターゲット移行ユーザーのメンバーにできませんでした。 詳細な分析については、Microsoft サポート にお問い合わせください。
603705 内部サーバー エラーです。 許可/取り消しを復元できませんでした。 詳細な分析については、Microsoft サポート にお問い合わせください。
603706 内部サーバー エラーです。 ターゲット サーバー移行ユーザーをクリーンアップできませんでした。 ターゲット移行ユーザーは、複数のロールに参加できます。 ターゲット サーバー移行ユーザーから不要なロールをすべて削除し、移行を再試行します。 詳細な分析については、Microsoft サポート にお問い合わせください。
603707 内部サーバー エラーです。 ソース サーバー管理者ユーザーにazure_pg_adminを付与できませんでした。 詳細な分析については、Microsoft サポート にお問い合わせください。
603708 内部サーバー エラーです。 パブリック スキーマの所有者を変更して、データベース '{dbName}' にazure_pg_adminできませんでした。 パブリック スキーマの所有者を手動でazure_pg_adminに変更し、移行を再試行します。 詳細な分析については、Microsoft サポート にお問い合わせください。
603709 移行のセットアップに失敗しました。 詳細な分析については、Microsoft サポート にお問い合わせください。