Partager via


Échec du travail de capture cdc lors du traitement des modifications d’une table avec le type de données CLR système (geometry, geography ou hierarchyid)

Cet article vous aide à contourner le problème où un travail de capture cdc échoue lorsque vous traitez des modifications pour une table qui a un type de données CLR système (geometry, geography ou hierarchyid).

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

Symptômes

Prenons l’exemple du scénario 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 commence à traiter la table qui a le type de données CLR système, il échoue et retourne le message d’erreur suivant :

Msg 18805, niveau 16, état 1, sp_replcmds de procédure, LineLineNumber[Numéro de ligne de début de lot ]
Le processus Log-Scan n’a pas pu construire une commande répliquée à partir du numéro séquentiel du journal (LSN) {nnnnnnnn : nnnnnnnn : nnnn}. Sauvegardez la base de données de publication et contactez le service de support technique.
Msg 22859, Niveau 16, État 2, Procédure sp_replcmds, LineNumber [Numéro de ligne de début du lot ]
Le processus d’analyse des journaux a échoué dans le traitement des enregistrements de journal. Reportez-vous aux erreurs précédentes de la session active pour en identifier la cause et corriger les problèmes associés.
Msg 3621, Level 16, State 6, Procedure sp_replcmds, LineNumber [Batch Start Line LineNumber ]
L’instruction a été interrompue.
Msg 22864, Level 16, State 1, Procedure sp_MScdc_capture_job, Line LineNumber[Batch Start Line LineNumber ]
L’appel à sp_MScdc_capture_job par le travail de capture pour la base de données « DatabaseName » a échoué. Examinez 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. ID de base de données introuvable. Il est possible que la base de données ne soit pas encore activée ou qu’elle soit en transition. Réexécutez la requête une fois 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 continue de se produire.

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 (geometry, geography, hierarchyid) avec CDC.

  • Assurez-vous que vous n’avez aucune modification DML en mode inlight 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 tous les fichiers DML dans 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.

    Remarque

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