Condividi tramite


Il processo di acquisizione CDC non riesce durante l'elaborazione delle modifiche per una tabella con tipo di dati CLR di sistema (geometry, geography 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 (geometry, geography o hierarchyid).

Si applica a: SQL Server
Numero KB originale: 4538384

Sintomi

Prendi in considerazione lo scenario seguente:

  • È 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) elabora le modifiche correlate ad altre tabelle. Il processo non ha ancora raggiunto la tabella con tipo di dati CLR di sistema.
  • Vengono apportate alcune modifiche DML (Data Manipulation Language) nella tabella con tipo di dati CLR di sistema. Si apportano quindi 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 ]
Impossibile costruire un comando replicato dal numero di sequenza di log (LSN) {nnnnnnnn: nn: nnnnnn: nnnn}. Eseguire un backup del database di pubblicazione, quindi contattare il Servizio Supporto Tecnico Clienti Microsoft.
Msg 22859, Level 16, State 2, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
Errore del processo di analisi dei log durante l'elaborazione dei record di log. Per identificare la causa e correggere eventuali problemi associati, fare riferimento agli errori precedenti della sessione corrente.
Msg 3621, Level 16, State 6, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
L'istruzione è stata interrotta.
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. Per scoprire la causa del problema, vedere gli errori precedenti.

Inoltre, è possibile registrare la voce seguente nel log degli errori:

Errore: 913, gravità: 16, stato: 16. Impossibile trovare l'ID del database. È possibile che il database non sia ancora stato attivato o che sia in una fase di transizione. Eseguire nuovamente la query quando il database sarà disponibile. Se non si ritiene che questo errore sia dovuto a un database che sta passando lo stato 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 in volo quando si apportano modifiche DDL nelle tabelle con tipi di dati geometry, geography o hierarchyid. Per evitare questo problema, seguire questa procedura:

    1. Disattivare tutte le istruzioni 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.

    Note

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