Azure Database for PostgreSQL フレキシブル サーバーにおけるファブリック ミラー化データベースのトラブルシューティング

この記事では、Azure Database for PostgreSQL フレキシブル サーバーをミラーリングするためのトラブルシューティング手順について説明します。

ミラーリングのテーブル選択中のエラー/警告メッセージのトラブルシューティング

ミラー化された新しいデータベースを作成すると、[ データの選択 ] ページで、ソース データベース内の特定のテーブルに関する視覚的なフィードバックを受け取ることがあります。 次の表に、表示されるメッセージや問題の解決方法に関する関連する説明など、潜在的な問題の一覧を示します。

状態コード 状態の種類 メッセージ Description
SCHEMA_DOES_NOT_EXIST エラー スキーマ {} が存在しません 指定されたスキーマが存在しません。 Fabric が関連するテーブル情報をプルしている間に削除された可能性があります。 再試行してください。
TABLE_DOES_NOT_EXIST エラー スキーマ {}では、テーブル {} は存在しません。 指定されたテーブルが存在しません。 Fabric が関連するテーブル情報をプルしている間に削除された可能性があります。 再試行してください。
FORBIDDEN_CHARS_IN_COLUMN_NAME エラー テーブル {}.{} には、列の名前に禁止文字が含まれています {} 指定された列の名前にサポートされていない文字が含まれます。 1
UNSUPPORTED_DATA_TYPE エラー テーブル {}.{} の列のデータ型がサポートされていません {} テーブルの列の 1 つ (または複数) には、現在サポートされていないデータ型があります。 3
FORBIDDEN_CHARS_IN_TABLE_NAME エラー テーブル {}.{} に名前に禁止文字が含まれています テーブル名にサポートされていない文字があります。 1
NOT_REGULAR_TABLE エラー Table {}.{} が通常のテーブルではありません テーブルタイプは、ミラーリングではサポートされていません。 2
HAS_PRIMARY_KEY [OK] Table {}.{} には主キーがあります テーブルは通常のテーブルであり、ミラーリングに使用される有効な主キーを持ちます。
HAS_UNIQUE_INDEX [OK] Table {}.{} には、適切な一意のインデックスがあります テーブルには主キーはありませんが、ミラーリングに使用する null 非許容 の一意インデックスがあります。 Null を許容する一意インデックスはレプリケーション フェーズ中にエラーを引き起こし、サポートされていません。
NO_INDEX_FULL_IDENTITY 警告 Table {}.{} には、適切な一意のインデックスがありません。 完全な ID の使用 テーブルには主キーまたは一意のインデックスがないため、ミラーリングをサポートするには REPLICA IDENTITY FULL が必要です。これにより、パフォーマンスの問題や追加の WAL の使用が発生する可能性があります。

スペース (' ') 文字を持つ 1 つのオブジェクト識別子はサポートされていません。

2 このテーブルの種類は、ミラーリングではサポートされていません。 現在、ビュー、マテリアライズドビュー、外部テーブル、パーティションテーブルはサポートされていません。 timescaleDB ハイパーテーブルは、Fabric ミラーリングでもサポートされていません。

3 サポートされていないデータ型の一覧については、「 制限事項」を参照してください。 次の型の列のみがサポートされています。

  • bigint
  • bigserial
  • boolean
  • bytea
  • character
  • character varying
  • date
  • double precision
  • integer
  • numeric
  • real
  • serial
  • oid
  • money
  • smallint
  • smallserial
  • text
  • time without time zone
  • time with time zone (* 主キーではありません)
  • timestamp without time zone
  • timestamp with time zone
  • uuid
  • xml
  • json
  • jsonb
  • inet
  • cidr
  • macaddr
  • macaddr8
  • tsvector
  • tsquery
  • int4range
  • int8range
  • numrange
  • tsrange
  • tstzrange
  • daterange
  • circle
  • line
  • lseg
  • box
  • path
  • point
  • polygon
  • interval

Postgres では、まったく同じ瞬間に対応する 2 つの "タイム とタイム ゾーン" の値が異なると見なされます。 たとえば、 06:24:00.59+0505:24:00.59+04 は同じエポック時間に対応しますが、Postgres ではそれらを異なる方法で処理します。

ソース データベース スキーマの既定の制約のない数値列 (定義された有効桁数と小数点以下桁数なし) は、OneLake テーブルにレプリケートされる前に Decimal128(38, 0) に変換され、指定されていない小数点以下桁数が整数精度を意味する SQL 標準規則に準拠します。

