Attività di controllo CDCCDC Control Task

L'attività di controllo CDC viene utilizzata per controllare il ciclo di vita di pacchetti Change Data Capture (CDC).The CDC Control task is used to control the life cycle of change data capture (CDC) packages. Questa attività consente di gestire la sincronizzazione del pacchetto CDC con il pacchetto di caricamento iniziale e la gestione di intervalli di numeri di sequenza del file di log (LSN) elaborati in un'esecuzione di un pacchetto CDC.It handles CDC package synchronization with the initial load package, the management of Log Sequence Number (LSN) ranges that are processed in a run of a CDC package. L'attività di controllo CDC, inoltre, consente di gestire gli scenari di errore e il recupero da errori.In addition, the CDC Control task deals with error scenarios and recovery.

L'attività di controllo CDC consente di gestire lo stato del pacchetto CDC in una variabile del pacchetto SSIS e di renderlo persistente in una tabella di database, in modo che lo stato venga mantenuto tra attivazioni del pacchetto e tra più pacchetti che eseguono insieme un processo CDC comune. Un'attività, ad esempio, può essere responsabile del caricamento iniziale e l'altra degli aggiornamenti trickle-feed.The CDC Control task maintains the state of the CDC package in an SSIS package variable and it can also persist it in a database table so that the state is maintained across package activations and between multiple packages that together perform a common CDC process (for example, one task may be responsible for the initial loading and the other for the trickle-feed updates).

L'attività di controllo CDC supporta due gruppi di operazioni.The CDC Control task supports two groups of operations. Mediante un gruppo viene gestita la sincronizzazione del caricamento iniziale e dell'elaborazione delle modifiche; mediante l'altro gruppo viene gestito l'intervallo di elaborazione delle modifiche degli LSN per un'esecuzione di un pacchetto CDC e di tenere traccia degli elementi elaborati correttamente.One group handles the synchronization of initial load and change processing, and the other manages the change-processing range of LSNs for a run of a CDC package and keeps track of what was processed successfully.

Nelle operazioni seguenti viene gestita la sincronizzazione del caricamento iniziale e dell'elaborazione delle modifiche:The following operations handle the synchronization of initial load and change processing:

OperazioneOperation DescriptionDescription
ResetCdcStateResetCdcState Questa operazione viene utilizzata per reimpostare lo stato CDC persistente associato al contesto CDC corrente.This operation is used to reset the persistent CDC state associated with the current CDC context. Dopo l'esecuzione di questa operazione, l'LSN massimo corrente della tabella LSN-timestamp sys.fn_cdc_get_max_lsn diventa l'inizio dell'intervallo di elaborazione successivo.After this operation is run, the current maximum LSN from the LSN-timestamp sys.fn_cdc_get_max_lsn table becomes the start of the range for the next processing range. Per questa operazione è necessaria una connessione al database di origine.This operation requires a connection to the source database.
MarkInitialLoadStartMarkInitialLoadStart Questa operazione viene utilizzata all'inizio di un pacchetto di caricamento iniziale per registrare l'LSN corrente nel database di origine prima che tramite il pacchetto di caricamento iniziale venga avviata la lettura delle tabelle di origine.This operation is used at the beginning of an initial-load package to record the current LSN in the source database before the initial-load package starts reading the source tables. Per questa operazione è necessaria una connessione al database di origine per chiamare sys.fn_cdc_get_max_lsn.This requires a connection to the source database to call sys.fn_cdc_get_max_lsn.

Se si seleziona MarkInitialLoadStart quando si usa CDC di SQL Server 2017SQL Server 2017 , ovvero non di Oracle, l'utente specificato nella gestione connessione deve essere db_owner o sysadmin.If you select MarkInitialLoadStart when working on SQL Server 2017SQL Server 2017 CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.
MarkInitialLoadEndMarkInitialLoadEnd Questa operazione viene utilizzata alla fine di un pacchetto di caricamento iniziale per registrare l'LSN corrente nel database di origine dopo che il pacchetto di caricamento iniziale completa la lettura delle tabelle di origine.This operation is used at the end of an initial-load package to record the current LSN in the source database after the initial-load package finished reading the source tables. Questo LSN viene determinato registrando la data e l'ora correnti in cui si è verificata l'operazione ed eseguendo quindi una query sulla tabella di mapping cdc.lsn_time_nel database CDC per trovare una modifica successiva alla data e all'ora.This LSN is determined by recording the current time when this operation occurred and then querying the cdc.lsn_time_mapping table in the CDC database looking for a change that occurred after that time.

Se si seleziona MarkInitialLoadEnd quando si usa CDC di SQL Server 2017SQL Server 2017 , ovvero non di Oracle, l'utente specificato nella gestione connessione deve essere db_owner o sysadmin.If you select MarkInitialLoadEnd when working on SQL Server 2017SQL Server 2017 CDC (that is , not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.
MarkCdcStartMarkCdcStart Questa operazione viene utilizzata quando il caricamento iniziale viene eseguito da un database snapshot.This operation is used when then the initial load is made from a snapshot database. In questo caso, l'elaborazione delle modifiche deve iniziare immediatamente dopo l'LSN dello snapshot.In this case, the change processing should start immediately after the snapshot LSN. È possibile specificare il nome del database snapshot da utilizzare e l'attività di controllo CDC esegue una query su SQL Server 2017SQL Server 2017 per trovare l'LSN dello snapshot.You can specify the name of the snapshot database to use and the CDC Control task queries SQL Server 2017SQL Server 2017 for the snapshot LSN. È inoltre possibile scegliere di specificare direttamente l'LSN dello snapshot.You also have the option to directly specify the snapshot LSN.

