Sdílet prostřednictvím


CDC.<capture_instance>_CT (Transact-SQL)

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Tabulka změn vytvořená při zachycování dat změn je povolena ve zdrojové tabulce. Tabulka vrací jeden řádek pro každou operaci vložení a mazání provedenou nad zdrojovou tabulkou a dva řádky pro každou aktualizační operaci provedenou na zdrojové tabulce. Pokud název tabulky změn není v době zapnutí zdrojové tabulky zadán, název je odvozen. Formát názvu je cdc. capture_instance_CT kde capture_instance je název schématu zdrojové tabulky a název zdrojové tabulky ve formátu schema_table. Například pokud je tabulka Person.Address v databázi AdventureWorks povolena pro zachycení změn, odvozený název tabulky změn by byl cdc.Person_Address_CT.

Doporučujeme, abyste nedotazovali přímo systémové tabulky. Místo toho spusťte funkce cdc.fn_cdc_get_all_changes_<capture_instance> a cdc.fn_cdc_get_net_changes_<capture_instance> .

Název sloupce Datový typ Description
__$start_lsn binary(10) Logové sekvenční číslo (LSN) spojené s transakcí pro změnu pro commit.

Všechny změny provedené ve stejné transakci sdílejí stejný commit LSN. Například pokud operace odstranění na zdrojové tabulce odstraní dva řádky, změnová tabulka obsahuje dva řádky, každý se stejnou hodnotou __$start_lsn .
__$end_lsn binary(10) Určeno pouze pro informační účely. Není podporováno. Budoucí kompatibilita není zaručena.

V SQL Server 2012 (11.x) je tento sloupec vždy NULL.
__$seqval binary(10) Sekvence operace je znázorněna v transakčním logu. Nemělo by se používat k objednávání. Místo toho použijte sloupec __$command_id .
__$operace int Identifikuje operaci jazyka pro manipulaci s daty (DML) spojenou se změnou. Může to být jedna z následujících možností:

1 = smazat

2 = vložit

3 = aktualizace (staré hodnoty)

Data sloupců mají řádkové hodnoty před vykonáním příkazu update.

4 = aktualizace (nové hodnoty)

Data sloupců mají řádkové hodnoty po provedení příkazu update.
__$update_mask varbinary(128) Bitová maska založená na sloupcových ordinálech tabulky změn, která identifikuje ty sloupce, které se změnily.
<Zachycené sloupce zdrojové tabulky> liší se Zbývající sloupce v tabulce změn jsou sloupce ze zdrojové tabulky, které byly identifikovány jako zachycené sloupce při vytvoření instance zachycení. Pokud v seznamu zachycených sloupců nebyly zadány žádné sloupce, všechny sloupce ve zdrojové tabulce jsou zahrnuty v této tabulce.
__$command_id int Sleduje pořadí operací v rámci transakce.

Poznámky

Sloupec __$command_id byl zaveden v kumulativní aktualizaci ve verzích 2012 až 2016. Pro informace o verzi a stažení viz článek 3030352 KB na FIX: Tabulka změn je nesprávně uspořádána pro aktualizované řádky poté, co povolíte zachycení dat změn pro databázi Microsoft SQL Server. Pro více informací viz funkčnost CDC může po upgradu na nejnovější CU pro SQL Server 2012, 2014 a 2016 přestat fungovat.

Typy zachycených sloupců

Zachycené sloupce zahrnuté v této tabulce mají stejný datový typ a hodnotu jako jejich odpovídající zdrojové sloupce, s následujícími výjimkami:

  • Sloupce časových razítek jsou definovány jako binární(8).

  • Identitní sloupce jsou definovány jako int nebo bigint.

Hodnoty v těchto sloupcích jsou však stejné jako hodnoty ve zdrojových sloupcích.

Typy dat velkých objektů

Sloupce datových typů image, text a ntext jsou vždy přiřazeny hodnotě NULL , když __$operation = 1 nebo __$operation = 3. Sloupce datového typu varbinary(max),varchar(max) nebo nvarchar(max) jsou přiřazeny jako NULL hodnota, když __$operation = 3, pokud se sloupec během aktualizace nezměnil. Když __$operace = 1, jsou tyto sloupce přiřazeny v době mazání. Vypočtené sloupce, které jsou zahrnuty v zachycení instance, vždy mají hodnotu NULL.

