Résoudre les problèmes liés aux bases de données mises en miroir Fabric à partir d’un serveur flexible Azure Database pour PostgreSQL

Cet article décrit les étapes de résolution des problèmes de mise en miroir d’un serveur flexible Azure Database pour PostgreSQL.

Résoudre les erreurs / messages d’avertissement lors de la sélection de la table pour la mise en miroir

Lorsque vous créez une base de données mise en miroir, dans la page Choisir des données , vous pouvez recevoir des commentaires visuels concernant des tables spécifiques dans la base de données source. Le tableau suivant fournit une liste des problèmes potentiels, y compris le message affiché et la description associée sur la façon de résoudre le problème.

Code de statut Type d’état Message Descriptif
SCHEMA_DOES_NOT_EXIST ERROR Le schéma {} n’existe pas Le schéma donné n’existe pas. Il a pu être supprimé pendant que Fabric extrayait les informations de table pertinentes. Réessayez.
TABLE_DOES_NOT_EXIST ERROR Dans le schéma {}, la table {} n’existe pas. La table donnée n’existe pas. Il a pu être supprimé pendant que Fabric extrayait les informations de table pertinentes. Réessayez.
FORBIDDEN_CHARS_IN_COLUMN_NAME ERROR Le tableau {}.{} contient des caractères interdits dans le nom des colonnes {} La colonne spécifiée comporte un caractère non pris en charge dans son nom. 1
UNSUPPORTED_DATA_TYPE ERROR Table {}.{} a un type de données non pris en charge dans la colonne {} L’un (ou plusieurs) des colonnes de la table n’a actuellement pas de types de données pris en charge. 3
FORBIDDEN_CHARS_IN_TABLE_NAME ERROR Le tableau {}.{} contient des caractères interdits dans le nom Le nom de la table comporte des caractères non pris en charge. 1
NOT_REGULAR_TABLE ERROR Table {}.{} n’est pas une table normale Le type de table n’est pas pris en charge pour la mise en miroir. 2
HAS_PRIMARY_KEY Ok Table {}.{} a une clé primaire La table est une table normale et a une clé primaire valide utilisée pour la mise en miroir.
HAS_UNIQUE_INDEX Ok Table {}.{} a un index unique approprié La table n’a pas de clé primaire, mais a un index unique non nullable qui doit être utilisé pour la mise en miroir. Les index uniques nullables entraînent une erreur pendant la phase de réplication et ne sont pas pris en charge.
NO_INDEX_FULL_IDENTITY AVERTISSEMENT La table {}.{} n’a pas d’index unique approprié. Utilisation de l’identité complète La table n'a pas de clé primaire ni d'index unique, donc REPLICA IDENTITY FULL est nécessaire pour prendre en charge la mise en miroir, ce qui peut provoquer des problèmes de performances et augmenter l'utilisation de WAL.

1 Identificateurs d’objet avec un caractère d’espace (' ') ne sont pas pris en charge.

2 Ce type de tableau n’est pas pris en charge pour la mise en miroir. Actuellement, les vues, les vues matérialisées, les tables étrangères et les tables partitionnées ne sont pas prises en charge. Les hypertables TimescaleDB ne sont également pas prises en charge pour le mirroring Fabric.

3 Pour obtenir la liste des types de données non pris en charge, consultez Limitations. Seules les colonnes avec les types suivants sont prises en charge :

  • 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 (* pas comme clé primaire)
  • 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

Dans Postgres, deux valeurs « heure avec fuseau horaire » qui correspondent exactement au même moment, mais dans des fuseaux horaires différents, sont considérées comme distinctes. Par exemple : 06:24:00.59+05 et 05:24:00.59+04 correspondent au même temps d’époque, mais Postgres les traite différemment.

Les colonnes numériques non contraintes par défaut dans les schémas de base de données source (sans précision et échelle définies) sont converties en Decimal128(38, 0) avant d’être répliquées dans des tables OneLake, en alignant avec la convention standard SQL dont l’échelle non spécifiée signifie une précision entière.