ソース データベースでサポートされるデータ定義言語 (DDL) 操作

  • Rename column: 新しい名前の列がFabricのミラー化されたテーブルに追加され、新しく挿入された行のデータが含まれます (既存の行の場合は NULL になります)。 古い列は、既存の行の値で保持されます (新しい行の場合は NULL です)。
  • 列の追加: 追加された列はミラー化されたテーブルに表示され、新しく挿入された行のデータが含まれます (既存の行の場合は NULL です)。
  • 列の削除: 削除された列はミラー化されたテーブルに引き続き表示され、既存の行のデータが含まれます (新しい行の場合は NULL です)。
  • 主キーの変更: ミラーリング セッションは定期的に続行されます。

ソース テーブルに対するその他の DDL 操作は現在サポートされていないため、レプリケーションエラーが発生する可能性があります。

Microsoft Fabric の容量またはワークスペースの変更

原因 結果 推奨される解決方法
ファブリック容量の一時停止/削除 ミラーリングが停止する 1. Azure portal から容量を再開または割り当てる
2. ファブリック ミラー化データベース項目に移動します。 ツール バーの [ レプリケーションの停止] を選択します。
3. ファブリック ポータルでミラー化された項目の ミラー データベース を選択して、レプリケーションを開始します。
ファブリック容量が復元されました ミラーリングは再開されません 1. ファブリック ミラー化されたデータベース項目に移動します。 ツール バーの [ レプリケーションの停止] を選択します。
2. ファブリック ポータルでミラー化された項目の ミラー データベース を選択して、レプリケーションを開始します。
ワークスペースが削除されました ミラーリングが自動的に停止する Azure Database for PostgreSQL フレキシブル サーバーでミラーリングがまだアクティブな場合は、サーバー管理者を使用して接続し、PostgreSQL サーバーで次のコマンドを実行します。 select azure_cdc.list_tracked_publications();、返されたパブリケーション名を使用して実行します。 select azure_cdc.stop_publication(<publication_name>);
ファブリック試用版の容量が期限切れになりました ミラーリングが自動的に停止する 「Fabric 試用版の容量の有効期限が切れる」を参照してください。
ファブリックの容量が超過しました ミラーリングの一時停止 オーバーロード状態が終了するか、容量を更新するまで待ちます。 オーバーロードの状況から復旧するために実行できるアクションの詳細を確認します。 容量が復旧されると、ミラーリングは続行されます。
その他のリソース エラー ミラーリングが無効になっている コンピューティング リソースが影響を受けないようにし、Azure Database for PostgreSQL フレキシブル サーバーへの影響を最小限に抑えるために、ミラーリングでは永続的なリソース エラーが無効になります。
"ユーザーは、Fabric 外部のアプリで OneLake に格納されているデータにアクセスできます" 設定が無効になっている "レプリケーター - テーブルがレプリケート状態に到達できません" ユーザーが Fabricの外部のアプリで OneLake に格納されているデータにアクセスできる テナント設定を有効にします。

トラブルシューティングのための SQL クエリ

ミラーリングの問題が発生している場合は、ソース Azure Database for PostgreSQL サーバーに接続し、システム ビューと関数を使用してこれらのチェックを実行して構成を検証します。

  1. CDC ミラーリングを開始する前に、次のクエリを実行して、すべての前提条件が満たされているかどうかを検証します。 この関数は、さまざまなシステム要件と構成要件をチェックして、サーバーが CDC 操作の準備ができていることを確認します。
-- Check if all prerequisites are met
SELECT * FROM azure_cdc.check_prerequisites();

-- Example output when all checks pass (on mock mode with identity configured):
 status |                                                               data
--------+----------------------------------------------------------------------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "details": {"current_value": "12", "required_value": "13"}, "status_code": "MAX_WORKER_PROCESSES_TOO_LOW"}]

-- Example output on standby replica:
 status |                                               data
--------+---------------------------------------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "status_code": "SERVER_IN_RECOVERY"}]

-- Example output when identity not configured:
 status |                                data
--------+---------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "status_code": "IDENTITY_NOT_CONFIGURED"}]

戻り値:(status text, data jsonb)

  • status: 全体的な状態 - すべてのチェックが成功した場合に OK し、いずれかのチェックが失敗した場合に ERROR します
  • data: statusstatus_code、および省略可能な詳細な状態エントリを含む JSONB 配列 details

状態コード:

