Share via


Il processo di acquisizione CDC non riesce durante l'elaborazione delle modifiche per una tabella con tipo di dati CLR di sistema (geometria, geografia o hierarchyid)

Questo articolo consente di risolvere il problema in cui un processo di acquisizione CDC ha esito negativo quando si elaborano le modifiche per una tabella con un tipo di dati CLR di sistema (geometria, geografia o hierarchyid).

Si applica a: SQL Server
Numero KB originale: 4538384

Sintomi

Considerare lo scenario descritto di seguito:

  • È possibile abilitare la funzionalità Change Data Capture (CDC) in una tabella con tipo di dati CLR di sistema, ad esempio geometry, geography o hierarchyid.
  • Il processo di acquisizione CDC (analisi) sta elaborando le modifiche correlate ad altre tabelle. Il processo non ha ancora raggiunto la tabella con tipo di dati CLR di sistema.
  • Si apportano alcune modifiche DML (Data Manipulation Language) nella tabella con tipo di dati CLR di sistema. Quindi, si apportano modifiche DDL (Data Definition Language) nella stessa tabella (ad esempio, si aggiunge una colonna).

In questo scenario, quando il processo di acquisizione CDC avvia l'elaborazione della tabella con il tipo di dati CLR di sistema, ha esito negativo e restituisce il messaggio di errore seguente:

Msg 18805, Level 16, State 1, Procedure sp_replcmds, LineLineNumber[Batch Start LineNumber ]
Il processo di Log-Scan non è riuscito a costruire un comando replicato dal numero di sequenza del log (LSN) {nnnnnnnn: nnnnnnnn: nnnn}. Eseguire il backup del database di pubblicazione e contattare il Servizio Supporto Tecnico Clienti.
Msg 22859, Level 16, State 2, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
Il processo di analisi dei log non è riuscito nell'elaborazione dei record di log. Fare riferimento agli errori precedenti nella sessione corrente per identificare la causa e correggere eventuali problemi associati.
Msg 3621, Level 16, State 6, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
L'istruzione è stata terminata.
Msg 22864, Level 16, State 1, Procedure sp_MScdc_capture_job, LineNumber[Batch Start LineNumber ]
La chiamata a sp_MScdc_capture_job dal processo di acquisizione per il database 'DatabaseName' non è riuscita. Esaminare gli errori precedenti per individuare la causa dell'errore.

Inoltre, nel log degli errori potrebbe essere registrata la voce seguente:

Errore: 913, Gravità: 16, Stato: 16. Impossibile trovare l'ID del database. Il database potrebbe non essere ancora attivato o essere in transizione. Rieseguire la query quando il database è disponibile. Se non si ritiene che questo errore sia dovuto a un database che ne sta eseguendo la transizione e questo errore continua a verificarsi.

Ulteriori informazioni

Questo problema non si verifica se il processo di acquisizione CDC elabora inizialmente solo DML e quindi elabora la modifica DDL all'esecuzione successiva.

Soluzione alternativa

Per risolvere questo problema, provare uno dei metodi seguenti:

  • Evitare di usare i tipi di dati problematici (geometry, geography, hierarchyid) insieme a CDC.

  • Assicurarsi di non avere modifiche DML inflight quando si apportano modifiche DDL in tabelle con tipi di dati geometry, geography o hierarchyid. Per evitare questo problema, seguire questa procedura:

    1. Disattivare tutti i file DML nella tabella.
    2. Eseguire un processo di acquisizione per elaborare le modifiche.
    3. Eseguire DDL per la tabella.
    4. Eseguire un processo di acquisizione per elaborare le modifiche DDL.
    5. Riabilitare l'elaborazione DML.

    Nota

    Se si continua a riscontrare questo problema, disabilitare e riabilitare CDC nella tabella.