Opérations de langage de définition de données (DDL) prises en charge sur la base de données source

  • Rename column : une colonne portant le nouveau nom est ajoutée à la table mise en miroir dans Fabric et contient des données pour les lignes nouvellement insérées (pour les lignes existantes sera NULL). L'ancienne colonne est toujours conservée avec des valeurs pour les lignes existantes (les nouvelles lignes ont des valeurs NULL).
  • Ajouter une colonne : la colonne ajoutée est visible dans la table mise en miroir et contient des données pour les lignes nouvellement insérées (pour les lignes existantes sont NULL).
  • Supprimer la colonne : la colonne supprimée reste visible dans la table mise en miroir et contient des données pour les lignes existantes (pour les nouvelles lignes sont NULL).
  • Modifier la clé primaire : la session de mise en miroir continue régulièrement.

Toute autre opération DDL sur les tables sources n’est actuellement pas prise en charge et peut entraîner des échecs de réplication.

Modifications de la capacité de Fabric ou de l’espace de travail

La cause Résultat Résolution recommandée
Capacité de la fabric mise en pause/supprimée Arrêt de la mise en miroir 1. Reprendre ou affecter une capacité à partir du portail Azure
2. Accédez à l’élément de base de données mise en miroir Fabric. Dans la barre d’outils, sélectionnez Arrêter la réplication.
3. Démarrez la réplication en sélectionnant la base de données miroir pour l’élément mis en miroir dans le portail Fabric.
Capacité du réseau rétablie La mise en miroir ne reprendra pas 1. Accédez à l’élément de base de données miroir Fabric. Dans la barre d’outils, sélectionnez Arrêter la réplication.
2. Démarrez la réplication en sélectionnant la base de données miroir pour l’élément mis en miroir dans le portail Fabric.
Espace de travail supprimé La mise en miroir s’arrête automatiquement Si la mise en miroir est toujours active sur le serveur flexible Azure Database pour PostgreSQL, connectez-vous à l’aide d’un administrateur de serveur et exécutez les commandes suivantes sur votre serveur PostgreSQL : select azure_cdc.list_tracked_publications();, utilisez le nom de publication retourné et exécutez select azure_cdc.stop_publication(<publication_name>);
La capacité d'essai du Fabric a expiré La mise en miroir s’arrête automatiquement Consultez l'expiration de la capacité d’essai Fabric.
Capacité du réseau dépassée Pauses de mise en miroir Attendez que l’état de surcharge soit terminé ou mettez à jour votre capacité. En savoir plus sur les actions que vous pouvez effectuer pour récupérer à partir de situations de surcharge. La mise en miroir se poursuit une fois la capacité récupérée.
Autres erreurs de ressources La mise en miroir est désactivée Pour vous assurer que vos ressources de calcul ne sont pas affectées et réduire l’impact sur le serveur flexible Azure Database pour PostgreSQL, la mise en miroir désactive les erreurs de ressources persistantes.
« Les utilisateurs peuvent accéder aux données stockées dans OneLake avec des applications externes à Fabric » désactivé « Réplicateur - Les tables ne peuvent pas atteindre l’état de réplication » Activez le paramètre Locataire Les utilisateurs peuvent accéder aux données stockées dans OneLake avec des applications externes à Fabric.

Requêtes SQL pour la résolution des problèmes

Si vous rencontrez des problèmes de mise en miroir, connectez-vous au serveur Azure Database pour PostgreSQL source et effectuez ces vérifications à l'aide des vues système et des fonctions pour valider la configuration.

  1. Exécutez la requête suivante pour vérifier si toutes les conditions préalables sont remplies avant de démarrer la mise en miroir CDC. Cette fonction vérifie les différentes exigences de système et de configuration pour vous assurer que le serveur est prêt pour les opérations de capture de données modifiées.
-- 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"}]

Retour:(status text, data jsonb)

  • status: État global : OK si toutes les vérifications passent, ERROR si une vérification échoue
  • data: tableau JSONB contenant des entrées d’état détaillées avec status, status_codeet facultatif details

Codes d’état :

