Informazioni su Change Data Capture (SQL Server)About Change Data Capture (SQL Server)

Change Data Capture consente di registrare le attività di inserimento, aggiornamento ed eliminazione applicate a una tabella di SQL ServerSQL Server ,Change data capture records insert, update, and delete activity that is applied to a SQL ServerSQL Server table. rendendo disponibili i dettagli delle modifiche in un formato relazionale facilmente utilizzabile.This makes the details of the changes available in an easily consumed relational format. Le informazioni sulla colonna e i metadati necessari per applicare le modifiche a un ambiente di destinazione vengono acquisiti per le righe modificate e archiviati in tabelle delle modifiche che riflettono la struttura della colonna delle tabelle di origine con rilevamento.Column information and the metadata that is required to apply the changes to a target environment is captured for the modified rows and stored in change tables that mirror the column structure of the tracked source tables. Per consentire ai consumer di accedere in modo sistematico ai dati delle modifiche, sono disponibili funzioni con valori di tabella.Table-valued functions are provided to allow systematic access to the change data by consumers.

Un buon esempio di consumer di dati cui questa tecnologia è destinata è un'applicazione ETL di estrazione, trasformazione e caricamento.A good example of a data consumer that is targeted by this technology is an extraction, transformation, and loading (ETL) application. Un'applicazione di questo tipo carica incrementalmente dati delle modifiche dalle tabelle di origine di SQL ServerSQL Server in un data warehouse oppure in un data mart.An ETL application incrementally loads change data from SQL ServerSQL Server source tables to a data warehouse or data mart. Anche se la rappresentazione delle tabelle di origine all'interno del data warehouse deve riflettere le modifiche in tali tabelle, una tecnologia end-to-end che aggiorna una replica dell'origine non è appropriata.Although the representation of the source tables within the data warehouse must reflect changes in the source tables, an end-to-end technology that refreshes a replica of the source is not appropriate. È necessario invece un flusso affidabile di dati delle modifiche strutturato in modo che i consumer possano applicarlo a rappresentazioni di destinazione dei dati diverse.Instead, you need a reliable stream of change data that is structured so that consumers can apply it to dissimilar target representations of the data. SQL ServerSQL Server Change Data Capture fornisce questa tecnologia. change data capture provides this technology.

Flusso di dati di Change Data CaptureChange Data Capture Data Flow

Nella figura seguente viene illustrato il flusso di dati principale per Change Data Capture.The following illustration shows the principal data flow for change data capture.

Change data capture data flowChange data capture data flow

L'origine dei dati delle modifiche per la funzionalità Change Data Capture è data dal log delle transazioni di SQL ServerSQL Server .The source of change data for change data capture is the SQL ServerSQL Server transaction log. Man mano che alle tabelle di origine con rilevamento vengono applicati inserimenti, aggiornamenti ed eliminazioni, le voci che descrivono tali modifiche vengono aggiunte al log.As inserts, updates, and deletes are applied to tracked source tables, entries that describe those changes are added to the log. Il log viene utilizzato come input per il processo di acquisizioneThe log serves as input to the capture process. Il log viene letto e le informazioni relative alle modifiche vengono aggiunte alla tabella delle modifiche associata alla tabella con rilevamento.This reads the log and adds information about changes to the tracked table’s associated change table. Per enumerare le modifiche visualizzate nelle tabelle delle modifiche in un intervallo specificato, sono disponibili diverse funzioni che restituiscono le informazioni in un set di risultati filtrato.Functions are provided to enumerate the changes that appear in the change tables over a specified range, returning the information in the form of a filtered result set. Tale set di risultati viene utilizzato in genere da un processo dell'applicazione per aggiornare una rappresentazione dell'origine in alcuni ambienti esterni.The filtered result set is typically used by an application process to update a representation of the source in some external environment.

Informazioni su Change Data Capture e l'istanza di acquisizioneUnderstanding Change Data Capture and the Capture Instance