Se si seleziona MarkCdcStart quando si usa CDC di SQL Server 2017SQL Server 2017 , ovvero non di Oracle, l'utente specificato nella gestione connessione deve essere db_owner o sysadmin.If you select MarkCdcStart when working on SQL Server 2017SQL Server 2017 CDC (that is , not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

Le operazioni seguenti vengono utilizzate per gestire l'intervallo di elaborazione:The following operations are used to manage the processing range:

OperazioneOperation DescriptionDescription
GetProcessingRangeGetProcessingRange Questa operazione viene utilizzata prima di richiamare il flusso di dati che utilizza il flusso di dati dell'origine CDC.This operation is used before invoking the data flow that uses the CDC Source data flow. L'operazione consente di stabilire un intervallo di LSN letti dal flusso di dati dell'origine CDC quando il flusso di dati viene richiamato.It establishes a range of LSNs that the CDC Source data flow reads when invoked. L'intervallo viene archiviato in una variabile del pacchetto SSIS utilizzata dall'origine CDC durante l'elaborazione del flusso di dati.The range is stored in an SSIS package variable that is used by the CDC Source during data-flow processing.

Per altre informazioni sugli stati che vengono archiviati, vedere Definire una variabile di stato.For more information about the states that are stored, see Define a State Variable.
MarkProcessedRangeMarkProcessedRange Questa operazione avviene dopo ogni esecuzione CDC (una volta completato il flusso di dati CDC) per registrare l'ultimo LSN elaborato completamente nell'esecuzione CDC.: This operation is executed after each CDC run (after the CDC data flow is completed successfully) to record the last LSN that was fully processed in the CDC run. Alla successiva esecuzione di GetProcessingRange, questa posizione corrisponde all'inizio dell'intervallo di elaborazione.The next time GetProcessingRange is executed, this position is the start of the processing range.

Gestione della persistenza dello stato CDCHandling CDC State Persistency

L'attività di controllo CDC consente di gestire uno stato persistente tra attivazioni.The CDC Control task maintains a persistent state between activations. Le informazioni archiviate nello stato CDC vengono utilizzate per determinare e gestire l'intervallo di elaborazione per il pacchetto CDC e per il rilevamento di eventuali condizioni di errore.The information stored in the CDC state is used to determine and maintain the processing range for the CDC package and for detecting error conditions. Lo stato persistente viene archiviato come stringa.The persistent state is stored as a string. Per altre informazioni, vedere Definire una variabile di stato.For more information, see Define a State Variable.

L'attività di controllo CDC supporta due tipi di persistenza dello statoThe CDC Control task supports two types of state persistency

  • Persistenza dello stato manuale: in questo caso, l'attività di controllo CDC gestisce lo stato archiviato in una variabile del pacchetto, ma lo sviluppatore del pacchetto deve leggere la variabile da un archivio persistente prima di chiamare il controllo CDC e quindi riscriverla nell'archivio persistente dopo l'ultima chiamata del controllo CDC e il completamento dell'esecuzione CDC.Manual State Persistency: In this case, the CDC Control task manages the state stored in a package variable but the package developer must read the variable from a persistent store before calling the CDC Control and then write it back to that persistent store after the CDC Control is last called and the CDC run completes.

  • Persistenza dello stato automatica: lo stato CDC viene archiviato in una tabella di un database.Automatic State Persistency: The CDC state is stored in a table in a database. Lo stato viene archiviato con un nome specificato nella proprietà StateName in una tabella denominata nella proprietà Table to Use for Storing State , inclusa in una gestione connessione selezionata per l'archiviazione dello stato.The state is stored under a name provided in the StateName property in a table named in the Table to Use for Storing State property, which is located in a selected connection manager for storing the state. Il valore predefinito è la gestione connessione di origine, ma secondo la pratica comune è consigliabile impostare il valore sulla gestione connessione di destinazione.The default is the source connection manager but the common practice is for it to be the target connection manager. Tramite l'attività di controllo CDC viene aggiornato il valore di stato nella tabella di stato e viene eseguito il commit di tale valore come parte della transazione di ambiente.The CDC Control task updates the state value in the state table and this is committed as part of the ambient transaction.

Gestione degli erroriError Handling

È possibile che l'attività di controllo CDC restituisca un errore nei casi seguenti:The CDC Control task may report an error when:

  • Non è possibile leggere lo stato CDC persistente o l'aggiornamento dello stato persistente non riesce.It fails to read the persistent CDC state or when updating the persistent state fails.

  • Non è possibile leggere le informazioni LSN correnti dal database di origine.It fails to read the current LSN information from the source database.

  • Lo stato CDC letto non è coerente.The CDC state read is not consistent.

    In tutti questi casi, l'attività di controllo CDC restituisce un errore che può essere gestito tramite la modalità standard di gestione degli errori del flusso di controllo in SSIS.In all of these cases, the CDC Control task reports an error that can be handled in the standard way SSIS handles control-flow errors.

    L'attività di controllo CDC può inoltre restituire un avviso quando l'operazione GetProcessingRange viene richiamata direttamente dopo un'altra operazione GetProcessingRange senza che venga chiamata l'operazione MarkProcessedRange.The CDC Control task may also report a warning when the Get Processing Range operation is invoked directly after another Get Processing Range operation without Mark Processed Range being called. Ciò indica che l'esecuzione precedente non è riuscita o che è possibile che un altro pacchetto CDC con lo stesso nome di stato CDC sia in esecuzione.This is an indication that the previous run failed or that another CDC package may be running using the same CDC state name.

Configurazione dell'attività di controllo CDCConfiguring the CDC Control Task

È possibile impostare le proprietà tramite Progettazione SSIS o a livello di codice.You can set properties through SSIS Designer or programmatically.

Contenuto della sezioneIn This Section

Definire una variabile di statoDefine a State Variable