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


cdc.<capture_instance>_CT (Transact-SQL)

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

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

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Имя столбца

Тип данных

Описание

__$start_lsn

binary(10)

Регистрационный номер транзакции в журнале (LSN), связанный с фиксацией транзакции изменения.

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

__$end_lsn

binary(10)

Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

В SQL Server 2012 этот столбец всегда имеет значение NULL.

__$seqval

binary(10)

Значение последовательности, используемое для упорядочивания изменений строк в пределах транзакции.

__$operation

int

Определяет операцию языка обработки данных (DML), связанную с изменением. Возможен один из следующих вариантов:

1 = удаление.

2 = вставка

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

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

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

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

__$update_mask

varbinary(128)

Битовая маска, основанная на порядковых номерах измененных столбцов в таблице изменений.

<captured source table columns>

непостоянно

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

Замечания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Справочник

sys.sp_cdc_enable_table (Transact-SQL)

sys.sp_cdc_get_ddl_history (Transact-SQL)