Отслеживание измененных данных и другие функции
Область применения: SQL Server Управляемый экземпляр SQL Azure
В этой статье описывается, как следующие функции взаимодействуют с записью измененных данных для SQL Server и Управляемый экземпляр SQL Azure. Сведения о База данных SQL Azure см. в разделе CDC с База данных SQL Azure.
Отслеживание изменений
Отслеживание измененных данных и отслеживание изменений можно активировать на одной и той же базе данных. Никаких особых предосторожностей не требуется. Дополнительные сведения см. в статье "Работа с Отслеживание изменений".
Зеркальное отображение базы данных
Для базы данных, активированной для отслеживания измененных данных, можно установить зеркальное отображение. Чтобы обеспечить автоматическое выполнение отслеживания и очистки после отработки отказа, выполните следующие шаги.
Убедитесь, что агент SQL Server выполняется на новом экземпляре основного сервера.
Создайте задание отслеживания и задание очистки в новой основной базе данных (ранее зеркальной базе данных). Создание заданий выполняйте с помощью хранимой процедуры sp_cdc_add_job .
Для просмотра текущей конфигурации задания очистки или отслеживания пользуйтесь хранимой процедурой sys.sp_cdc_help_jobs в новом экземпляре основного сервера. Для конкретной базы данных задание отслеживания называется cdc.имя_базы_данных_capture, а задание очистки — cdc.имя_базы_данных_cleanup, где имя_базы_данных — имя базы данных.
Для изменения конфигурации задания пользуйтесь хранимой процедурой sys.sp_cdc_change_job .
Сведения о зеркальных отображениях базы данных см. в разделе "Зеркальное отображение базы данных" (SQL Server).
репликация транзакций
Система отслеживания измененных данных и репликация транзакций могут сосуществовать в одной базе данных, но если обе эти функции были включены, то заполнение таблиц изменений будет выполняться другим способом. Для считывания изменений из журнала транзакций система отслеживания измененных данных и репликация транзакций всегда используют одну и ту же процедуру sp_replcmds. Если запись измененных данных включена самостоятельно, агент SQL Server вызовы заданий sp_replcmds. Если в базе данных включены обе эти функции, процедуру sp_replcmdsвызывает агент чтения журнала. Агент заполняет как таблицы изменений, так и таблицы базы данных распространителя. Дополнительные сведения см. в статье Replication Log Reader Agent.
Рассмотрим случай, когда для базы данных AdventureWorks2022
была включена система отслеживания измененных данных и две таблицы были включены для отслеживания. Для заполнения таблиц изменений задание отслеживания вызывает процедуру sp_replcmds. База данных активируется для репликации транзакций, после этого создается публикация. Для базы данных создается агент чтения журнала, задание отслеживания удаляется. Агент чтения журнала продолжает просматривать журнал, начиная с последнего регистрационного номера транзакции, зафиксированного в таблице изменений. Это обеспечивает согласованность данных в таблицах изменений. Если в данной базе данных будет отключена репликация транзакций, то агент чтения журнала будет удален, а задание отслеживания будет создано повторно.
Примечание.
Если для системы отслеживания измененных данных и репликации транзакций используется агент чтения журнала, то в базу данных распространителя в первую очередь записываются реплицированные изменения. Затем в таблицы изменений записываются отслеженные изменения. Обе операции фиксируются одновременно. Если при записи в базу данных распространителя возникла задержка, то перед появлением изменений в таблицах изменений пройдет такое же время.
Параметр proc exec репликации транзакций недоступен при включении записи измененных данных.
Восстановление или присоединение базы данных
SQL Server использует следующую логику, чтобы определить, включена ли запись измененных данных после восстановления или подключения базы данных:
Если база данных восстанавливается на том же сервере с таким же именем базы данных, то система отслеживания измененных данных останется активированной.
Если база данных восстанавливается на другом сервере, то по умолчанию система отслеживания измененных данных будет отключена, а все связанные метаданные будут удалены.
Для сохранения системы отслеживания измененных данных в активированном состоянии при восстановлении базы данных следует использовать параметр KEEP_CDC . Дополнительные сведения об этом параметре см. в разделе RESTORE.
Если база данных отсоединяется и присоединяется к тому же или другому серверу, то система отслеживания измененных данных остается активированной.
Если база данных подключена или восстановлена с параметром KEEP_CDC для любого выпуска, отличного от выпуска Standard, Enterprise или Управляемый экземпляр SQL, операция блокируется, так как для отслеживания измененных данных требуются выпуски SQL Server Standard, Enterprise или Управляемый экземпляр SQL. Отображается сообщение об ошибке 934.
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 можно использовать для отключения отслеживания измененных данных в восстановленной или присоединенной базе данных.
После восстановления базы данных в управляемом экземпляре SQL Azure CDC останется включенным, но необходимо убедиться, что задания сканирования и очистки добавлены и выполняются. Можно добавить задания вручную с помощью запуска sys.sp_cdc_add_job.
Автономные базы данных
Запись измененных данных не поддерживается в содержащихся базах данных.
Группы доступности
При использовании групп доступности AlwaysOn перечисление изменений необходимо выполнять во вторичной реплике для уменьшения загрузки диска в первичной.
Индексы columnstore
Невозможно включить запись измененных данных в таблицах с кластеризованным индексом columnstore. Начиная с SQL Server 2016, его можно включить в таблицах с некластеризованным индексом columnstore.
Вычисляемые столбцы
CDC не поддерживает значения вычисляемых столбцов, даже если вычисляемый столбец определен как сохраненный. Вычисляемые столбцы, включенные в экземпляр записи, всегда имеют значение NULL
. Это делается намеренно и не является ошибкой.
Linux
CDC поддерживается для SQL Server 2017 в Linux с накопительным пакетом обновления 18 (CU18) и SQL Server 2019 в Linux.