Code de statut Level Descriptif
IDENTITÉ_NON_CONFIGURÉE ERROR Les informations d’identification du principal du service ne sont pas configurées (azure.service_principal_id ou azure.service_principal_tenant_id GUCs non définis)
RÔLE_ADMIN_CDC_INEXISTANT ERROR Le rôle azure_cdc_admin n’existe pas dans la base de données
UTILISATEUR_NON_ADMIN_CDC ERROR L’utilisateur actuel n’a pas le rôle azure_cdc_admin
AUCUN_PRIVILÈGE_DE_CRÉATION_DANS_LA_BASE_DE_DONNÉES ERROR L’utilisateur actuel n’a pas de privilège CREATE sur la base de données
LIMITE_DE_PUBLICATION_ATTEINTE ERROR Le nombre maximal de publications (1) a été atteint pour la base de données
SERVEUR_EN_RÉCUPÉRATION ERROR Le serveur est une réplique de secours en cours de récupération (la mise en miroir CDC n’est pas prise en charge sur les secours)
MAX_WORKER_PROCESSES_TOO_LOW ERROR max_worker_processes est inférieur au seuil recommandé (13)
  1. Exécutez la requête suivante pour vérifier si les tables de votre base de données source sont éligibles à la réplication. Exclut les schémas système (pg_catalog, information_schema, pg_toast) et les tables appartenant à l’extension.
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"}]

Renvoie: Ensemble de (table_schema text, table_name text, mirroring_status text, mirroring_data jsonb)

  • table_schema: Nom du schéma de la table
  • table_name: Nom de la table
  • mirroring_status: État global - OK, WARNINGou ERROR
  • mirroring_data: tableau JSONB contenant des entrées d’état détaillées avec status, status_codeet facultatif details

Codes d’état :

Code de statut Level Descriptif
SCHEMA_DOES_NOT_EXIST ERROR Le schéma spécifié n’existe pas
TABLE_N'EXISTE_PAS ERROR La table spécifiée n’existe pas dans le schéma
FORBIDDEN_CHARS_IN_COLUMN_NAME ERROR Les noms de colonnes contiennent des caractères interdits (par exemple, des espaces)
FORBIDDEN_CHARS_IN_TABLE_NAME ERROR Le nom de la table contient des caractères interdits
UNSUPPORTED_DATA_TYPE AVERTISSEMENT La table comporte des colonnes avec des types de données non pris en charge
UNSUPPORTED_TYPE_IN_REPLICA_IDENTITY ERROR Type de données non pris en charge dans les colonnes d'identité de réplique (en l'absence d'un index unique)
NOT_REGULAR_TABLE ERROR La table n’est pas une table régulière et permanente (par exemple, vue, temporaire, partition)
NON_PROPRIÉTAIRE_TABLE ERROR L’utilisateur actuel n’est pas le propriétaire de la table
A_CLÉ_PRIMAIRE Ok La table a une clé primaire
HAS_UNIQUE_INDEX Ok La table a un index unique approprié
NO_INDEX_FULL_IDENTITY AVERTISSEMENT Aucun index unique approprié ; l’identité de ligne complète sera utilisée (peut affecter les performances)
  1. Exécutez la requête suivante pour retourner des erreurs et des problèmes détectés pendant les opérations de réplication, notamment les erreurs à l’échelle du système, les erreurs spécifiques à la publication et les erreurs par table.
-- 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');

Paramètres :

  • db_name (texte) : Nom de la base de données
  • pub_name (texte) : Nom de la publication

Comportement:

  • Lorsqu’elle est appelée avec des chaînes vides pour les deux paramètres (azure_cdc.get_health_status('', '')) : renvoie uniquement les erreurs à l’échelle du système (type d’erreur « S »).
  • Lorsqu’elle est appelée avec des noms de base de données et de publication valides : retourne les erreurs à l’échelle du système et les erreurs spécifiques à la table/publication pour la publication spécifiée.

Renvoie: Ensemble de (error_time timestamptz, schema_name text, table_name text, error_type char(1), error_code text, params jsonb)

Types d’erreurs :

Type d’erreur Descriptif
S Erreur à l’échelle du système
P Erreur spécifique à la publication
T Erreur spécifique à la table

Codes d’erreur :