Affinché sia possibile rilevare le modifiche apportate a qualsiasi tabella singola di un database, è necessario che Change Data Capture venga abilitato in modo esplicito per il database.Before changes to any individual tables within a database can be tracked, change data capture must be explicitly enabled for the database. Per eseguire questa operazione, usare la stored procedure sys.sp_cdc_enable_db.This is done by using the stored procedure sys.sp_cdc_enable_db. Quando il database è abilitato, le tabelle di origine possono essere identificate come tabelle con rilevamento usando la stored procedure sys.sp_cdc_enable_table.When the database is enabled, source tables can be identified as tracked tables by using the stored procedure sys.sp_cdc_enable_table. Quando la funzionalità Change Data Capture viene abilitata per una tabella, per supportare la distribuzione dei dati delle modifiche nella tabella di origine viene creata un'istanza di acquisizione associataWhen a table is enabled for change data capture, an associated capture instance is created to support the dissemination of the change data in the source table. costituita da una tabella delle modifiche e da una o due funzioni della query.The capture instance consists of a change table and up to two query functions. I metadati che descrivono i dettagli di configurazione dell'istanza di acquisizione vengono mantenuti nelle tabelle di metadati di Change Data Capture cdc.change_tables, cdc.index_columnse cdc.captured_columns.Metadata that describes the configuration details of the capture instance is retained in the change data capture metadata tables cdc.change_tables, cdc.index_columns, and cdc.captured_columns. È possibile recuperare queste informazioni usando la stored procedure sys.sp_cdc_help_change_data_capture.This information can be retrieved by using the stored procedure sys.sp_cdc_help_change_data_capture.

Tutti gli oggetti associati a un'istanza di acquisizione vengono creati nello schema relativo a Change Data Capture del database abilitato.All objects that are associated with a capture instance are created in the change data capture schema of the enabled database. Il nome dell'istanza di acquisizione deve essere un nome di oggetto valido e univoco in tutte le istanze di acquisizione del database.The requirements for the capture instance name is that it be a valid object name, and that it be unique across the database capture instances. Per impostazione predefinita, il nome è <nome schemanome tabella> della tabella di origine.By default, the name is <schema nametable name> of the source table. Il nome assegnato alla tabella delle modifiche associata viene creato aggiungendo _CT al nome dell'istanza di acquisizione.Its associated change table is named by appending _CT to the capture instance name. Il nome assegnato alla funzione usata per eseguire una query relativa a tutte le modifiche viene creato anteponendo fn_cdc_get_all_changes_ al nome dell'istanza di acquisizione.The function that is used to query for all changes is named by prepending fn_cdc_get_all_changes_ to the capture instance name. Se l'istanza di acquisizione è configurata per supportare net changes, viene creata anche la funzione della query net_changes, cui viene assegnato un nome creato anteponendo fn_cdc_get_net_changes_ al nome dell'istanza di acquisizione.If the capture instance is configured to support net changes, the net_changes query function is also created and named by prepending fn_cdc_get_net_changes_ to the capture instance name.

Tabella delle modificheChange Table

Le prime cinque colonne di una tabella delle modifiche di Change Data Capture sono costituite da metadatiThe first five columns of a change data capture change table are metadata columns. che forniscono informazioni aggiuntive attinenti alla modifica registrata.These provide additional information that is relevant to the recorded change. Le colonne rimanenti rispecchiano le colonne acquisite identificate dalla tabella di origine nel nome e, generalmente, nel tipo.The remaining columns mirror the identified captured columns from the source table in name and, typically, in type. Tali colonne contengono i dati delle colonne acquisite raccolti dalla tabella di origine.These columns hold the captured column data that is gathered from the source table.

Ogni operazione di inserimento o eliminazione applicata a una tabella di origine viene visualizzata in un'unica riga all'interno della tabella delle modifiche.Each insert or delete operation that is applied to a source table appears as a single row within the change table. Le colonne di dati della riga che costituisce il risultato di un'operazione di inserimento contengono i valori della colonna dopo l'inserimento,The data columns of the row that results from an insert operation contain the column values after the insert. mentre le colonne di dati della riga che costituisce il risultato di un'operazione di eliminazione contengono i valori della colonna prima dell'eliminazione.The data columns of the row that results from a delete operation contain the column values before the delete. Per eseguire un'operazione di aggiornamento sono necessarie due voci di riga, una per identificare i valori della colonna prima dell'aggiornamento e l'altra per identificare i valori della colonna dopo l'aggiornamento.An update operation requires one row entry to identify the column values before the update, and a second row entry to identify the column values after the update.

