Поделиться через


cdc.<>capture_instance_CT (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Таблица изменений, созданная при включении записи измененных данных в исходной таблице. Эта таблица содержит по одной строке для каждой операции вставки и удаления в исходной таблице и по две строки для каждой операции обновления в исходной таблице. Если имя таблицы изменений не указано во время включения исходной таблицы, имя является производным. Формат имени — cdc.capture_instance_CT где capture_instance — имя схемы исходной таблицы и имя исходной таблицы в формате schema_table. Например, если таблица Person.Address в примере базы данных AdventureWorks включена для отслеживания измененных данных, то производное имя таблицы изменений будет cdc.Person_Address_CT.

Рекомендуется не запрашивать системные таблицы напрямую. Вместо этого выполните функции cdc.fn_cdc_get_all_changes_<capture_instance> и cdc.fn_cdc_get_net_changes_<capture_instance>.

Имя столбца Тип данных Description
__$start_lsn binary(10) Регистрационный номер транзакции в журнале (LSN), связанный с фиксацией транзакции изменения.

Все изменения, зафиксированные в одной транзакции, имеют общий номер LSN фиксации. Например, если операция удаления в исходной таблице удаляет две строки, таблица изменений содержит две строки, каждая из которых имеет одно и то же значение __$start_lsn .
__$end_lsn binary(10) Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

В SQL Server 2012 (11.x) этот столбец всегда имеет значение NULL.
__$seqval binary(10) Последовательность операции, представленной в журнале транзакций. Не следует использовать для упорядочивания. Вместо этого используйте столбец __$command_id .
__$operation int Определяет операцию языка обработки данных (DML), связанную с изменением. Может применяться один из перечисленных ниже типов.

1 = удаление

2 = вставка

3 = обновление (старые значения)

Перед выполнением инструкции обновления в данных столбца содержатся эти значения строк.

4 = обновление (новые значения)

После выполнения инструкции обновления в данных столбца содержатся эти значения строк.
__$update_mask varbinary(128) Битовая маска, основанная на порядковых номерах измененных столбцов в таблице изменений.
<отслеживаемые столбцы исходной таблицы> Различается Остальные столбцы в таблице изменений — это столбцы из исходной таблицы, определенные, как отслеживаемые при создании экземпляра отслеживания. Если в списке отслеживаемых столбцов не указано ни одного столбца, в эту таблицу включаются все столбцы из исходной таблицы.
__$command_id int Отслеживает порядок операций в транзакции.

Замечания

Столбец __$command_id появился в накопительном обновлении в версиях 2012–2016. Сведения о версии и скачивании см. в статье базы знаний 3030352 в FIX: таблица изменений упорядочена неправильно для обновленных строк после включения записи измененных данных для базы данных Microsoft SQL Server. Дополнительные сведения см. в статье о функциональных возможностях CDC после обновления до последней версии CU для SQL Server 2012, 2014 и 2016.

Типы данных отслеживаемых столбцов

Отслеживаемые столбцы, включенные в эту таблицу, имеют те же типы данных и значения, что и соответствующие им столбцы в исходной таблице, за следующими исключениями.

  • Столбцы метки времени определяются как binary(8).

  • Столбцы удостоверений определяются как int или bigint.

Однако значения этих столбцов совпадают со значениями столбцов в исходной таблице.

Типы данных больших объектов

Столбцы изображения типа данных, текста и ntext всегда назначают значение NULL, если операция __$= 1 или __$operation = 3. Столбцы типа данных varbinary(max), varchar(max)или nvarchar(max) назначаются значение NULL , если __$operation = 3, если только столбец не изменился во время обновления. Если операция __$= 1, эти столбцы присваиваются их значению во время удаления. Вычисляемые столбцы, включенные в экземпляр записи, всегда имеют значение NULL.

По умолчанию максимальный объем данных, которые можно добавить в столбец, отслеженный с помощью одной инструкции INSERT, UPDATE, WRITETEXT или UPDATETEXT, не должен превышать 65 536 байт или 64 КБ. Чтобы увеличить этот размер для поддержки больших бизнес-данных, используйте параметр конфигурации сервера максимального размера текста repl, чтобы указать максимальный максимальный размер. Дополнительные сведения см. в статье Настройка параметра конфигурации сервера max text repl size.

Изменения, внесенные с помощью языка DDL

Изменения DDL в исходной таблице, такие как добавление или удаление столбцов, записываются в таблицу cdc.ddl_history . Эти изменения не применяются к таблице изменений. То есть определение таблицы изменений остается постоянным. При вставке строк в таблицу изменений процесс записи игнорирует те столбцы, которые не отображаются в списке захваченных столбцов, связанном с исходной таблицей. Если в списке отслеживаемых столбцов появляется столбец, больше не присутствующий в исходной таблице, этому столбцу присваивается значение NULL.

Изменение типа данных столбца в исходной таблице также записывается в таблицу cdc.ddl_history . Тем не менее, это изменение не затрагивает определение таблицы изменений. Тип данных отслеживаемого столбца в таблице изменений меняется, если процесс отслеживания найдет запись журнала, относящуюся к изменению на языке DDL, внесенному в исходную таблицу.

Если нужно изменить тип данных отслеживаемого столбца в исходной таблице способом, который сократил бы размер этого типа данных, используется следующая процедура, которая обеспечивает успешное изменение соответствующего столбца в таблице изменений.

  1. В исходной таблице обновите значения изменяемого столбца, чтобы они соответствовали нужному размеру типа данных. Например, если изменить тип данных с int на smallint, обновите значения до размера, подходящего для небольшого диапазона, -32 768 до 32 767.

  2. В таблице изменений выполните такую же операцию обновления в эквивалентном столбце.

  3. Измените исходную таблицу, задав новый тип данных. Изменение типа данных распространяется на таблицу изменений.

Изменения, внесенные с помощью языка обработки данных

При выполнении операций вставки, обновления и удаления в исходной таблице с включенной системой отслеживания измененных данных записи об этих операциях DML фиксируются в журнале транзакций базы данных. Процесс отслеживания измененных данных получает сведения об этих изменениях из журнала транзакций и добавляет одну или две строки в таблицу изменений для записи изменения. Записи добавляются в таблицу изменений в том же порядке, что они были зафиксированы в исходной таблице. Тем не менее, фиксация записей таблицы изменений обычно должна выполняться в группе изменений, а не на каждую запись.

Операция вставки приводит к добавлению одной строки в таблицу изменений; Операция удаления приводит к добавлению одной строки в таблицу изменений; Если SQL Server реализует обновление как "отложенное обновление", то есть как пара операций удаления и вставки, операция обновления приводит к двум строкам, добавленным в таблицу изменений: первая строка, отражающая удаление захваченных данных, и вторая строка, отражающая вставку обновленных, захваченных данных; Если SQL Server не реализует обновление как "отложенное обновление", операция обновления приводит к двум строкам, добавленным в таблицу изменений: первая строка, отражающая захваченные данные перед обновлением, и вторая строка, отражающая захваченные данные после обновления.

В записи таблицы изменений столбец __$start_lsn используется для записи LSN фиксации, связанной с изменением исходной таблицы, столбец __$command_id используется для упорядочивания изменений в своей транзакции, а для записи выполненной операции используется столбец операции __$. С помощью этих столбцов метаданных в совокупности можно обеспечить сохранность порядка фиксации исходных изменений. Так как процесс отслеживания получает сведения об изменениях из журнала транзакций, важно отметить, что записи таблицы изменений не отображаются синхронно с соответствующими изменениями исходной таблицы. Вместо этого, такие изменения отображаются асинхронно после того, как процессом отслеживания обработаны соответствующие записи об изменениях из журнала транзакций.

Для операций вставки и удаления устанавливаются все биты в маске обновления. Для операций обновления маска обновления как в старой строке обновления, так и в новой меняется, чтобы отразить столбцы, изменившиеся во время обновления.

См. также

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