Code d’erreur Catégorie Descriptif
ERREUR_CDC_SYS_NOMBRE_MAXIMAL_DE_TRAVAILLEURS_ATTEINT S Nombre maximal de travailleurs atteints
CDC_ERR_SYS_MAX_NUMBER_OF_PUBLICATIONS_REACHED: Nombre maximal de publications atteint. S Nombre maximal de publications pour la base de données atteinte
CDC_ERR_SYS_ONELAKE_AUTORISATION_REFUSÉE S Autorisation refusée pour l’action OneLake
CDC_ERR_SYS_ONELAKE_ARTIFACT_DOES_NOT_EXIST (L'artefact OneLake n'existe pas) S Artefact OneLake introuvable
CDC_ERR_SYS_ONELAKE_COMM_FAILED S Échec de la communication OneLake
CDC_ERR_SYS_ONELAKE_BAD_REQUEST S Demande incorrecte à OneLake
CDC_ERR_PUB_SNAPSHOT_TIMEOUT P Instantané non prêt après dépassement du délai
CDC_ERR_PUB_SNAPSHOT_WORKER_TIMEOUT P Délai de timeout du processus de capture instantanée pour une table spécifique
CDC_ERR_PUB_ONELAKE_PERMISSION_DENIED P Autorisation refusée pour l'opération OneLake
CDC_ERR_PUB_ONELAKE_ARTIFACT_DOES_NOT_EXIST P Artéfact OneLake introuvable
CDC_ERR_PUB_ONELAKE_COMM_FAILED P Échec de la communication avec OneLake
ERREUR_CDC_NB_MAX_DES_TRAVAILLEURS_ATTEINT P Nombre maximal de travailleurs atteint pour la publication
CDC_ERR_PUB_ONELAKE_BAD_REQUEST P Demande incorrecte à OneLake
CDC_ERR_PUB_TROP_D_ERREURS P Trop d’erreurs lors du traitement de la publication
CDC_ERR_TABLE_TRUNCATE_NOT_SUPPORTED T Opération de troncature non prise en charge (peut causer une incohérence de données)
  1. Exécutez la requête suivante pour vérifier si la publication est créée correctement et que la réplication change correctement le flux :

    select * from azure_cdc.tracked_publications;
    

    Vérifiez si la publication est active et que l’instantané a été généré. Vous pouvez également vérifier si les lots de modifications suivants ont été générés en interrogeant :

    select * from azure_cdc.tracked_batches;
    
  2. Si la azure_cdc.tracked_publications vue n’affiche aucune progression lors du traitement des modifications incrémentielles, exécutez la requête SQL suivante pour vérifier s’il existe des problèmes signalés :

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    
  3. Si aucun problème n’est signalé, exécutez la commande suivante pour passer en revue la configuration actuelle de la base de données PostgreSQL mise en miroir. Confirmez qu'il a bien été activé.

    SELECT * FROM pg_replication_slots;
    

    Les colonnes clés à rechercher ici sont les slot_name et active. Toute valeur en plus t (true) indique un problème potentiel.

  4. Contactez le support si un dépannage est nécessaire.

Identité managée

L'identité managée affectée par le système (SAMI) du serveur flexible Azure Database pour PostgreSQL doit être activée en tant qu'identité principale. Pour plus d’informations, consultez l’identité managée affectée par le système pour le serveur flexible PostgreSQL.

Après l’activation, si l’état du paramètre SAMI est désactivé ultérieurement, puis réactivé, la mise en miroir du serveur flexible Azure Database pour PostgreSQL vers Fabric OneLake échoue.

Vérifiez que le SAMI est activé avec la requête suivante : show azure.service_principal_id;

Autorisations SAMI

Ne supprimez pas les autorisations de contributeur SAMI (System Assigned Managed Identity) du serveur flexible Azure Database pour PostgreSQL sur l’élément de base de données mis en miroir Fabric.

Si vous supprimez accidentellement les autorisations SAMI, la mise en miroir d’un serveur flexible Azure Database pour PostgreSQL ne fonctionne pas comme prévu. Aucune nouvelle donnée ne peut être mise en miroir à partir de la base de données source.

Si vous supprimez les autorisations SAMI du serveur flexible Azure Database pour PostgreSQL ou que les autorisations ne sont pas configurées correctement, procédez comme suit.

  1. Ajoutez le serveur flexible SAMI en tant qu'utilisateur en sélectionnant l’option ... d’ellipse sur l’élément de base de données miroir.
  2. Sélectionnez l’option Gérer les autorisations .
  3. Entrez le nom du serveur flexible Azure Database pour PostgreSQL. Fournissez des autorisations de lecture et d’écriture .