状態コード レベル Description
IDが構成されていません エラー サービス プリンシパルの資格情報が構成されていない (azure.service_principal_id または azure.service_principal_tenant_id GUC が設定されていない)
CDC_ADMIN_ROLE_NOT_EXISTS エラー azure_cdc_admin ロールがデータベースに存在しません
USER_NOT_CDC_ADMIN (ユーザーはCDC管理者ではありません) エラー 現在のユーザーがazure_cdc_adminロールを持っていない
データベースの作成権限がありません エラー 現在のユーザーがデータベースに対する CREATE 権限を持たない
公開制限に達しました エラー データベースのパブリケーションの最大数 (1) に達しました
サーバー復旧中 エラー サーバーは復旧モードのスタンバイ レプリカです (CDC ミラーリングはスタンバイではサポートされていません)
MAX_WORKER_PROCESSES_TOO_LOW エラー max_worker_processesが推奨しきい値を下回る (13)
  1. 次のクエリを実行して、ソース データベース内のテーブルがレプリケーションの対象であるかどうかを検証します。 システム スキーマ (pg_cataloginformation_schemapg_toast) と拡張機能所有のテーブルを除外します。
SELECT * FROM azure_cdc.get_all_tables_mirror_status();
 table_schema | table_name | mirroring_status |                      mirroring_data
--------------+------------+------------------+------------------------------------------------------
 public       | customers  | OK               | [{"status": "OK", "status_code": "HAS_PRIMARY_KEY"}]
 public       | orders     | OK               | [{"status": "OK", "status_code": "HAS_UNIQUE_INDEX"}]
 public       | logs       | WARNING          | [{"status": "WARNING", "status_code": "NO_INDEX_FULL_IDENTITY"}]

返されるもの:(table_schema text, table_name text, mirroring_status text, mirroring_data jsonb)のセット

  • table_schema: テーブルのスキーマ名
  • table_name: テーブルの名前
  • mirroring_status: 全体的な状態 - OKWARNING、または ERROR
  • mirroring_data: statusstatus_code、および省略可能な詳細な状態エントリを含む JSONB 配列 details

状態コード:

状態コード レベル Description
スキーマが存在しません エラー 指定されたスキーマが存在しません
テーブルが存在しません エラー 指定したテーブルがスキーマに存在しません
FORBIDDEN_CHARS_IN_COLUMN_NAME(列名で禁止されている文字) エラー 列名に禁止文字 (スペースなど) が含まれている
FORBIDDEN_CHARS_IN_TABLE_NAME エラー テーブル名に禁止文字が含まれている
UNSUPPORTED_DATA_TYPE 警告 テーブルにサポートされていないデータ型の列がある
UNSUPPORTED_TYPE_IN_REPLICA_IDENTITY(レプリカIDにサポートされていないタイプ) エラー レプリカ ID 列でサポートされていないデータ型 (一意のインデックスが存在しない場合)
NOT_REGULAR_TABLE エラー テーブルは、通常の永続的なテーブルではありません (例: ビュー、一時的テーブル、パーティションテーブル)
テーブルの所有者ではありません エラー 現在のユーザーがテーブルの所有者ではない
主キーがある [OK] テーブルに主キーがある
ユニークインデックスを持つ [OK] テーブルに適切な一意のインデックスがある
NO_INDEX_FULL_IDENTITY 警告 適切な一意のインデックスはありません。完全な行 ID が使用されます (パフォーマンスに影響する可能性があります)
  1. 次のクエリを実行して、システム全体のエラー、パブリケーション固有のエラー、テーブルごとのエラーなど、レプリケーション操作中に検出されたエラーと問題を返します。
-- Get only system-wide errors
SELECT * FROM azure_cdc.get_health_status('', '');

-- Get system-wide errors and publication-specific errors
SELECT * FROM azure_cdc.get_health_status('my_database', 'my_publication');

パラメーター:

  • db_name (テキスト): データベース名
  • pub_name (テキスト): パブリケーション名

動作:

  • 両方のパラメーター (azure_cdc.get_health_status('', '')) の空の文字列で呼び出された場合: システム全体のエラー (エラーの種類 'S') のみを返します。
  • 有効なデータベース名とパブリケーション名で呼び出された場合: 指定されたパブリケーションのシステム全体のエラーとパブリケーション/テーブル固有のエラーの両方を返します。

返されるもの:(error_time timestamptz, schema_name text, table_name text, error_type char(1), error_code text, params jsonb) のセット

エラーの種類:

エラーの種類 Description
S システム全体のエラー
P パブリケーション固有のエラー
T テーブル固有のエラー

エラー コード:

