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


cdc.<экземпляр_отслеживания>_CT (Transact-SQL)

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

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

Имя столбца

Тип данных

Описание

__$start_lsn

binary(10)

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

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

__$end_lsn

binary(10)

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

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

__$seqval

binary(10)

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

__$operation

int

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

1 = удаление.

2 = вставка

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

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

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

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

__$update_mask

varbinary(128)

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

<столбцы отслеживаемой исходной таблицы>

непостоянно

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

Замечания

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

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

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

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

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

В этом выпуске типы данных, представленные в SQL Server 2008, не поддерживаются.

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

Для объектов LOB, имеющих типы данных varchar(max), nvarchar(max), varbinary(max), image, text, ntext и xml, старые значения появляются только в старой строке обновления, если столбец действительно изменился во время обновления. Для остальных типов данных значение столбца всегда появляется в обеих строках обновления.

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

Изменения, внесенные с помощью языка 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 используется для определения порядка изменения в рамках транзакции. С помощью этих столбцов метаданных в совокупности можно обеспечить сохранность порядка фиксации исходных изменений. Поскольку сведения об изменениях в процессе отслеживания извлекаются из журнала транзакций, важно отметить, что записи таблицы изменений не отображаются синхронно с соответствующими изменениями в исходной таблице. Вместо этого, такие изменения отображаются асинхронно после того, как процессом отслеживания обработаны соответствующие записи об изменениях из журнала транзакций.

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