Об отслеживании измененных данных (SQL Server)About Change Data Capture (SQL Server)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server (начиная с 2008)даБаза данных SQL Azure (только управляемый экземпляр)нетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

Система отслеживания измененных данных регистрирует операции вставки, обновления и удаления, которые применяются к таблице SQL ServerSQL Server .Change data capture records insert, update, and delete activity that is applied to a SQL ServerSQL Server table. Тем самым обеспечивается доступ к подробностям этих изменений в легко обрабатываемом реляционном формате.This makes the details of the changes available in an easily consumed relational format. Сведения о столбцах и метаданных, которые требуются для применения изменений к целевой среде, отслеживаются в измененных строках и хранятся в таблицах изменений, отражающих структуру столбцов исходных таблиц.Column information and the metadata that is required to apply the changes to a target environment is captured for the modified rows and stored in change tables that mirror the column structure of the tracked source tables. Чтобы потребители данных могли систематически получать доступ к информации об изменениях, предоставляются функции с табличным значением.Table-valued functions are provided to allow systematic access to the change data by consumers.

Хорошим примером потребителя данных, для которого предназначена эта технология, является приложение для извлечения, преобразования и загрузки данных (ETL).A good example of a data consumer that is targeted by this technology is an extraction, transformation, and loading (ETL) application. ETL-приложение постепенно загружает информацию об изменениях из исходных таблиц SQL ServerSQL Server в хранилище или витрину данных.An ETL application incrementally loads change data from SQL ServerSQL Server source tables to a data warehouse or data mart. Хотя представление исходных таблиц в хранилище данных должно отражать изменения в этих таблицах, использование технологии, которая обновляла бы реплики исходной таблицы, в данном случае не подходит.Although the representation of the source tables within the data warehouse must reflect changes in the source tables, an end-to-end technology that refreshes a replica of the source is not appropriate. Вместо этого необходим надежный поток информации об изменениях, структурированный таким образом, чтобы клиенты могли применить его к другим целевым предоставлениям данных.Instead, you need a reliable stream of change data that is structured so that consumers can apply it to dissimilar target representations of the data. SQL ServerSQL Server .change data capture provides this technology.

Поток данных системы отслеживания измененных данныхChange Data Capture Data Flow

На следующем рисунке показан основной поток данных для системы отслеживания измененных данных.The following illustration shows the principal data flow for change data capture.

Поток данных системы отслеживания измененных данныхChange data capture data flow

Источником измененных данных для системы отслеживания является журнал транзакций SQL ServerSQL Server .The source of change data for change data capture is the SQL ServerSQL Server transaction log. По мере того, как в исходных отслеживаемых таблицах выполняются операции вставки, обновления и удаления, в журнал добавляются записи, описывающие эти изменения.As inserts, updates, and deletes are applied to tracked source tables, entries that describe those changes are added to the log. Журнал служит входом для процесса отслеживания.The log serves as input to the capture process. Процесс считывает журнал и добавляет данные изменений в таблицу изменений, связанную с отслеживаемой таблицей.This reads the log and adds information about changes to the tracked table's associated change table. Предусмотрены функции для перечисления изменений, появляющихся в таблицах изменений в заданном диапазоне, а также для возврата данных в виде отфильтрованного результирующего набора.Functions are provided to enumerate the changes that appear in the change tables over a specified range, returning the information in the form of a filtered result set. Отфильтрованный результирующий набор обычно используется процессом приложения для обновления представления источника во внешней среде.The filtered result set is typically used by an application process to update a representation of the source in some external environment.

Основные сведения о системе отслеживания измененных данных и экземпляре системы отслеживанияUnderstanding Change Data Capture and the Capture Instance