エラー コード タイプ Description
CDC_ERR_SYS_MAX_NUMBER_OF_WORKERS_REACHED: システムのワーカー数の最大値に達しました。 S 最大のワーカー数に達しました
CDC_ERR_SYS 最大公開数に達しました S データベースのパブリケーションの最大数に達しました
CDC_ERR_SYS_ONELAKE_PERMISSION_DENIED - 権限が拒否されました S OneLake 操作の権限が拒否されました
CDC_ERR_SYS_ONELAKE_ARTIFACT_DOES_NOT_EXIST S OneLake アーティファクトが見つかりません
CDC_ERR_SYS_ONELAKE_COMM_FAILED S OneLake 通信に失敗しました
CDC_ERR_SYS_ONELAKE_BAD_REQUEST S OneLake への不適切な要求
CDC_ERR_PUB_SNAPSHOT_TIMEOUT P タイムアウト後にスナップショットの準備ができていない
CDC_ERR_PUB_SNAPSHOT_WORKER_TIMEOUT(CDCのスナップショットワーカーのタイムアウトエラー) P 特定のテーブル用スナップショットワーカーのタイムアウト
CDC_ERR_PUB_ONELAKE_許可が拒否されました P OneLake アクションのアクセス許可が拒否されました
CDC_ERR_PUB_ONELAKE_ARTIFACT_DOES_NOT_EXIST P OneLake アーティファクトが見つかりません
CDC_ERR_PUB_ONELAKE_COMM_FAILED P OneLake 通信に失敗しました
作業者の最大数に達しました (CDC_ERR_PUB_MAX_NUMBER_OF_WORKERS_REACHED) P 公開のためのワーカー数が最大に達しました
CDC_ERR_PUB_ONELAKE_BAD_REQUEST P OneLake への不適切な要求
CDC_ERR_PUB_TOO_MANY_ERRORS(エラーが多すぎます) P パブリケーション処理中にエラーが多すぎます
CDC_ERR_TABLE_TRUNCATE_NOT_SUPPORTED T 切り捨て操作がサポートされていません (データの不整合が発生する可能性があります)
  1. 次のクエリを実行して、パブリケーションが正しく作成され、レプリケーションの変更が正しくフローしているかどうかを確認します。

    select * from azure_cdc.tracked_publications;
    

    パブリケーションがアクティブで、スナップショットが生成されているかどうかを確認します。 次のクエリを実行して、後続の変更バッチが生成されたかどうかを確認することもできます。

    select * from azure_cdc.tracked_batches;
    
  2. azure_cdc.tracked_publications ビューに増分変更の処理の進行状況が表示されない場合は、次の SQL クエリを実行して、問題が報告されているかどうかを確認します。

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    
  3. 報告された問題がない場合は、次のコマンドを実行して、ミラー化された PostgreSQL データベースの現在の構成を確認します。 正しく有効になっていることを確認します。

    SELECT * FROM pg_replication_slots;
    

    ここで探すキー列は slot_nameactive です。 t (true) 以外の値は、潜在的な問題を示します。

  4. トラブルシューティングが必要な場合は、サポートにお問い合わせください

マネージド ID

Azure Database for PostgreSQL フレキシブル サーバーのシステム割り当てマネージド ID (SAMI) を有効にする必要があり、プライマリ ID である必要があります。 詳細については、「 PostgreSQL フレキシブル サーバーのシステム割り当てマネージド ID」を参照してください。

有効化後、SAMI 設定の状態が後で無効になった後で再度有効になった場合、Azure Database for PostgreSQL フレキシブル サーバーから Fabric OneLake へのミラーリングは失敗します。

次のクエリで SAMI が有効になっていることを確認します。 show azure.service_principal_id;

「SAMI」のアクセス許可

Azure Database for PostgreSQL フレキシブル サーバーのシステム割り当てマネージド ID (SAMI) の共同作成者権限を、ファブリック ミラー化されたデータベース項目から削除しないでください。

SAMI アクセス許可を誤って削除した場合、Azure Database for PostgreSQL フレキシブル サーバーのミラーリングは想定どおりに機能しません。 ソース データベースから新しいデータをミラー化することはできません。

Azure Database for PostgreSQL フレキシブル サーバー SAMI のアクセス許可を削除した場合、またはアクセス許可が正しく設定されていない場合は、次の手順を使用します。

  1. ミラー化されたデータベース項目の ... 省略記号オプションを選択して、フレキシブル サーバー SAMI をユーザーとして追加します。
  2. [ アクセス許可の管理] オプションを選択します。
  3. Azure Database for PostgreSQL フレキシブル サーバーの名前を入力します。 読み取りと書き込みのアクセス許可を指定します。