Ogni riga di una tabella delle modifiche contiene inoltre metadati aggiuntivi che consentono di interpretare l'attività di modifica.Each row in a change table also contains additional metadata to allow interpretation of the change activity. La colonna $start_lsn identifica il numero di sequenza del file di log (LSN) del commit assegnato alla modifica.The column $start_lsn identifies the commit log sequence number (LSN) that was assigned to the change. Il valore LSN di commit identifica le modifiche di cui è stato eseguito il commit all'interno della stessa transazione e ordina inoltre tali transazioni.The commit LSN both identifies changes that were committed within the same transaction, and orders those transactions. La colonna __$seqval può essere usata per ordinare più modifiche che si verificano all'interno di una stessa transazione,The column __$seqval can be used to order more changes that occur in the same transaction. mentre la colonna __$operation registra l'operazione associata alla modifica in base al seguente schema: 1 = eliminazione, 2 = inserimento, 3 = aggiornamento (prima dell'immagine) e 4 = aggiornamento (dopo l'immagine).The column __$operation records the operation that is associated with the change: 1 = delete, 2 = insert, 3 = update (before image), and 4 = update (after image). La colonna __$update_mask, infine, è una maschera di bit variabile con un bit definito per ogni colonna acquisita.The column __$update_mask is a variable bit mask with one defined bit for each captured column. Per le voci relative all'inserimento e all'eliminazione dei dati, tutti i bit della maschera di aggiornamento verranno sempre impostati.For insert and delete entries, the update mask will always have all bits set. Per le righe aggiornate, tuttavia, saranno impostati solo i bit corrispondenti alle colonne modificate.Update rows, however, will only have those bits set that correspond to changed columns.

Intervallo di validità di Change Data Capture per un databaseChange Data Capture Validity Interval for a Database

L'intervallo di validità di Change Data Capture per un database è rappresentato dal periodo di tempo durante il quale i dati delle modifiche sono disponibili per le istanze di acquisizione.The change data capture validity interval for a database is the time during which change data is available for capture instances. L'intervallo di validità ha inizio nel momento in cui viene creata la prima istanza di acquisizione e si estende fino al momento corrente.The validity interval begins when the first capture instance is created for a database table, and continues to the present time.

Se non vengono eliminati in modo periodico e sistematico, i dati inseriti nelle tabelle delle modifiche aumenteranno notevolmente e non sarà più possibile gestirli.Data that is deposited in change tables will grow unmanageably if you do not periodically and systematically prune the data. Il processo di pulizia di Change Data Capture è responsabile dell'applicazione dei criteri di pulizia basati sulla memorizzazione.The change data capture cleanup process is responsible for enforcing the retention-based cleanup policy. Tale processo sposta innanzitutto l'endpoint inferiore dell'intervallo di validità in modo da soddisfare la restrizione relative al tempoFirst, it moves the low endpoint of the validity interval to satisfy the time restriction. e successivamente rimuove le voci della tabella delle modifiche scadute.Then, it removes expired change table entries. Per impostazione predefinita, i dati vengono mantenuti per tre giorni.By default, three days of data is retained.

Considerato che il processo di acquisizione esegue il commit di ogni nuovo batch di dati delle modifiche, a livello dell'endpoint superiore le nuove voci vengono aggiunte a cdc.lsn_time_mapping per ogni transazione cui sono associate voci della tabella delle modifiche.At the high end, as the capture process commits each new batch of change data, new entries are added to cdc.lsn_time_mapping for each transaction that has change table entries. Nella tabella di mapping vengono mantenuti sia un numero di sequenza del file di log (LSN) del commit che l'ora in cui è stato eseguito il commit della transazione (colonne start_lsn e tran_end_time, rispettivamente).Within the mapping table, both a commit Log Sequence Number (LSN) and a transaction commit time (columns start_lsn and tran_end_time, respectively) are retained. Il valore LSN massimo presente in cdc.lsn_time_mapping rappresenta il limite superiore della finestra di validità del database.The maximum LSN value that is found in cdc.lsn_time_mapping represents the high water mark of the database validity window. L'ora corrispondente in cui viene eseguito il commit viene utilizzata come base per il calcolo del nuovo limite inferiore da parte del criterio di pulizia basato sulla memorizzazione.Its corresponding commit time is used as the base from which retention based cleanup computes a new low water mark.