Прежде чем можно будет отслеживать изменения в отдельных таблицах базы данных, необходимо явно активировать систему отслеживания измененных данных в этой базе данных.Before changes to any individual tables within a database can be tracked, change data capture must be explicitly enabled for the database. Это делается с помощью хранимой процедуры sys.sp_cdc_enable_db.This is done by using the stored procedure sys.sp_cdc_enable_db. После того как база данных будет активирована, с помощью хранимой процедуры sys.sp_cdc_enable_tableисходные таблицы можно определить как отслеживаемые.When the database is enabled, source tables can be identified as tracked tables by using the stored procedure sys.sp_cdc_enable_table. Если для таблицы активирована система отслеживания измененных данных, создается связанный экземпляр системы отслеживания изменений для распространения данных об изменениях в исходной таблице.When a table is enabled for change data capture, an associated capture instance is created to support the dissemination of the change data in the source table. Экземпляр системы отслеживания состоит из таблицы изменений и одной-двух функций запроса.The capture instance consists of a change table and up to two query functions. Метаданные, подробно описывающие конфигурацию экземпляра системы отслеживания, сохраняются в таблицах отслеживания измененных метаданных cdc.change_tables, cdc.index_columnsи cdc.captured_columns.Metadata that describes the configuration details of the capture instance is retained in the change data capture metadata tables cdc.change_tables, cdc.index_columns, and cdc.captured_columns. Эти сведения можно получить с помощью хранимой процедуры sys.sp_cdc_help_change_data_capture.This information can be retrieved by using the stored procedure sys.sp_cdc_help_change_data_capture.

Все объекты, связанные с экземпляром системы отслеживания, создаются в схеме системы отслеживания измененных данных для активированной базы данных.All objects that are associated with a capture instance are created in the change data capture schema of the enabled database. Именем экземпляра системы отслеживания должно быть допустимое имя объекта, уникальное для всех экземпляров системы отслеживания этой базы данных.The requirements for the capture instance name is that it be a valid object name, and that it be unique across the database capture instances. Имя по умолчанию для таблицы-источника — <имя_схемы_имя_таблицы>.By default, the name is <schema name_table name> of the source table. Связанная с ним таблица изменений именуется путем добавления ключевого слова _CT к имени экземпляра системы отслеживания.Its associated change table is named by appending _CT to the capture instance name. Функция, которая используется для запроса всех изменений, именуется путем добавления к началу имени экземпляра системы отслеживания префикса fn_cdc_get_all_changes_.The function that is used to query for all changes is named by prepending fn_cdc_get_all_changes_ to the capture instance name. Если экземпляр системы отслеживания настроен для поддержки net changes, также создается функция запроса net_changes, которая именуется путем добавления префикса fn_cdc_get_net_changes_ к началу имени экземпляра системы отслеживания.If the capture instance is configured to support net changes, the net_changes query function is also created and named by prepending fn_cdc_get_net_changes_ to the capture instance name.

Таблица измененийChange Table

Первые пять столбцов таблицы изменений для системы отслеживания измененных данных являются столбцами метаданных.The first five columns of a change data capture change table are metadata columns. Они предоставляют дополнительные сведения, относящиеся к регистрируемому изменению.These provide additional information that is relevant to the recorded change. Остальные столбцы отражают опознанные отслеживаемые столбцы исходной таблицы по имени и типу.The remaining columns mirror the identified captured columns from the source table in name and, typically, in type. В этих столбцах хранятся данные отслеживаемых столбцов из исходной таблицы.These columns hold the captured column data that is gathered from the source table.

Каждая операция вставки или удаления, которая была выполнена в исходной таблице, отражается как одна строка в таблице изменений.Each insert or delete operation that is applied to a source table appears as a single row within the change table. Столбцы данных в строке, отражающей результаты операции вставки, содержат значения столбов после вставки.The data columns of the row that results from an insert operation contain the column values after the insert. Столбцы данных в строке, отражающей результаты операции удаления, содержат значения столбов перед удалением.The data columns of the row that results from a delete operation contain the column values before the delete. Операции обновления требуется одна строка для определения значений столбца перед обновлением, и еще одна строка — для значений столбца после обновления.An update operation requires one row entry to identify the column values before the update, and a second row entry to identify the column values after the update.

