Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
bigintbigserialbooleanbyteacharactercharacter varyingdatedouble precisionintegernumericrealserialoidmoneysmallintsmallserialtexttime without time zone-
time with time zone(* pas comme clé primaire) timestamp without time zonetimestamp with time zoneuuidxmljsonjsonbinetcidrmacaddrmacaddr8tsvectortsqueryint4rangeint8rangenumrangetsrangetstzrangedaterangecirclelinelsegboxpathpointpolygoninterval
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.
- 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 :OKsi toutes les vérifications passent,ERRORsi une vérification échoue -
data: tableau JSONB contenant des entrées d’état détaillées avecstatus,status_codeet facultatifdetails
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) |
- 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,WARNINGouERROR -
mirroring_data: tableau JSONB contenant des entrées d’état détaillées avecstatus,status_codeet facultatifdetails
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) |
- 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) |
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;Si la
azure_cdc.tracked_publicationsvue 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';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_nameetactive. Toute valeur en plust(true) indique un problème potentiel.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.
- 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. - Sélectionnez l’option Gérer les autorisations .
- Entrez le nom du serveur flexible Azure Database pour PostgreSQL. Fournissez des autorisations de lecture et d’écriture .