Change Data Capture e altre funzionalità di SQL ServerChange Data Capture and Other SQL Server Features

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse Questo argomento descrive l'interazione tra Change Data Capture e le funzionalità seguenti: This topic describes how the following features interact with change data capture:

Change TrackingChange Tracking

Le funzionalità Change Data Capture e rilevamento modifiche possono essere abilitate nello stesso database.Change data capture and change tracking can be enabled on the same database. Non richiedono considerazioni particolari.No special considerations are required. Per altre informazioni, vedere Utilizzare il rilevamento delle modifiche (SQL Server).For more information, see Work with Change Tracking (SQL Server).

Mirroring del databaseDatabase Mirroring

È possibile eseguire il mirroring di un database per il quale la funzionalità Change Data Capture è abilitata.A database that is enabled for change data capture can be mirrored. Per assicurarsi che i processi di acquisizione e pulizia vengano eseguiti automaticamente dopo un failover, effettuare i passaggi seguenti:To ensure that capture and cleanup happen automatically after a failover, follow these steps:

  1. Verificare che SQL ServerSQL Server Agent sia in esecuzione nella nuova istanza del server principale.Ensure that SQL ServerSQL Server Agent is running on the new principal server instance.

  2. Creare i processi di acquisizione e di pulizia nel nuovo database principale (il database mirror precedente).Create the capture job and cleanup job on the new principal database (the former mirror database). Per creare i processi, usare la stored procedure sp_cdc_add_job .To create the jobs, use the sp_cdc_add_job stored procedure.

    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.To view the current configuration of a cleanup or capture job, use the sys.sp_cdc_help_jobs stored procedure on the new principal server instance. 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.For a given database, the capture job is named cdc.database_name_capture, and the cleanup job is named cdc.database_name_cleanup, where database_name is the name of the database.

    Per modificare la configurazione di un processo, usare la stored procedure sys.sp_cdc_change_job.To change the configuration of a job, use the sys.sp_cdc_change_job stored procedure.

    Per informazioni sul mirroring del database, vedere Mirroring del database (SQL Server).For information about database mirroring, see Database Mirroring (SQL Server).

Transactional ReplicationTransactional Replication

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 and transactional replication can coexist in the same database, but population of the change tables is handled differently when both features are enabled. Change Data Capture e la replica transazionale usano sempre la stessa stored procedure, sp_replcmds, per leggere le modifiche dal log delle transazioni.Change data capture and transactional replication always use the same procedure, sp_replcmds, to read changes from the transaction log. Quando Change Data Capture è la sola funzionalità abilitata, un processo di SQL ServerSQL Server Agent chiama sp_replcmds.When change data capture is enabled on its own, a SQL ServerSQL Server Agent job calls sp_replcmds. Quando entrambe le funzionalità sono abilitate nello stesso database, l'agente di lettura log chiama sp_replcmds.When both features are enabled on the same database, the Log Reader Agent calls sp_replcmds. Questo agente popola sia le tabelle delle modifiche sia le tabelle del database di distribuzione.This agent populates both the change tables and the distribution database tables. Per altre informazioni, vedere Replication Log Reader Agent.For more information, see Replication Log Reader Agent.

Si consideri uno scenario in cui la funzionalità Change Data Capture è abilitata nel database AdventureWorks2012AdventureWorks2012 e due tabelle sono abilitate per l'acquisizione.Consider a scenario in which change data capture is enabled on the AdventureWorks2012AdventureWorks2012 database, and two tables are enabled for capture. Per popolare le tabelle delle modifiche, il processo di acquisizione chiama sp_replcmds.To populate the change tables, the capture job calls sp_replcmds. Il database viene abilitato per la replica transazionale e viene creata una pubblicazione.The database is enabled for transactional replication, and a publication is created. L'agente di lettura log viene creato per il database e il processo di acquisizione viene eliminato.Now, the Log Reader Agent is created for the database and the capture job is deleted. 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.The Log Reader Agent continues to scan the log from the last log sequence number that was committed to the change table. In questo modo, viene assicurata la coerenza dei dati nelle tabelle delle modifiche.This ensures data consistency in the change tables. Se la replica transazionale è disabilitata in questo database, l'agente di lettura log viene rimosso e il processo di acquisizione viene ricreato.If transactional replication is disabled in this database, the Log Reader Agent is removed and the capture job is re-created.

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.When the Log Reader Agent is used for both change data capture and transactional replication, replicated changes are first written to the distribution database. Le modifiche acquisite vengono quindi scritte nelle tabelle delle modifiche.Then, captured changes are written to the change tables. Il commit di entrambe le operazioni viene eseguito contemporaneamente.Both operations are committed together. 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.If there is any latency in writing to the distribution database, there will be a corresponding latency before changes appear in the change tables.

L'opzione proc exec della replica transazionale non è disponibile quando l'acquisizione dati delle modifiche è abilitata.The proc exec option of transactional replication is not available when change data capture is enabled.

Ripristino o collegamento di un database abilitato per Change Data CaptureRestoring or Attaching a Database Enabled for Change Data Capture

SQL ServerSQL 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: uses the following logic to determine if change data capture remains enabled after a database is restored or attached:

  • Se un database viene ripristinato nello stesso server con lo stesso nome di database, la funzionalità Change Data Capture rimane abilitata.If a database is restored to the same server with the same database name, change data capture remains enabled.

  • 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.If a database is restored to another server, by default change data capture is disabled and all related metadata is deleted.

    Per mantenere abilitata la funzionalità Change Data Capture, usare l'opzione KEEP_CDC durante il ripristino del database.To retain change data capture, use the KEEP_CDC option when restoring the database. Per ulteriori informazioni su questa opzione, vedere RESTORE.For more information about this option, see RESTORE.

  • Se un database viene scollegato e collegato allo stesso o a un altro server, la funzionalità Change Data Capture rimane abilitata.If a database is detached and attached to the same server or another server, change data capture remains enabled.

  • 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 ServerSQL Server Enterprise.If a database is attached or restored with the KEEP_CDC option to any edition other than Enterprise, the operation is blocked because change data capture requires SQL ServerSQL Server Enterprise. Viene visualizzato il messaggio di errore 934:Error message 934 is displayed:

    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.You can use sys.sp_cdc_disable_db to remove change data capture from a restored or attached database.

Change Data Capture e Always OnChange Data Capture and Always On

Quando si usa Always On, è consigliabile eseguire un'enumerazione delle modifiche nella replica secondaria per ridurre il carico su disco nella replica primaria.When you use Always On, change enumeration should be done on the Secondary replication to reduce the disk load on the primary.

Vedere ancheSee Also

Amministrare e monitorare Change Data Capture (SQL Server)Administer and Monitor Change Data Capture (SQL Server)