Каждая строка в таблице изменений содержит также дополнительные метаданные, позволяющие интерпретировать операции изменения.Each row in a change table also contains additional metadata to allow interpretation of the change activity. Столбец __$start_lsn определяет номер LSN фиксации, который был присвоен изменению.The column __$start_lsn identifies the commit log sequence number (LSN) that was assigned to the change. Зафиксированный номер LSN определяет как операции изменения, которые были проведены в рамках одной транзакции, так и порядок транзакций.The commit LSN both identifies changes that were committed within the same transaction, and orders those transactions. Столбец __$seqval можно использовать для упорядочивания дополнительных изменений в этой транзакции.The column __$seqval can be used to order more changes that occur in the same transaction. Столбец __$operation регистрирует операцию, связанную с изменением: 1 = удаление, 2 = вставка, 3 = обновление (исходный образ) и 4 = обновление (образ после операции).The column __$operation records the operation that is associated with the change: 1 = delete, 2 = insert, 3 = update (before image), and 4 = update (after image). Столбец __$update_mask — это переменная в виде битовой маски, в которой каждому отслеживаемому столбцу соответствует один бит.The column __$update_mask is a variable bit mask with one defined bit for each captured column. Для записей операций вставки и удаления все биты в маске обновления всегда будут установленными.For insert and delete entries, the update mask will always have all bits set. У строк операций обновления будут установлены только биты, соответствующие измененным столбцам.Update rows, however, will only have those bits set that correspond to changed columns.

Период действия системы отслеживания измененных данных в базе данныхChange Data Capture Validity Interval for a Database

Период действия системы отслеживания измененных данных для базы данных — это время, в течение которого данные изменений доступны для экземпляров отслеживания.The change data capture validity interval for a database is the time during which change data is available for capture instances. Период действия начинается с создания первого экземпляра отслеживания для таблицы базы данных и продолжается до настоящего времени.The validity interval begins when the first capture instance is created for a database table, and continues to the present time.

Данные, хранящиеся в таблицах изменений, будут неуправляемо расти, если периодически и систематически не усекать эти данные.Data that is deposited in change tables will grow unmanageably if you do not periodically and systematically prune the data. Процесс очистки системы отслеживания измененных данных отвечает за политику принудительной очистки данных по истечении срока их хранения.The change data capture cleanup process is responsible for enforcing the retention-based cleanup policy. Прежде всего он перемещает нижнюю конечную точку периода действия в соответствии с ограничениями по времени.First, it moves the low endpoint of the validity interval to satisfy the time restriction. Затем записи таблицы изменений, у которых истек срок действия, удаляются.Then, it removes expired change table entries. По умолчанию эти данные сохраняются три дня.By default, three days of data is retained.

В верхней конечной точке по мере того, как процесс отслеживания фиксирует каждый новый пакет информации об изменениях, новые записи добавляются к cdc.lsn_time_mapping для каждой транзакции, для которой имеются записи в таблице изменений.At the high end, as the capture process commits each new batch of change data, new entries are added to cdc.lsn_time_mapping for each transaction that has change table entries. В таблице сопоставлений сохраняются регистрационный номер транзакции в журнале и время фиксации транзакции (столбцы start_lsn и tran_end_time соответственно).Within the mapping table, both a commit Log Sequence Number (LSN) and a transaction commit time (columns start_lsn and tran_end_time, respectively) are retained. Максимальное значение номера LSN, обнаруженное в cdc.lsn_time_mapping , представляет верхнюю конечную точку диапазона периода действия.The maximum LSN value that is found in cdc.lsn_time_mapping represents the high water mark of the database validity window. Соответствующее ей время фиксации используется как базовое значение, из которого очистка данных по истечении срока хранения вычисляет новое значение нижней конечной точки.Its corresponding commit time is used as the base from which retention based cleanup computes a new low water mark.

Поскольку процесс отслеживания извлекает информацию об изменениях из журнала транзакций, имеется естественная задержка между временем, когда изменение фиксируется в исходной таблице, и временем, когда это изменение записывается в связанную таблицу изменений.Because the capture process extracts change data from the transaction log, there is a built in latency between the time that a change is committed to a source table and the time that the change appears within its associated change table. Хотя эта задержка обычно мала, важно помнить, что информация об изменениях недоступна, пока процесс отслеживания не обработает соответствующие записи журнала.While this latency is typically small, it is nevertheless important to remember that change data is not available until the capture process has processed the related log entries.

Период действия системы отслеживания измененных данных для экземпляра отслеживанияChange Data Capture Validity Interval for a Capture Instance

