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
Mirroring del database
Replica transazionale
Ripristino o collegamento di un database abilitato per Change Data Capture
Rilevamento modifiche
Le funzionalità Change Data Capture e rilevamento modifiche possono essere abilitate nello stesso database. Non richiedono considerazioni particolari. Per ulteriori informazioni, vedere Utilizzare il rilevamento delle 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:
Verificare 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, utilizzare la stored procedure sp_cdc_add_job.
Per visualizzare la configurazione corrente di un processo di pulizia o di acquisizione, utilizzare 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, utilizzare 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 utilizzano sempre la stessa stored procedure, sp_replcmds, per leggere le modifiche dal log delle transazioni. Quando Change Data Capture è la sola funzionalità abilitata, SQL Server Agent chiama sp_replcmds. Quando entrambe le funzionalità sono abilitate sullo 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 ulteriori informazioni, vedere Agente lettura log repliche.
Si consideri uno scenario in cui la funzionalità Change Data Capture è abilitata nel database AdventureWorks2012 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 di un database abilitato per Change Data Capture
In SQL Server viene utilizzata 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, 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 viene collegato o ripristinato con l'opzione KEEP_CDC in qualsiasi edizione diversa da Enterprise, l'operazione viene bloccata perché Change Data Capture richiede SQL Server Enterprise Edition e 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 utilizzare sys.sp_cdc_disable_db per rimuovere Change Data Capture da un database collegato o ripristinato.