Change Data Capture e altre funzionalità di SQL Server
In questo argomento viene descritta l'interazione tra Change Data Capture e le funzionalità seguenti:
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 Rilevamento modifiche (SQL Server).For more information, see Work with Rilevamento modifiche (SQL Server).
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:
Assicurarsi che SQL Server Agent sia in esecuzione nella nuova istanza del server principale.
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 determinato database, il processo di acquisizione è denominato cdc. database_name_capture e il processo di pulizia è 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).For information about database mirroring, see Database Mirroring (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 è abilitato autonomamente, 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 Change Data Capture è abilitato nel database AdventureWorks2012 e per l'acquisizione sono abilitate due tabelle. 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 di un database abilitato per Change Data Capture
SQL Server usa la logica seguente per determinare se Change Data Capture rimane abilitato 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, utilizzare 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 è collegato o ripristinato con l'opzione
KEEP_CDC
per qualsiasi edizione diversa da Enterprise, l'operazione viene bloccata perché Change Data Capture richiede SQL Server Enterprise. 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 disable change data capture in the database by using a supported edition of SQL Server, 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.
Change Data Capture e AlwaysOn
Quando si utilizza AlwaysOn, è consigliabile eseguire un'enumerazione delle modifiche nella replica secondaria per ridurre il carico su disco nella replica primaria.