Change Data Capture e altre funzionalità

Si applica a:SQL ServerIstanza gestita di SQL di Azure

Questo articolo descrive come le funzionalità seguenti interagiscono con Change Data Capture per SQL Server e Istanza gestita di SQL di Azure. Per il database di Azure per MySQL, vedere CDC con Database SQL di Azure.

Rilevamento modifiche

Le funzionalità Change Data Capture e rilevamento modifiche possono essere abilitate nello stesso database. Non richiedono considerazioni particolari. Per altre informazioni, vedere Usare il Rilevamento modifiche.

Mirroring del database

È possibile eseguire il mirroring di un database per il quale la funzionalità Change Data Capture è abilitata. Per assicurarsi che i processi di acquisizione e pulizia vengano eseguiti automaticamente dopo un failover, effettuare i passaggi seguenti:

  1. Verificare che SQL Server Agent sia in esecuzione nella nuova istanza del server principale.

  2. Creare i processi di acquisizione e di pulizia nel nuovo database principale (il database mirror precedente). Per creare i processi, usare la stored procedure sp_cdc_add_job .

Per visualizzare la configurazione corrente di un processo di pulizia o di acquisizione, usare la stored procedure sys.sp_cdc_help_jobs nella nuova istanza del server principale. Per un database specificato, il processo di acquisizione viene denominato cdc.database_name_capture e il processo di pulizia viene denominato cdc.database_name_cleanup, dove database_name è il nome del database.

Per modificare la configurazione di un processo, usare la stored procedure sys.sp_cdc_change_job .

Per informazioni sul mirroring del database, vedere Mirroring del database (SQL Server);.

Replica transazionale

Le funzionalità Change Data Capture e replica transazionale possono coesistere nello stesso database, tuttavia il popolamento delle tabelle delle modifiche viene gestito in modo diverso se entrambe le funzionalità sono abilitate. Change Data Capture e la replica transazionale usano sempre la stessa stored procedure, sp_replcmds, per leggere le modifiche dal log delle transazioni. Quando Change Data Capture è la sola funzionalità abilitata, un processo di SQL Server Agent chiama sp_replcmds. Quando entrambe le funzionalità sono abilitate nello stesso database, l'agente di lettura log chiama sp_replcmds. Questo agente popola sia le tabelle delle modifiche sia le tabelle del database di distribuzione. Per altre informazioni, vedere Replication Log Reader Agent.

Si consideri uno scenario in cui la funzionalità Change Data Capture è abilitata nel database AdventureWorks2022 e due tabelle sono abilitate per l'acquisizione. Per popolare le tabelle delle modifiche, il processo di acquisizione chiama sp_replcmds. Il database viene abilitato per la replica transazionale e viene creata una pubblicazione. L'agente di lettura log viene creato per il database e il processo di acquisizione viene eliminato. L'agente di lettura log continua ad analizzare il log dall'ultimo numero di sequenza di cui è stato eseguito il commit nella tabella delle modifiche. In questo modo, viene assicurata la coerenza dei dati nelle tabelle delle modifiche. Se la replica transazionale è disabilitata in questo database, l'agente di lettura log viene rimosso e il processo di acquisizione viene ricreato.

Nota

Quando l'agente di lettura log viene utilizzato sia per Change Data Capture sia per la replica transazionale, le modifiche replicate vengono innanzitutto scritte nel database di distribuzione. Le modifiche acquisite vengono quindi scritte nelle tabelle delle modifiche. Il commit di entrambe le operazioni viene eseguito contemporaneamente. Se si verifica della latenza durante la scrittura nel database di distribuzione, si verificherà latenza prima che le modifiche vengano visualizzate nelle tabelle delle modifiche.

L'opzione proc exec della replica transazionale non è disponibile quando l'acquisizione dati delle modifiche è abilitata.

Ripristino o collegamento del database

SQL Server utilizza la logica seguente per determinare se la funzionalità Change Data Capture rimane abilitata anche dopo il ripristino o il collegamento di un database:

  • Se un database viene ripristinato nello stesso server con lo stesso nome di database, la funzionalità Change Data Capture rimane abilitata.

  • Se un database viene ripristinato in un altro server, per impostazione predefinita la funzionalità Change Data Capture viene disabilitata e tutti i metadati correlati vengono eliminati.

    Per mantenere abilitata la funzionalità Change Data Capture, usare l'opzione KEEP_CDC durante il ripristino del database. Per ulteriori informazioni su questa opzione, vedere RESTORE.

  • Se un database viene scollegato e collegato allo stesso o a un altro server, la funzionalità Change Data Capture rimane abilitata.

  • Se un database viene collegato o ripristinato con l'opzione KEEP_CDC in qualsiasi edizione diversa dall’Istanza Standard, Enterprise o gestita di SQL, l'operazione viene bloccata perché Change Data Capture richiede le edizioni dell’Istanza Standard, Enterprise o gestita di SQL. Viene visualizzato il messaggio di errore 934:

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

È possibile usare sys.sp_cdc_disable_db per rimuovere Change Data Capture da un database collegato o ripristinato.

Dopo il ripristino di un database in Istanza gestita di SQL di Azure, CDC rimarrà abilitato, ma è necessario assicurarsi che i processi di analisi e pulizia vengano aggiunti ed eseguiti. È possibile aggiungere manualmente i processi eseguendo sys.sp_cdc_add_job.

Database indipendenti

La funzionalità Change Data Capture non è supportata in database indipendenti.

Gruppi di disponibilità

Quando si usano Gruppi di disponibilità Always On, è consigliabile eseguire un'enumerazione delle modifiche nella replica secondaria per ridurre il carico su disco nella replica primaria.

Indici columnstore

Change Data Capture non può essere abilitato per le tabelle con un indice columnstore cluster. A partire da SQL Server 2016, può essere abilitato per le tabelle con un indice columnstore non cluster.

Colonne calcolate

CDC non supporta i valori per le colonne calcolate anche se la colonna calcolata è definita come persistente. Le colonne calcolate incluse in un'istanza di acquisizione hanno sempre un valore NULL. Questo comportamento è previsto e non un bug.

Linux

CDC è supportato per SQL Server 2017 in Linux a partire da CU18 e SQL Server 2019 in Linux.

Vedi anche