Poiché il processo di acquisizione estrae dati delle modifiche dal log delle transazioni, è presente una latenza predefinita tra il momento in cui viene eseguito il commit di una modifica in una tabella di origine e quello in cui la modifica viene visualizzata nella tabella delle modifiche associate.Because the capture process extracts change data from the transaction log, there is a built in latency between the time that a change is committed to a source table and the time that the change appears within its associated change table. Mentre tale latenza è in genere bassa, è tuttavia importante tenere presente che i dati delle modifiche non sono disponibili fino a quando il processo di acquisizione non ha elaborato le voci di log correlate.While this latency is typically small, it is nevertheless important to remember that change data is not available until the capture process has processed the related log entries.

Intervallo di validità di Change Data Capture per un'istanza di acquisizioneChange Data Capture Validity Interval for a Capture Instance

Sebbene l'intervallo di validità per il database e quello per l'istanza di acquisizione singola in genere coincidano, questa situazione non si verifica sempre.Although it is common for the database validity interval and the validity interval of individual capture instance to coincide, this is not always true. L'intervallo di validità dell'istanza di acquisizione viene avviato quando il processo di acquisizione riconosce l'istanza e avvia la registrazione delle modifiche associate nella relativa tabella.The validity interval of the capture instance starts when the capture process recognizes the capture instance and starts to log associated changes to its change table. Di conseguenza, se le istanze di acquisizione vengono create in momenti diversi, a ciascuna sarà associato inizialmente un endpoint inferiore diverso.As a result, if capture instances are created at different times, each will initially have a different low endpoint. La colonna start_lsn del set di risultati restituito da sys.sp_cdc_help_change_data_capture visualizza l'endpoint basso corrente per ogni istanza di acquisizione definita.The start_lsn column of the result set that is returned by sys.sp_cdc_help_change_data_capture shows the current low endpoint for each defined capture instance. Quando il processo di pulizia elimina le voci della tabella delle modifiche, modifica anche i valori di start_lsn affinché tutte le istanze di acquisizione riflettano il nuovo limite inferiore per i dati delle modifiche disponibili.When the cleanup process cleans up change table entries, it adjusts the start_lsn values for all capture instances to reflect the new low water mark for available change data. Vengono modificate solo le istanze di acquisizione per cui i valori di start_lsn sono attualmente minori rispetto al nuovo limite inferiore.Only those capture instances that have start_lsn values that are currently less than the new low water mark are adjusted. Con il tempo, se non viene creata alcuna nuova istanza di acquisizione, gli intervalli di validità per tutte le istanze singole tenderanno a coincidere con l'intervallo di validità per il database.Over time, if no new capture instances are created, the validity intervals for all individual instances will tend to coincide with the database validity interval.

L'intervallo di validità è importante per i consumer dei dati delle modifiche perché l'intervallo di estrazione per una richiesta deve essere interamente compreso nell'intervallo di validità di Change Data Capture per l'istanza di acquisizione corrente.The validity interval is important to consumers of change data because the extraction interval for a request must be fully covered by the current change data capture validity interval for the capture instance. Se l'endpoint inferiore dell'intervallo di estrazione è minore dell'endpoint inferiore dell'intervallo di validità, alcuni dati delle modifiche potrebbero non essere disponibili a causa di una pulizia eccessiva.If the low endpoint of the extraction interval is to the left of the low endpoint of the validity interval, there could be missing change data due to aggressive cleanup. Se invece l'endpoint superiore dell'intervallo di estrazione è maggiore dell'endpoint superiore dell'intervallo di validità, il processo di acquisizione non ha ancora eseguito alcuna elaborazione durante il periodo di tempo rappresentato dall'intervallo di estrazione, provocando anche in questo caso la non disponibilità dei dati delle modifiche.If the high endpoint of the extraction interval is to the right of the high endpoint of the validity interval, the capture process has not yet processed through the time period that is represented by the extraction interval, and change data could also be missing.

La funzione sys.fn_cdc_get_min_lsn consente di recuperare il valore LSN minimo corrente per un'istanza di acquisizione, mentre sys.fn_cdc_get_max_lsn consente di recuperare il valore LSN massimo corrente.The function sys.fn_cdc_get_min_lsn is used to retrieve the current minimum LSN for a capture instance, while sys.fn_cdc_get_max_lsn is used to retrieve the current maximum LSN value. In caso di esecuzione di una query sui dati delle modifiche, se l'intervallo LSN specificato non è compreso tra questi due valori LSN, non sarà possibile eseguire le funzioni della query relative a Change Data Capture.When querying for change data, if the specified LSN range does not lie within these two LSN values, the change data capture query functions will fail.

