Partager via


Le travail de capture cdc échoue lors du traitement des modifications d’une table avec le type de données CLR système (géométrie, géographie ou hierarchyid)

Cet article vous aide à contourner le problème où un travail de capture de données modifiées échoue lorsque vous traitez les modifications d’une table qui a un type de données CLR système (géométrie, géographie ou hierarchyid).

S'applique à : SQL Server
Numéro de base de connaissances d’origine : 4538384

Symptômes

Examinez le cas suivant :

  • Vous activez la fonctionnalité Capture de données modifiées (CDC) sur une table qui a un type de données CLR système, tel que geometry, geography ou hierarchyid.
  • Le travail de capture cdc (analyse) traite les modifications liées à d’autres tables. Le processus n’a pas encore atteint la table qui a le type de données CLR système.
  • Vous apportez des modifications DML (Data Manipulation Language) sur la table qui a le type de données CLR système. Ensuite, vous apportez des modifications au langage DDL (Data Definition Language) sur la même table (par exemple, vous ajoutez une colonne).

Dans ce scénario, lorsque le travail de capture cdc démarre le traitement de la table avec le type de données CLR système, il échoue et retourne le message d’erreur suivant :

Msg 18805, Level 16, State 1, Procedure sp_replcmds, LineLineNumber[Batch Start LineNumber ]
Le processus d’analyse du journal n’a pas pu construire une commande répliquée à partir du numéro de séquence de journaux (LSN) {nnnnnnnn : nnnnnnnn : nnnn}. Sauvegardez la base de données de publication et contactez le support technique.
Msg 22859, Level 16, State 2, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
Le processus d'analyse du journal n'a pas réussi à traiter les enregistrements de journal. Reportez-vous aux erreurs précédentes de la session active afin d'en identifier la cause et de corriger les problèmes associés.
Msg 3621, Level 16, State 6, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
L’instruction a été arrêtée.
Msg 22864, Level 16, State 1, Procedure sp_MScdc_capture_job, LineNumber[Batch Start LineNumber]
L’appel à sp_MScdc_capture_job par le travail de capture pour la base de données « DatabaseName » a échoué. Consultez les erreurs précédentes pour connaître la cause de l'échec.

En outre, l’entrée suivante peut être consignée dans le journal des erreurs :

Erreur : 913, Gravité : 16, État : 16. Impossible de trouver IDID de base de données. La base de données n'a peut-être pas encore été activée ou elle est en transition. Réexécutez la requête dès que la base de données est disponible. Si vous ne pensez pas que cette erreur est due à une base de données qui effectue la transition de son état et que cette erreur persiste.

Plus d’informations

Ce problème ne se produit pas si le travail de capture cdc traite initialement uniquement le DML, puis traite la modification DDL lors de l’exécution suivante.

Solution de contournement

Pour contourner ce problème, essayez l’une des méthodes suivantes :

  • Évitez d’utiliser les types de données problématiques (géométrie, géographie, hierarchyid) avec cdc.

  • Assurez-vous que vous n’avez aucune modification DML inflérante lorsque vous apportez des modifications DDL sur des tables qui ont des types de données geometry, geography ou hierarchyid. Pour éviter ce problème, procédez comme suit :

    1. Quittez toutes les DML à la table.
    2. Exécutez un travail de capture pour traiter les modifications.
    3. Exécutez DDL pour la table.
    4. Exécutez un travail de capture pour traiter les modifications DDL.
    5. Réactivez le traitement DML.

    Note

    Si vous continuez à rencontrer ce problème, désactivez et réactivez la capture de données modifiées sur la table.