cdc.<capture_instance>_CT (Transact-SQL)
Tabella delle modiche creata quando Change Data Capture è abilitato in una tabella di origine. La tabella restituisce una riga per ogni operazione di inserimento ed eliminazione eseguita nella tabella di origine e due righe per ogni operazione di aggiornamento eseguita nella tabella di origine. Se non viene specificato al momento dell'abilitazione della tabella di origine, il nome della tabella delle modifiche viene derivato. Il formato del nome è cdc.capture_instance_CT dove capture_instance è il nome dello schema della tabella di origine e il nome della tabella di origine nel formato schema_table. Se, ad esempio, la tabella Person.Address nel database di esempio AdventureWorks è abilitata per Change Data Capture, il nome della tabella delle modifiche derivato è cdc.Person_Address_CT.
È consigliabile non eseguire una query direttamente sulle tabelle di sistema. Eseguire invece le funzioni cdc.fn_cdc_get_all_changes_<capture_instance> e cdc.fn_cdc_get_net_changes_<capture_instance>.
Nome colonna |
Tipo di dati |
Descrizione |
---|---|---|
__$start_lsn |
binary(10) |
Numero di sequenza del file di log (LSN) associato alla transazione commit per la modifica. Tutte le modifiche di cui è stato eseguito il commit nella stessa transazione condividono lo stesso valore LSN di commit. Se ad esempio un'operazione di eliminazione nella tabella di origine rimuove due righe, la tabella delle modifiche conterrà due righe, ognuna con lo stesso valore __$start_lsn. |
__$end_lsn |
binary(10) |
Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future. In SQL Server 2012 questa colonna è sempre a NULL. |
__$seqval |
binary(10) |
Valore di sequenza utilizzato per ordinare le modifiche a una riga all'interno di una transazione. |
__$operation |
int |
Identifica l'operazione DML (Data Manipulation Language) associata alla modifica. I possibili valori sono i seguenti: 1 = eliminazione 2 = inserimento 3 = aggiornamento (valori obsoleti) I dati della colonna includono valori di riga prima dell'esecuzione dell'istruzione di aggiornamento. 4 = aggiornamento (valori nuovi) I dati della colonna includono valori di riga dopo l'esecuzione dell'istruzione di aggiornamento. |
__$update_mask |
varbinary(128) |
Maschera di bit basata su numeri ordinali di colonna della tabella delle modifiche che identificano le colonne modificate. |
<captured source table columns> |
variabile |
Le colonne rimanenti della tabella delle modifiche sono le colonne della tabella di origine identificate come colonne acquisite durante la creazione dell'istanza di acquisizione. Se non è stata specificata alcuna colonna nell'elenco delle colonne acquisite, tutte le colonne della tabella di origine vengono incluse in questa tabella. |
Osservazioni
Tipi di dati delle colonne acquisite
Le colonne acquisite incluse in questa tabella hanno lo stesso tipo di dati e valore delle corrispondenti colonne di origine, con le seguenti eccezioni:
Le colonne Timestamp sono definite come binary(8).
Le colonne Identity sono definite come int oppure bigint.
Tuttavia, i valori in queste colonne sono uguali ai valori della colonna di origine.
Tipi di dati per oggetti di grandi dimensioni:
Alle colonne con tipi di dati image, text e ntext viene sempre assegnato un valore NULL quando __$operation = 1 o __$operation = 3. Alle colonne con tipi di dati varbinary(max), varchar(max) o nvarchar(max) viene assegnato un valore NULL quando __$operation = 3 a meno che la colonna non sia stata modificata durante l'aggiornamento. Quando __$operation = 1, a queste colonne vengono assegnati i rispettivi valori durante l'eliminazione. Le colonne calcolate incluse in un'istanza di acquisizione hanno sempre un valore NULL.
Per impostazione predefinita, la dimensione massima che può essere aggiunta a una colonna acquista in una singola istruzione INSERT, UPDATE, WRITETEXT o UPDATETEXT è pari a 65.536 byte o 64 KB Per aumentare questa dimensione per supportare i dati LOB di maggiori dimensioni, utilizzare l'Configurare l'opzione di configurazione del server max text repl size per specificare una dimensione massima più grande. Per ulteriori informazioni, vedere Configurare l'opzione di configurazione del server max text repl size.
Modifiche DDL
Le modifiche DDL alla tabella di origine, ad esempio l'aggiunta o l'eliminazione di colonne, sono registrate nella tabella cdc.ddl_history. Queste modifiche non sono applicate alla tabella delle modifiche, ossia la definizione della tabella delle modifiche rimane costante. Nel caso di inserimento di righe nella tabella delle modifiche, il processo di acquisizione ignora le colonne che non sono visualizzate nell'elenco di colonne acquisite associate alla tabella di origine. Se una colonna è visualizzata nell'elenco di colonne acquisite che non compare più nella tabella di origine, alla colonna viene assegnato un valore Null.
La modifica del tipo di dati di una colonna nella tabella di origine è registrato anche nella tabella cdc.ddl_history. Tuttavia, questa modifica non altera la definizione della tabella delle modifiche. Il tipo di dati della colonna acquisita nella tabella delle modifiche viene modificato quando il processo di acquisizione incontra il record del log per la modifica DDL apportata alla tabella di origine.
Se è necessario modificare il tipo di dati di una colonna acquisita nella tabella di origine in una modalità che decresce la dimensione del tipo di dati, utilizzare la procedura descritta di seguito per assicurasi che la colonna equivalente nella tabella delle modifiche possa essere modificata correttamente.
Nella tabella di origine, aggiornare i valori nella colonna da modificare per adattarli nella dimensione del tipo di dati pianificata. Ad esempio, se si imposta il tipo di dati da int a smallint, aggiornare i valori a una dimensione che rientra nell'intervallo smallint, da -32,768 a 32,767.
Nella tabella delle modifiche, eseguire la stessa operazione di aggiornamento alla colonna equivalente.
Modificare la tabella di origine specificando il nuovo tipo di dati. La modifica del tipo di dati è propagata correttamente alla tabella delle modifiche.
Modifiche DML
Quando su una tabella di origine abilitata per Change Data Capture vengono eseguite operazioni di inserimento, aggiornamento ed eliminazione, nel log delle transazioni del database viene visualizzato un record relativo a tali operazioni DML. Il processo di acquisizione Change Data Capture recupera le informazioni su tali modifiche dal log delle transazioni e aggiunge una o due righe alla tabella delle modifiche per registrare la modifica stessa. Le voci vengono aggiunte alla tabella delle modifiche nello stesso ordine in cui è stato eseguito il relativo commit nella tabella di origine, anche se il commit delle voci della tabella delle modifiche deve essere eseguito in genere per un gruppo di modifiche anziché per una voce singola.
In una voce della tabella delle modifiche la colonna __$start_lsn viene utilizzata per registrare il numero LSN di commit associato alla modifica nella tabella di origine, mentre la colonna __$seqval column viene utilizzata per ordinare la modifica all'interno della relativa transazione. Nel loro complesso queste colonne di metadati possono essere utilizzate per garantire che venga mantenuto l'ordine di commit delle modifiche di origine. Poiché il processo di acquisizione ottiene le informazioni relative alle modifiche dal log delle transazioni, è importante notare che le voci della tabella delle modifiche non vengono visualizzate in modo sincrono con le modifiche della tabella di origine corrispondenti. Al contrario, le modifiche corrispondenti vengono visualizzate in modo asincrono dopo che il processo di acquisizione ha elaborato le voci di modifica attinenti dal log delle transazioni.
Per le operazioni di inserimento ed eliminazione, sono impostati tutti i bit della maschera di aggiornamento. Per le operazioni di aggiornamento, la maschera di aggiornamento sia nelle vecchie righe aggiornate obsolete che nelle righe di nuovo aggiornamento sarà modificata per riflettere le colonne modificate durante l'aggiornamento.