Gestione delle modifiche nelle tabelle di origineHandling Changes to Source Tables

L'adattamento delle modifiche delle colonne nelle tabelle di origine per cui deve essere eseguito il rilevamento delle modifiche costituisce un problema di difficile risoluzione per i consumer a valle.To accommodate column changes in the source tables that are being tracked is a difficult issue for downstream consumers. Sebbene l'abilitazione di Change Data Capture in una tabella di origine non impedisca il verificarsi di tali modifiche DDL, tale funzionalità consente tuttavia di mitigare l'effetto sui consumer consentendo ai set di risultati recapitati restituiti tramite l'API di rimanere invariati anche se la struttura della colonna della tabella di origine sottostante subisce modifiche.Although enabling change data capture on a source table does not prevent such DDL changes from occurring, change data capture helps to mitigate the effect on consumers by allowing the delivered result sets that are returned through the API to remain unchanged even as the column structure of the underlying source table changes. Tale struttura fissa viene riflessa anche nella tabella delle modifiche sottostante alla quale accedono le funzioni della query definite.This fixed column structure is also reflected in the underlying change table that the defined query functions access.

Per adattare una tabella delle modifiche con struttura della colonna fissa, il processo di acquisizione responsabile del popolamento della tabella delle modifiche ignorerà qualsiasi nuova colonna non identificata per l'acquisizione al momento dell'abilitazione di Change Data Capture per la tabella di origine.To accommodate a fixed column structure change table, the capture process responsible for populating the change table will ignore any new columns that are not identified for capture when the source table was enabled for change data capture. Se una colonna con rilevamento viene eliminata, per tale colonna verranno specificati valori Null nelle voci di modifica successive.If a tracked column is dropped, null values will be supplied for the column in the subsequent change entries. Tuttavia, se una colonna esistente subisce una modifica relativa al tipo di dati, la modifica viene propagata alla tabella delle modifiche per garantire che il meccanismo di acquisizione non provochi una perdita di dati nelle colonne con rilevamento.However, if an existing column undergoes a change in its data type, the change is propagated to the change table to ensure that the capture mechanism does not introduce data loss to tracked columns. Il processo di acquisizione invia inoltre tutte le modifiche rilevate nella struttura della colonna di tabelle con rilevamento alla tabella cdc.ddl_history.The capture process also posts any detected changes to the column structure of tracked tables to the cdc.ddl_history table. Gli utenti che vogliono ricevere un avviso relativo alle modifiche eventualmente apportate ad applicazioni a valle possono usare la stored procedure sys.sp_cdc_get_ddl_history.Consumers wishing to be alerted of adjustments that might have to be made in downstream applications, use the stored procedure sys.sp_cdc_get_ddl_history.

Quando alla tabella di origine associata vengono applicate modifiche DDL, l'istanza di acquisizione corrente continuerà in genere a mantenere la propria forma.Typically, the current capture instance will continue to retain its shape when DDL changes are applied to its associated source table. È tuttavia possibile creare una seconda istanza di acquisizione per la tabella che rifletta la nuova struttura della colonna.However, it is possible to create a second capture instance for the table that reflects the new column structure. In questo modo il processo di acquisizione è in grado di trasferire le modifiche apportate alla stessa tabella di origine in due tabelle delle modifiche distinte con strutture della colonna diverse.This allows the capture process to make changes to the same source table into two distinct change tables having two different column structures. Di conseguenza, mentre una tabella delle modifiche può continuare a essere utilizzata da programmi operativi correnti, la seconda può risultare utile in un ambiente di sviluppo in cui devono essere incorporati i nuovi dati della colonna.Thus, while one change table can continue to feed current operational programs, the second one can drive a development environment that is trying to incorporate the new column data. Se si consente al meccanismo di acquisizione di popolare entrambe le tabelle delle modifiche contemporaneamente, una transizione da una tabella all'altra può essere eseguita senza perdita di dati delle modifiche.Allowing the capture mechanism to populate both change tables in tandem means that a transition from one to the other can be accomplished without loss of change data. Questa situazione può verificarsi tutte le volte che due cronologie di Change Data Capture si sovrappongono.This can happen any time the two change data capture timelines overlap. Quando la transizione viene effettuata, l'istanza di acquisizione obsoleta può essere rimossa.When the transition is effected, the obsolete capture instance can be removed.