Хотя обычно периоды действия для базы данных и отдельного экземпляра отслеживания совпадают, иногда это бывает не так.Although it is common for the database validity interval and the validity interval of individual capture instance to coincide, this is not always true. Период действия экземпляра отслеживания начинается, когда процесс отслеживания распознает экземпляр отслеживания и начинает записывать связанные с ним изменения в таблицу изменений.The validity interval of the capture instance starts when the capture process recognizes the capture instance and starts to log associated changes to its change table. В результате, если экземпляры отслеживания создаются в разное время, каждый будет иметь свою нижнюю конечную точку.As a result, if capture instances are created at different times, each will initially have a different low endpoint. Столбец start_lsn результирующего набора, который возвращается функцией sys.sp_cdc_help_change_data_capture , показывает текущую нижнюю конечную точку для каждого определенного экземпляра отслеживания.The start_lsn column of the result set that is returned by sys.sp_cdc_help_change_data_capture shows the current low endpoint for each defined capture instance. Когда процесс очистки очищает записи таблицы изменений, он корректирует значения start_lsn для всех экземпляров отслеживания, чтобы отразить новую нижнюю конечную точку для каждого доступного набора информации об изменениях.When the cleanup process cleans up change table entries, it adjusts the start_lsn values for all capture instances to reflect the new low water mark for available change data. Корректируются только те экземпляры отслеживания, текущие значения start_lsn которых меньше, чем новая нижняя конечная точка.Only those capture instances that have start_lsn values that are currently less than the new low water mark are adjusted. Со временем, если не создаются новые экземпляры отслеживания, периоды действия для всех отдельных экземпляров постепенно совпадают с периодом действия для базы данных.Over time, if no new capture instances are created, the validity intervals for all individual instances will tend to coincide with the database validity interval.

Период действия важен для потребителей данных об изменениях, поскольку интервал извлечения для запроса должен полностью покрываться периодом действия системы отслеживания измененных данных для экземпляра отслеживания.The validity interval is important to consumers of change data because the extraction interval for a request must be fully covered by the current change data capture validity interval for the capture instance. Если нижняя конечная точка интервала извлечения перекрывает нижнюю конечную точку периода действия, возможна потеря информации об изменениях вследствие слишком агрессивной очистки.If the low endpoint of the extraction interval is to the left of the low endpoint of the validity interval, there could be missing change data due to aggressive cleanup. Если верхняя конечная точка интервала извлечения перекрывает верхнюю конечную точку периода действия, процесс отслеживания не успеет обработать данные за время, представленное интервалом извлечения, поэтому также возможна потеря информации об изменениях.If the high endpoint of the extraction interval is to the right of the high endpoint of the validity interval, the capture process has not yet processed through the time period that is represented by the extraction interval, and change data could also be missing.

Функция sys.fn_cdc_get_min_lsn используется для получения текущего минимального номера LSN для экземпляра отслеживания, а функция sys.fn_cdc_get_max_lsn — для извлечения текущего максимального номера LSN.The function sys.fn_cdc_get_min_lsn is used to retrieve the current minimum LSN for a capture instance, while sys.fn_cdc_get_max_lsn is used to retrieve the current maximum LSN value. Функции запроса системы отслеживания измененных данных завершатся ошибкой при запросе данных об изменениях, если заданный диапазон номеров LSN выйдет за пределы этих двух значений номеров LSN.When querying for change data, if the specified LSN range does not lie within these two LSN values, the change data capture query functions will fail.

Обработка изменений исходных таблицHandling Changes to Source Tables

Обработка изменений столбцов в отслеживаемых исходных таблицах — достаточно трудный вопрос для потребителей потока данных.To accommodate column changes in the source tables that are being tracked is a difficult issue for downstream consumers. Хотя включение системы отслеживания измененных данных в исходной таблице не препятствует такого рода DDL-изменениям, система отслеживания помогает снизить их влияние на потребителей за счет неизменности результирующих наборов, которые возвращаются через API-интерфейс, даже при изменениях структуры базовой исходной таблицы.Although enabling change data capture on a source table does not prevent such DDL changes from occurring, change data capture helps to mitigate the effect on consumers by allowing the delivered result sets that are returned through the API to remain unchanged even as the column structure of the underlying source table changes. Структура с фиксированными столбцами также отражается в базовых таблицах изменений, к которым получают доступ функции запроса.This fixed column structure is also reflected in the underlying change table that the defined query functions access.

