Система отслеживания измененных данных и другие функции SQL ServerChange Data Capture and Other SQL Server Features

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed InstanceПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance

В данном разделе описывается взаимодействие следующих функций и системы отслеживания измененных данных.This topic describes how the following features interact with change data capture:

Отслеживание измененийChange Tracking

Отслеживание измененных данных и отслеживание изменений можно активировать на одной и той же базе данных.Change data capture and change tracking can be enabled on the same database. Никаких особых предосторожностей не требуется.No special considerations are required. Дополнительные сведения см. в разделе Работа с отслеживанием изменений (SQL Server).For more information, see Work with Change Tracking (SQL Server).

Зеркальное отображение базы данныхDatabase Mirroring

Для базы данных, активированной для отслеживания измененных данных, можно установить зеркальное отображение.A database that is enabled for change data capture can be mirrored. Чтобы обеспечить автоматическое выполнение отслеживания и очистки после отработки отказа, выполните следующие шаги.To ensure that capture and cleanup happen automatically after a failover, follow these steps:

  1. Убедитесь, что запущен агент SQL ServerSQL Server на новом экземпляре основного сервера.Ensure that SQL ServerSQL Server Agent is running on the new principal server instance.

  2. Создайте задание отслеживания и задание очистки в новой основной базе данных (ранее зеркальной базе данных).Create the capture job and cleanup job on the new principal database (the former mirror database). Создание заданий выполняйте с помощью хранимой процедуры sp_cdc_add_job .To create the jobs, use the sp_cdc_add_job stored procedure.

Для просмотра текущей конфигурации задания очистки или отслеживания пользуйтесь хранимой процедурой sys.sp_cdc_help_jobs в новом экземпляре основного сервера.To view the current configuration of a cleanup or capture job, use the sys.sp_cdc_help_jobs stored procedure on the new principal server instance. Для конкретной базы данных задание отслеживания называется cdc.database_name_capture, а задание очистки — cdc.database_name_cleanup, где database_name — имя базы данных.For a given database, the capture job is named cdc.database_name_capture, and the cleanup job is named cdc.database_name_cleanup, where database_name is the name of the database.

Для изменения конфигурации задания пользуйтесь хранимой процедурой sys.sp_cdc_change_job .To change the configuration of a job, use the sys.sp_cdc_change_job stored procedure.

Сведения о зеркальном отображении базы данных см. в разделе Зеркальное отображение базы данных (SQL Server).For information about database mirroring, see Database Mirroring (SQL Server).

Transactional ReplicationTransactional Replication

Система отслеживания измененных данных и репликация транзакций могут сосуществовать в одной базе данных, но если обе эти функции были включены, то заполнение таблиц изменений будет выполняться другим способом.Change data capture and transactional replication can coexist in the same database, but population of the change tables is handled differently when both features are enabled. Для считывания изменений из журнала транзакций система отслеживания измененных данных и репликация транзакций всегда используют одну и ту же процедуру sp_replcmds.Change data capture and transactional replication always use the same procedure, sp_replcmds, to read changes from the transaction log. Если система отслеживания измененных данных включена отдельно, то процедуру SQL ServerSQL Server sp_replcmds вызывает задание агента.When change data capture is enabled on its own, a SQL ServerSQL Server Agent job calls sp_replcmds. Если в базе данных включены обе эти функции, процедуру sp_replcmdsвызывает агент чтения журнала.When both features are enabled on the same database, the Log Reader Agent calls sp_replcmds. Агент заполняет как таблицы изменений, так и таблицы базы данных распространителя.This agent populates both the change tables and the distribution database tables. Дополнительные сведения см. в статье Replication Log Reader Agent.For more information, see Replication Log Reader Agent.