Nota

Il numero massimo di istanze di acquisizione che possono essere associate contemporaneamente a un'unica tabella di origine è due.The maximum number of capture instances that can be concurrently associated with a single source table is two.

Relazione tra il processo di acquisizione e l'agente di lettura log della replica transazionaleRelationship Between the Capture Job and the Transactional Replication Logreader

La logica del processo Change Data Capture è incorporata nella stored procedure sp_replcmds, una funzione del server interna compilata come parte del processo sqlservr.exe e usata anche dalla replica transazionale per raccogliere modifiche dal log delle transazioni.The logic for change data capture process is embedded in the stored procedure sp_replcmds, an internal server function built as part of sqlservr.exe and also used by transactional replication to harvest changes from the transaction log. Quando per un database è abilitata solo la funzionalità Change Data Capture, per richiamare sp_replcmds viene creato il processo di acquisizione di SQL Server Agent relativo a Change Data Capture.When change data capture alone is enabled for a database, you create the change data capture SQL Server Agent capture job as the vehicle for invoking sp_replcmds. Se è presente anche la replica, l'agente di lettura log transazionale viene utilizzato da solo per soddisfare le esigenze relative ai dati delle modifiche per entrambi i consumer.When replication is also present, the transactional logreader alone is used to satisfy the change data needs for both of these consumers. Questa strategia consente di ridurre in modo significativo le contese relative al log quando per lo stesso database sono abilitati sia la replica che Change Data Capture.This strategy significantly reduces log contention when both replication and change data capture are enabled for the same database.

Il passaggio tra queste due modalità operative per l'acquisizione dei dati delle modifiche viene eseguito automaticamente tutte le volte che lo stato della replica di un database abilitato per Change Data Capture subisce una modifica.The switch between these two operational modes for capturing change data occurs automatically whenever there is a change in the replication status of a change data capture enabled database.

Importante

Per entrambe le istanze della logica di acquisizione è necessario che SQL ServerSQL Server Agent sia in esecuzione affinché il processo venga eseguito.Both instances of the capture logic require SQL ServerSQL Server Agent to be running for the process to execute.

L'attività principale del processo di acquisizione consiste nell'analisi del log e nella scrittura dei dati delle colonne e delle informazioni relative alla transazione nelle tabelle delle modifiche di Change Data Capture.The principal task of the capture process is to scan the log and write column data and transaction related information to the change data capture change tables. Per garantire un limite coerente a livello di transazione in tutte le tabelle delle modifiche di Change Data Capture che popola, il processo di acquisizione apre ed esegue il commit della propria transazione a ogni ciclo di analisi.To ensure a transactionally consistent boundary across all the change data capture change tables that it populates, the capture process opens and commits its own transaction on each scan cycle. Il processo rileva il momento in cui per le tabelle viene abilitato Change Data Capture e include automaticamente tali tabelle nel set di tabelle per le quali viene eseguito il monitoraggio delle voci di modifica nel log.It detects when tables are newly enabled for change data capture, and automatically includes them in the set of tables that are actively monitored for change entries in the log. Analogamente, verrà rilevata anche la disabilitazione di Change Data Capture, provocando la rimozione della tabella di origine dal set di tabelle per le quali viene eseguito il monitoraggio dei dati delle modifiche.Similarly, disabling change data capture will also be detected, causing the source table to be removed from the set of tables actively monitored for change data. Quando l'elaborazione relativa a una sezione del log è completata, il processo di acquisizione segnala la logica di troncamento del log al server, che utilizza queste informazioni per identificare le voci di log idonee per il troncamento.When processing for a section of the log is finished, the capture process signals the server log truncation logic, which uses this information to identify log entries eligible for truncation.

Nota

Quando un database è abilitato per Change Data Capture, anche se la modalità di recupero è impostata sul recupero semplice, il punto di troncamento del log non avanzerà finché tutte le modifiche contrassegnate per l'acquisizione non sono state raccolte dal processo di acquisizione.When a database is enabled for change data capture, even if the recovery mode is set to simple recovery the log truncation point will not advance until all the changes that are marked for capture have been gathered by the capture process. Se il processo di acquisizione non è in esecuzione e sono disponibili modifiche per la raccolta, l'esecuzione di CHECKPOINT non comporterà il troncamento del log.If the capture process is not running and there are changes to be gathered, executing CHECKPOINT will not truncate the log.