Для поддержки работы с таблицей изменений, имеющей фиксированную структуру столбцов, процесс отслеживания, отвечающий за заполнение таблицы изменений, не учитывает новые, не определенные для отслеживания столбцы, если в исходной таблице активирована система отслеживания измененных данных.To accommodate a fixed column structure change table, the capture process responsible for populating the change table will ignore any new columns that are not identified for capture when the source table was enabled for change data capture. Если отслеживаемый столбец удаляется, в соответствующих записях изменений указываются значения null.If a tracked column is dropped, null values will be supplied for the column in the subsequent change entries. Но если у существующего столбца меняется тип данных, это изменение отражается в таблице изменений, чтобы не допустить потерю данных в отслеживаемых столбцах.However, if an existing column undergoes a change in its data type, the change is propagated to the change table to ensure that the capture mechanism does not introduce data loss to tracked columns. Процесс отслеживания также отправляет все изменения в структуре столбцов отслеживаемой таблицы в таблицу cdc.ddl_history.The capture process also posts any detected changes to the column structure of tracked tables to the cdc.ddl_history table. Потребители, желающие получить предупреждение о корректировке, которую, возможно, придется внести в нисходящие приложения, используют хранимую процедуру sys.sp_cdc_get_ddl_history.Consumers wishing to be alerted of adjustments that might have to be made in downstream applications, use the stored procedure sys.sp_cdc_get_ddl_history.

Как правило, текущий экземпляр отслеживания продолжает сохранять свой формат, когда DDL-изменения применяются к соответствующей исходной таблице.Typically, the current capture instance will continue to retain its shape when DDL changes are applied to its associated source table. Однако для таблицы, отражающей новую структуру столбцов, можно создать второй экземпляр отслеживания.However, it is possible to create a second capture instance for the table that reflects the new column structure. Это позволит процессу отслеживания воспроизвести изменения одной исходной таблицы в двух таблицах изменений, имеющих разную структуру столбцов.This allows the capture process to make changes to the same source table into two distinct change tables having two different column structures. Таким образом, в то время как одна таблица изменений будет поставлять данные в текущие рабочие приложения, вторая будет служить источником данных для среды разработки, принимающей данные нового столбца.Thus, while one change table can continue to feed current operational programs, the second one can drive a development environment that is trying to incorporate the new column data. Позволив средству отслеживания одновременно заполнять обе таблицы изменений, можно добиться перехода от одного формата к другому без потери информации.Allowing the capture mechanism to populate both change tables in tandem means that a transition from one to the other can be accomplished without loss of change data. Это может случиться, когда произойдет перекрытие временных шкал двух систем отслеживания измененных данных.This can happen any time the two change data capture timelines overlap. После завершения перехода устаревший экземпляр отслеживания можно удалить.When the transition is effected, the obsolete capture instance can be removed.

Примечание

С одной исходной таблицей одновременно можно связать не более двух экземпляров отслеживания.The maximum number of capture instances that can be concurrently associated with a single source table is two.

Связь между заданием отслеживания и агентом чтения журнала репликации транзакцийRelationship Between the Capture Job and the Transactional Replication Logreader

Логика процесса отслеживания измененных данных внедрена в расширенную хранимую процедуру sp_replcmds, во внутреннюю серверную функцию, являющуюся частью программы sqlservr.exe, а также используемую репликацией транзакций, которая считывает изменения из журнала транзакций.The logic for change data capture process is embedded in the stored procedure sp_replcmds, an internal server function built as part of sqlservr.exe and also used by transactional replication to harvest changes from the transaction log. Если в базе данных активирована только система отслеживания измененных данных, создается задание отслеживания агента SQL Server как средство вызова хранимой процедуры sp_replcmds.When change data capture alone is enabled for a database, you create the change data capture SQL Server Agent capture job as the vehicle for invoking sp_replcmds. Если включена также репликация, для поставки информации об изменениях обоим потребителям используется только агент чтения журнала транзакций.When replication is also present, the transactional logreader alone is used to satisfy the change data needs for both of these consumers. Такой метод значительно снижает возможность состязания, если в одной базе данных активирована как система отслеживания измененных данных, так и репликация.This strategy significantly reduces log contention when both replication and change data capture are enabled for the same database.

Переключение между этими рабочими моделями происходит автоматически каждый раз, когда меняется состояние репликации в базе данных с активированной системой отслеживания измененных данных.The switch between these two operational modes for capturing change data occurs automatically whenever there is a change in the replication status of a change data capture enabled database.