Рассмотрим случай, когда для базы данных AdventureWorks2012AdventureWorks2012 была включена система отслеживания измененных данных и две таблицы были включены для отслеживания.Consider a scenario in which change data capture is enabled on the AdventureWorks2012AdventureWorks2012 database, and two tables are enabled for capture. Для заполнения таблиц изменений задание отслеживания вызывает процедуру sp_replcmds.To populate the change tables, the capture job calls sp_replcmds. База данных активируется для репликации транзакций, после этого создается публикация.The database is enabled for transactional replication, and a publication is created. Для базы данных создается агент чтения журнала, задание отслеживания удаляется.Now, the Log Reader Agent is created for the database and the capture job is deleted. Агент чтения журнала продолжает просматривать журнал, начиная с последнего регистрационного номера транзакции, зафиксированного в таблице изменений.The Log Reader Agent continues to scan the log from the last log sequence number that was committed to the change table. Это обеспечивает согласованность данных в таблицах изменений.This ensures data consistency in the change tables. Если в данной базе данных будет отключена репликация транзакций, то агент чтения журнала будет удален, а задание отслеживания будет создано повторно.If transactional replication is disabled in this database, the Log Reader Agent is removed and the capture job is re-created.

Примечание

Если для системы отслеживания измененных данных и репликации транзакций используется агент чтения журнала, то в базу данных распространителя в первую очередь записываются реплицированные изменения.When the Log Reader Agent is used for both change data capture and transactional replication, replicated changes are first written to the distribution database. Затем в таблицы изменений записываются отслеженные изменения.Then, captured changes are written to the change tables. Обе операции фиксируются одновременно.Both operations are committed together. Если при записи в базу данных распространителя возникла задержка, то перед появлением изменений в таблицах изменений пройдет такое же время.If there is any latency in writing to the distribution database, there will be a corresponding latency before changes appear in the change tables.

Параметр proc exec репликации транзакций недоступен, когда включена система отслеживания измененных данных.The proc exec option of transactional replication is not available when change data capture is enabled.

Восстановление или прикрепление базы данных, активированной для системы отслеживания измененных данныхRestoring or Attaching a Database Enabled for Change Data Capture

SQL ServerSQL Server используется следующая логика.uses the following logic to determine if change data capture remains enabled after a database is restored or attached:

  • Если база данных восстанавливается на том же сервере с таким же именем базы данных, то система отслеживания измененных данных останется активированной.If a database is restored to the same server with the same database name, change data capture remains enabled.

  • Если база данных восстанавливается на другом сервере, то по умолчанию система отслеживания измененных данных будет отключена, а все связанные метаданные будут удалены.If a database is restored to another server, by default change data capture is disabled and all related metadata is deleted.

    Для сохранения системы отслеживания измененных данных в активированном состоянии при восстановлении базы данных следует использовать параметр KEEP_CDC .To retain change data capture, use the KEEP_CDC option when restoring the database. Дополнительные сведения об этом параметре см. в разделе RESTORE.For more information about this option, see RESTORE.

  • Если база данных отсоединяется и присоединяется к тому же или другому серверу, то система отслеживания измененных данных остается активированной.If a database is detached and attached to the same server or another server, change data capture remains enabled.

  • Если база данных присоединяется или восстанавливается с параметром KEEP_CDC в любом выпуске, отличном от Standard или Enterprise, то эта операция будет заблокирована, так как для системы отслеживания измененных данных требуется выпуск SQL ServerSQL Server Standard или Enterprise.If a database is attached or restored with the KEEP_CDC option to any edition other than Standard or Enterprise, the operation is blocked because change data capture requires SQL ServerSQL Server Standard or Enterprise editions. Отображается сообщение об ошибке 934.Error message 934 is displayed:

    SQL Server cannot load database '%.*ls' because Change Data Capture is enabled. The currently installed edition of SQL Server does not support Change Data Capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports Change Data Capture.

Процедуру sys.sp_cdc_disable_db можно использовать для отключения отслеживания измененных данных в восстановленной или присоединенной базе данных.You can use sys.sp_cdc_disable_db to remove change data capture from a restored or attached database.

Автономные базы данныхContained Databases

Отслеживание измененных данных не поддерживается в автономных базах данных.Change data capture is not supported in contained databases.

Система отслеживания измененных данных и AlwaysOnChange Data Capture and Always On

При использовании AlwaysOn перечисление изменений необходимо выполнять во вторичной реплике для уменьшения загрузки диска в первичной.When you use Always On, change enumeration should be done on the Secondary replication to reduce the disk load on the primary.

См. такжеSee Also

Администрирование и наблюдение за отслеживанием измененных данных (SQL Server)Administer and Monitor Change Data Capture (SQL Server)