Il processo di acquisizione viene inoltre utilizzato per gestire la cronologia relativa alle modifiche DDL apportate alle tabelle con rilevamento.The capture process is also used to maintain history on the DDL changes to tracked tables. Le istruzioni DDL associate a Change Data Capture inseriscono voci nel log delle transazioni del database ogni volta che una tabella o un database per cui la funzionalità Change Data Capture è abilitata viene eliminato o ogni volta che vengono aggiunte, modificate o eliminate colonne di una tabella per cui tale funzionalità è abilitata.The DDL statements that are associated with change data capture make entries to the database transaction log whenever a change data capture-enabled database or table is dropped or columns of a change data capture-enabled table are added, modified, or dropped. Tali voci di log vengono elaborate dal processo di acquisizione, che successivamente invia gli eventi DDL associati alla tabella cdc.ddl_history.These log entries are processed by the capture process, which then posts the associated DDL events to the cdc.ddl_history table. È possibile ottenere informazioni sugli eventi DDL che interessano le tabelle con rilevamento usando la stored procedure sys.sp_cdc_get_ddl_history.You can obtain information about DDL events that affect tracked tables by using the stored procedure sys.sp_cdc_get_ddl_history.

Processi dell'agente di Change Data CaptureChange Data Capture Agent Jobs

A un database abilitato per la funzionalità Change Data Capture sono in genere associati due processi di SQL ServerSQL Server Agent, uno usato per popolare le tabelle delle modifiche del database e uno responsabile della pulizia di tali tabelle.Two SQL ServerSQL Server Agent jobs are typically associated with a change data capture enabled database: one that is used to populate the database change tables, and one that is responsible for change table cleanup. Entrambi i processi sono costituiti da un solo passaggio che esegue il comando Transact-SQLTransact-SQL .Both jobs consist of a single step that runs a Transact-SQLTransact-SQL command. Il comando Transact-SQLTransact-SQL richiamato è una stored procedure definita di Change Data Capture che implementa la logica del processo.The Transact-SQLTransact-SQL command that is invoked is a change data capture defined stored procedure that implements the logic of the job. I processi vengono creati nel momento in cui per la prima tabella del database viene abilitato Change Data Capture.The jobs are created when the first table of the database is enabled for change data capture. Mentre il processo di pulizia viene sempre creato,The Cleanup Job is always created. il processo di acquisizione verrà creato solo se non sono state definite pubblicazioni transazionali per il database.The capture job will only be created if there are no defined transactional publications for the database. Il processo di acquisizione viene creato anche quando per un database sono abilitati sia Change Data Capture che la replica transazionale e il processo di lettura log transazionale viene rimosso perché al database non sono più associate pubblicazioni definite.The capture job is also created when both change data capture and transactional replication are enabled for a database, and the transactional logreader job is removed because the database no longer has defined publications.

Sia il processo di acquisizione che quello di pulizia vengono creati utilizzando parametri predefiniti.Both the capture and cleanup jobs are created by using default parameters. Il processo di acquisizione viene avviato immediatamente.The capture job is started immediately. L'esecuzione è continua e la capacità di elaborazione prevede un massimo di 1.000 transazioni per ciclo di analisi con un'attesa di 5 secondi tra un ciclo e l'altro.It runs continuously, processing a maximum of 1000 transactions per scan cycle with a wait of 5 seconds between cycles. Il processo di pulizia viene eseguito quotidianamente alle 02.00.The cleanup job runs daily at 2 A.M. Tale processo consente di memorizzare le voci della tabella delle modifiche per 4320 minuti o 3 giorni, rimuovendo un massimo di 5000 voci con una singola istruzione Delete.It retains change table entries for 4320 minutes or 3 days, removing a maximum of 5000 entries with a single delete statement.

I processi dell'agente di Change Data Capture vengono rimossi quando la funzionalità viene disabilitata per il database.The change data capture agent jobs are removed when change data capture is disabled for a database. Il processo di acquisizione può essere rimosso anche quando la prima pubblicazione viene aggiunta a un database e le funzionalità Change Data Capture e replica transazionale sono entrambe abilitate.The capture job can also be removed when the first publication is added to a database, and both change data capture and transactional replication are enabled.