Важно!

Оба экземпляра логики отслеживания измененных данных требуют запуска агента SQL ServerSQL Server .Both instances of the capture logic require SQL ServerSQL Server Agent to be running for the process to execute.

Основная задача процесса отслеживания заключается в просмотре журнала и записи данных столбцов и связанных с ними сведений о транзакциях в таблицы изменений системы отслеживания измененных данных.The principal task of the capture process is to scan the log and write column data and transaction related information to the change data capture change tables. Чтобы обеспечить транзакционно согласованную границу между всеми таблицами изменений, процесс отслеживания измененных данных открывает и фиксирует собственные транзакции по каждому циклу считывания.To ensure a transactionally consistent boundary across all the change data capture change tables that it populates, the capture process opens and commits its own transaction on each scan cycle. Он обнаруживает вновь активированные таблицы системы отслеживания измененных данных и автоматически включает их в набор таблиц, в которых отслеживается изменение данных.It detects when tables are newly enabled for change data capture, and automatically includes them in the set of tables that are actively monitored for change entries in the log. Точно так же обнаруживается отключение системы отслеживания измененных данных, что приводит к удалению исходной таблицы из набора таблиц, в которых проводится наблюдение за изменением данных.Similarly, disabling change data capture will also be detected, causing the source table to be removed from the set of tables actively monitored for change data. Когда завершается обработка раздела журнала, процесс отслеживания вызывает серверную логику усечения журнала, которая использует данные процесса для определения записей журнала, подлежащих усечению.When processing for a section of the log is finished, the capture process signals the server log truncation logic, which uses this information to identify log entries eligible for truncation.

Примечание

Если в базе данных было включено отслеживание измененных данных, то даже в том случае, если в качестве модели восстановления базы данных было выбрано простое восстановление, то точка усечения журнала не будет передвинута далее, пока все отслеживаемые изменения не будут собраны процессом отслеживания.When a database is enabled for change data capture, even if the recovery mode is set to simple recovery the log truncation point will not advance until all the changes that are marked for capture have been gathered by the capture process. Если процесс отслеживания не выполняется и присутствуют изменения, которые следует собрать, то при выполнении инструкции CHECKPOINT журнал усечен не будет.If the capture process is not running and there are changes to be gathered, executing CHECKPOINT will not truncate the log.

Кроме того, процесс отслеживания используется также для ведения журнала DDL-изменений в отслеживаемых таблицах.The capture process is also used to maintain history on the DDL changes to tracked tables. Инструкции DDL, связанные с системой отслеживания измененных данных, создают записи в журнале транзакций базы данных каждый раз, когда удаляется база данных или таблица с активированной системой отслеживания измененных данных или добавляются, изменяются или удаляются столбцы такой таблицы.The DDL statements that are associated with change data capture make entries to the database transaction log whenever a change data capture-enabled database or table is dropped or columns of a change data capture-enabled table are added, modified, or dropped. Эти записи журнала обрабатываются процессом отслеживания, который затем отправляет соответствующие DDL-события в таблицу cdc.ddl_history.These log entries are processed by the capture process, which then posts the associated DDL events to the cdc.ddl_history table. Сведения о событиях DDL, влияющих на отслеживаемые таблицы, можно получить с помощью хранимой процедуры sys.sp_cdc_get_ddl_history.You can obtain information about DDL events that affect tracked tables by using the stored procedure sys.sp_cdc_get_ddl_history.

Задания агента системы отслеживания измененных данныхChange Data Capture Agent Jobs