Ve výchozím nastavení je maximální velikost, kterou lze přidat k zachycenému sloupci v jednom příkazu INSERT, UPDATE, WRITETEXT nebo UPDATETEXT, 65 536 bajtů nebo 64 KB. Pro zvětšení této velikosti pro podporu větších LOB dat použijte možnost konfigurace serveru Konfigurovat maximální velikost textového repl pro určení větší maximální velikosti. Pro více informací viz Konfigurace maximální velikosti textového repl v možnosti konfigurace serveru.

Úpravy jazyka pro definici dat

DDL úpravy zdrojové tabulky, jako je přidávání nebo vyhazování sloupců, jsou zaznamenávány v tabulce cdc.ddl_history . Tyto změny se na tabulku změn neaplikují. To znamená, že definice tabulky změn zůstává konstantní. Při vkládání řádků do tabulky změn proces zachycení ignoruje ty sloupce, které se neobjevují v seznamu zachycených sloupců spojených se zdrojovou tabulkou. Pokud se v zachyceném seznamu sloupců objeví sloupec, který již není ve zdrojové tabulce, je mu přiřazena nulová hodnota.

Změna datového typu sloupce ve zdrojové tabulce je také zaznamenána v tabulce cdc.ddl_history . Tato změna však mění definici tabulky změn. Datový typ zachyceného sloupce v tabulce změn se upraví, když proces zachycení narazí na záznam logu pro změnu DDL ve zdrojové tabulce.

Pokud potřebujete upravit datový typ zachyceného sloupce ve zdrojové tabulce tak, aby se zmenšila velikost datového typu, použijte následující postup, abyste zajistili, že ekvivalentní sloupec v tabulce změn může být úspěšně upraven.

  1. Ve zdrojové tabulce aktualizujte hodnoty ve sloupci, který má být upraven, aby odpovídaly plánované velikosti datového typu. Například pokud změníte datový typ z int na smallint, aktualizujte hodnoty na velikost, která se vejde do rozsahu smallint , od -32 768 do 32 767.

  2. V tabulce změn proveďte stejnou aktualizační operaci na ekvivalentní sloupec.

  3. Upravte zdrojovou tabulku zadáním nového datového typu. Změna datového typu je úspěšně propagována do tabulky změn.

Úpravy jazyka pro manipulaci s daty

Když jsou operace vkládání, aktualizace a mazání prováděny ve zdrojové tabulce s povolenou zachycováním změn dat, záznam těchto DML operací se objeví v databázovém transakčním logu. Proces zachycování dat změn získává informace o těchto změnách z transakčního logu a přidává do tabulky změn buď jeden nebo dva řádky, aby změnu zaznamenal. Položky jsou přidávány do tabulky změn ve stejném pořadí, v jakém byly uloženy do zdrojové tabulky. To znamená, že commit záznamů v tabulce změn musí být obvykle proveden na jedné skupině změn, nikoli na každém záznamu.

Operace vložení vede k přidání jednoho řádku do tabulky změn; operace mazání vede k přidání jednoho řádku do tabulky změn; pokud SQL Server implementuje aktualizaci jako "odloženou aktualizaci", což znamená dvojici operací mazání a vkládání, operace aktualizace vede k přidání dvou řádků do tabulky změn: první řádek odráží smazání zachycených dat a druhý řádek odráží vložení aktualizovaných, zachycených dat; pokud SQL Server neimplementuje aktualizaci jako "odloženou aktualizaci", operace aktualizace vede k přidání dvou řádků do tabulky změn: první řádek odráží zachycená data před aktualizací a druhý řádek odráží zachycená data po aktualizaci.

V rámci položky tabulky změn se sloupec __$start_lsn používá k zaznamenání LSN commitu spojeného se změnou ve zdrojové tabulce, sloupec __$command_id slouží k pořadí změny v rámci transakce a sloupec __$operation k zaznamenání provedené operace. Tyto sloupce metadat lze společně použít k zajištění zachování pořadí potvrzení změn zdroje. Protože proces zachycování získává informace o změnách z transakčního logu, je důležité si uvědomit, že záznamy v tabulce změn se neobjevují synchronně s odpovídajícími změnami v zdrojové tabulce. Místo toho se odpovídající změny objevují asynchronně poté, co proces zpracování relevantních záznamů změn z transakčního logu zpracuje.

Pro operace vkládání a mazání jsou všechny bity v aktualizační masce nastaveny. Pro aktualizační operace bude aktualizační maska v řádcích aktualizace starého i nového aktualizace upravena tak, aby odrážela sloupce, které se během aktualizace změnily.

Viz také

sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-SQL)