Internamente, i processi dell'agente Change Data Capture vengono creati e rilasciati usando rispettivamente le stored procedure sys.sp_cdc_add_job e sys.sp_cdc_drop_job.Internally, change data capture agent jobs are created and dropped by using the stored procedures sys.sp_cdc_add_job and sys.sp_cdc_drop_job, respectively. Tali stored procedure vengono inoltre esposte in modo che gli amministratori possano controllare la creazione e la rimozione dei processi.These stored procedures are also exposed so that administrators can control the creation and removal of these jobs.

Un amministratore non dispone di alcun controllo esplicito sulla configurazione predefinita dei processi dell'agente di Change Data Capture.An administrator has no explicit control over the default configuration of the change data capture agent jobs. A tale scopo viene fornita la stored procedure sys.sp_cdc_change_job che consente di modificare i parametri di configurazione predefiniti.The stored procedure sys.sp_cdc_change_job is provided to allow the default configuration parameters to be modified. Inoltre, la stored procedure sys.sp_cdc_help_jobs consente di visualizzare i parametri di configurazione correnti.In addition, the stored procedure sys.sp_cdc_help_jobs allows current configuration parameters to be viewed. Sia il processo di acquisizione che quello di pulizia estraggono parametri di configurazione dalla tabella msdb.dbo.cdc_jobs all'avvio.Both the capture job and the cleanup job extract configuration parameters from the table msdb.dbo.cdc_jobs on startup. Qualsiasi modifica apportata a tali valori usando sys.sp_cdc_change_job non avrà effetto finché il processo non viene arrestato e riavviato.Any changes made to these values by using sys.sp_cdc_change_job will not take effect until the job is stopped and restarted.

Per avviare e arrestare i processi dell'agente di Change Data Capture, sono disponibili due stored procedure aggiuntive, sys.sp_cdc_start_job e sys.sp_cdc_stop_job.Two additional stored procedures are provided to allow the change data capture agent jobs to be started and stopped: sys.sp_cdc_start_job and sys.sp_cdc_stop_job.

Nota

L'avvio e l'arresto del processo di acquisizione non comportano alcuna perdita dei dati delle modifiche,Starting and stopping the capture job does not result in a loss of change data. ma consentono solo di evitare che il processo esegua l'analisi del log per inserire voci di modifica nelle tabelle delle modifiche.It only prevents the capture process from actively scanning the log for change entries to deposit in the change tables. Una strategia ragionevole per impedire che l'analisi del log aumenti il carico durante i periodi in cui la richiesta è massima consiste nell'arresto del processo e nel successivo riavvio quando la richiesta è diminuita.A reasonable strategy to prevent log scanning from adding load during periods of peak demand is to stop the capture job and restart it when demand is reduced.

Entrambi i processi di SQL ServerSQL Server Agent sono stati progettati per essere sufficientemente flessibili e configurabili in modo da soddisfare le esigenze di base degli ambienti in cui viene usata la funzionalità Change Data Capture.Both SQL ServerSQL Server Agent jobs were designed to be flexible enough and sufficiently configurable to meet the basic needs of change data capture environments. In entrambi casi, tuttavia, le stored procedure sottostanti che forniscono le funzionalità di base sono state esposte per poter applicare ulteriore personalizzazione.In both cases, however, the underlying stored procedures that provide the core functionality have been exposed so that further customization is possible.

Change Data Capture non funziona correttamente quando il servizio Motore di database o SQL Server Agent è in esecuzione con l'account NETWORK SERVICE.Change data capture cannot function properly when the Database Engine service or the SQL Server Agent service is running under the NETWORK SERVICE account. Questa situazione può generare l'errore 22832.This can result in error 22832.

Vedere ancheSee Also

Rilevare le modifiche ai dati (SQL Server) Track Data Changes (SQL Server)
Abilitare e disabilitare Change Data Capture (SQL Server) Enable and Disable Change Data Capture (SQL Server)
Utilizzare i dati delle modifiche (SQL Server) Work with Change Data (SQL Server)
Amministrare e monitorare Change Data Capture (SQL Server) Administer and Monitor Change Data Capture (SQL Server)