С базой данных, в которой активирована система отслеживания измененных данных, обычно связаны два задания агента SQL ServerSQL Server : одно заполняет таблицы изменений, а второе отвечает за их очистку.Two SQL ServerSQL Server Agent jobs are typically associated with a change data capture enabled database: one that is used to populate the database change tables, and one that is responsible for change table cleanup. Оба задания состоят из одного шага, который выполняет команду Transact-SQLTransact-SQL .Both jobs consist of a single step that runs a Transact-SQLTransact-SQL command. Вызываемая команда Transact-SQLTransact-SQL представляет собой хранимую процедуру, определенную системой отслеживания измененных данных, которая реализует логику задания.The Transact-SQLTransact-SQL command that is invoked is a change data capture defined stored procedure that implements the logic of the job. Оба задания создаются, когда система отслеживания измененных данных активируется в первой таблице базы данных.The jobs are created when the first table of the database is enabled for change data capture. Задание очистки создается всегда.The Cleanup Job is always created. Задание отслеживания создается, только если для базы данных не определена публикация транзакций.The capture job will only be created if there are no defined transactional publications for the database. Задание отслеживания также создается, когда в базе данных активируется как система отслеживания измененных данных, так и репликация транзакций, а задание агента чтения журнала транзакций удаляется, поскольку в базе данных теперь отсутствуют заданные публикации.The capture job is also created when both change data capture and transactional replication are enabled for a database, and the transactional logreader job is removed because the database no longer has defined publications.

Как задание отслеживания, так и задание очистки создаются с помощью параметров по умолчанию.Both the capture and cleanup jobs are created by using default parameters. Задание отслеживания запускается немедленно.The capture job is started immediately. Оно выполняется постоянно, обрабатывая до 1 000 транзакций за цикл просмотра с 5-секундной задержкой между циклами.It runs continuously, processing a maximum of 1000 transactions per scan cycle with a wait of 5 seconds between cycles. Задание очистки запускается ежедневно в 02.00.The cleanup job runs daily at 2 A.M. Оно сохраняет записи таблицы изменений в течение 4320 минут или 3 суток, удаляя до 5000 записей в одной инструкции удаления.It retains change table entries for 4320 minutes or 3 days, removing a maximum of 5000 entries with a single delete statement.

Задания агента системы отслеживания измененных данных удаляются, когда система отключается в базе данных.The change data capture agent jobs are removed when change data capture is disabled for a database. Задание отслеживания можно также удалить, когда к базе данных добавляется первая публикация и включаются как система отслеживания измененных данных, так и репликация транзакций.The capture job can also be removed when the first publication is added to a database, and both change data capture and transactional replication are enabled.

На внутреннем уровне задания системы отслеживания измененных данных создаются и удаляются хранимыми процедурами sys.sp_cdc_add_job и sys.sp_cdc_drop_jobсоответственно.Internally, change data capture agent jobs are created and dropped by using the stored procedures sys.sp_cdc_add_job and sys.sp_cdc_drop_job, respectively. Эти хранимые процедуры открыты для доступа, чтобы администратор мог управлять созданием и удалением этих заданий.These stored procedures are also exposed so that administrators can control the creation and removal of these jobs.

Администратор не может явно управлять применяемой по умолчанию конфигурацией заданий агента для системы отслеживания измененных данных.An administrator has no explicit control over the default configuration of the change data capture agent jobs. Для изменения параметров конфигурации по умолчанию используется хранимая процедура sys.sp_cdc_change_job .The stored procedure sys.sp_cdc_change_job is provided to allow the default configuration parameters to be modified. Кроме того, хранимая процедура sys.sp_cdc_help_jobs позволяет просматривать текущие параметры конфигурации.In addition, the stored procedure sys.sp_cdc_help_jobs allows current configuration parameters to be viewed. Задание отслеживания и задание очистки при запуске извлекают параметры конфигурации из таблицы msdb.dbo.cdc_jobs.Both the capture job and the cleanup job extract configuration parameters from the table msdb.dbo.cdc_jobs on startup. Изменения значений этих параметров, выполненные с помощью хранимой процедуры sys.sp_cdc_change_job , вступают в силу только после остановки и перезапуска задания.Any changes made to these values by using sys.sp_cdc_change_job will not take effect until the job is stopped and restarted.

Для остановки и запуска заданий агента системы отслеживания измененных данных используются две дополнительные хранимые процедуры: sys.sp_cdc_start_job и sys.sp_cdc_stop_job.Two additional stored procedures are provided to allow the change data capture agent jobs to be started and stopped: sys.sp_cdc_start_job and sys.sp_cdc_stop_job.

Примечание

Запуск и остановка задания отслеживания не приводят к потере информации об изменениях.Starting and stopping the capture job does not result in a loss of change data. Это лишь препятствует процессу отслеживания активно просматривать журнал в поисках записей изменения и помещать их в таблицы изменений.It only prevents the capture process from actively scanning the log for change entries to deposit in the change tables. Чтобы избежать дополнительной рабочей нагрузки в результате просмотра журнала, в период пиковой нагрузки рекомендуется остановить задание отслеживания и вновь запустить его, когда нагрузка уменьшится.A reasonable strategy to prevent log scanning from adding load during periods of peak demand is to stop the capture job and restart it when demand is reduced.

Оба задания агента SQL ServerSQL Server достаточно гибкие и настраиваемые, чтобы удовлетворить основные потребности среды системы отслеживания измененных данных.Both SQL ServerSQL Server Agent jobs were designed to be flexible enough and sufficiently configurable to meet the basic needs of change data capture environments. Однако в обоих случаях базовые хранимые процедуры, обеспечивающие основные функциональные возможности, открыты для доступа, чтобы сделать возможной дополнительную настройку.In both cases, however, the underlying stored procedures that provide the core functionality have been exposed so that further customization is possible.

Система отслеживания измененных данных не может работать правильно, когда служба ядра СУБД или служба агента SQL Server работает под учетной записью NETWORK SERVICE.Change data capture cannot function properly when the Database Engine service or the SQL Server Agent service is running under the NETWORK SERVICE account. В этом случае может возникать ошибка 22832.This can result in error 22832.

Различия в работе с параметрами сортировки баз данных и таблицWorking with database and table collation differences

Важно учитывать различия в параметрах сортировки между базой данных и столбцами таблицы, настроенных для отслеживания измененных данных.It is important to be aware of a situation where you have different collations between the database and the columns of a table configured for change data capture. При отслеживании измененных данных используется промежуточное хранилище для заполнения побочных таблиц.CDC uses interim storage to populate side tables. Если таблица содержит столбцы типа CHAR или VARCHAR с параметрами сортировки, которые отличаются от параметров сортировки в базе данных, а также если в этих столбцах хранятся символы, не входящие в набор ASCII (например, двухбайтовые символы DBCS), технология отслеживания измененных данных не всегда будет сохранять измененные данные в соответствии с данными в базовых таблицах.If a table has CHAR or VARCHAR columns with collations that are different from the database collation and if those columns store non-ASCII characters (such as double byte DBCS characters), CDC might not be able to persist the changed data consistent with the data in the base tables. Это связано с тем, что с переменными промежуточного хранилища не связаны параметры сортировки.This is due to the fact that the interim storage variables cannot have collations associated with them.

Чтобы обеспечить согласованность отслеживания измененных данных с базовыми таблицами, следует применять один из приведенных ниже подходов:Please consider one of the following approaches to ensure change captured data is consistent with base tables:

  • Используйте тип данных NCHAR и NVARCHAR для столбцов, содержащих данные, не относящиеся к набору ASCII.Use NCHAR or NVARCHAR data type for columns containing non-ASCII data.

  • Также можно использовать одинаковые параметры сортировки для столбцов и для базы данных.Or, Use the same collation for columns and for the database.

Например, если в базе данных используются параметры сортировки SQL_Latin1_General_CP1_CI_AS, можно использовать следующую таблицу:For example, if you have one database that uses a collation of SQL_Latin1_General_CP1_CI_AS, consider the following table:

CREATE TABLE T1( 
     C1 INT PRIMARY KEY, 
     C2 VARCHAR(10) collate Chinese_PRC_CI_AI)

Технология отслеживания измененных данных может не получать двоичные данные для столбца C2, поскольку он использует другие параметры сортировки (Chinese_PRC_CI_AI).CDC might fail to capture the binary data for column C2, because its collation is different (Chinese_PRC_CI_AI). Чтобы избежать этой проблемы, используйте тип NVARCHAR:Use NVARCHAR to avoid this problem:

CREATE TABLE T1( 
     C1 INT PRIMARY KEY, 
     C2 NVARCHAR(10) collate Chinese_PRC_CI_AI --Unicode data type, CDC works well with this data type)

См. также:See Also

Отслеживание измененных данных (SQL Server) Track Data Changes (SQL Server)
Включение и отключение отслеживания измененных данных (SQL Server) Enable and Disable Change Data Capture (SQL Server)
Работа с информацией об изменениях (SQL Server) Work with Change Data (SQL Server)
Администрирование и наблюдение за отслеживанием измененных данных (SQL Server)Administer and Monitor Change Data Capture (SQL Server)