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

В данном разделе описывается взаимодействие следующих функций и системы отслеживания измененных данных.

  • Система отслеживания изменений

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

  • Репликация транзакций

  • Восстановление или присоединение базы данных

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

Отслеживание измененных данных и отслеживание изменений можно активировать на одной базе данных. Никаких особых предосторожностей не требуется. Дополнительные сведения см. в разделе Отслеживание изменений.

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

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

  1. Убедитесь, что на зеркальном сервере запущен агент SQL Server.

  2. Создайте задание отслеживания и задание очистки на зеркальном сервере после того, как был выполнен переход с основного сервера на зеркальный. Для создания заданий следует использовать хранимую процедуру sys.sp_cdc_add_job (Transact-SQL).

Дополнительные сведения о зеркальном отображении базы данных см. в разделе зеркальное отображение базы данных.

Репликация транзакций

Система отслеживания измененных данных и репликация транзакций могут сосуществовать в одной базе данных, но если обе эти функции были включены, то заполнение таблиц изменений будет выполняться другим способом. Для считывания изменений из журнала транзакций система отслеживания измененных данных и репликация транзакций всегда используют одну и ту же процедуру sp_replcmds. Если система отслеживания измененных данных включена отдельно, то процедуру sp_replcmds вызывает задание агента SQL Server. Дополнительные сведения см. в разделе Задание отслеживания. Если в базе данных включены обе эти функции, то процедуру sp_replcmds вызывает агент чтения журнала. Агент заполняет как таблицы изменений, так и таблицы базы данных распространителя. Дополнительные сведения см. в разделе Агент чтения журнала репликации.

Рассмотрим случай, когда для базы данных База данных AdventureWorks2008R2 была включена система отслеживания измененных данных и две таблицы были включены для отслеживания. Для заполнения таблиц изменений задание отслеживания вызывает процедуру sp_replcmds. База данных активируется для репликации транзакций, после этого создается публикация. Для базы данных создается агент чтения журнала, задание отслеживания удаляется. Агент чтения журнала продолжает просматривать журнал, начиная с последнего регистрационного номера транзакции, зафиксированного в таблице изменений. Это обеспечивает согласованность данных в таблицах изменений. Если в данной базе данных будет отключена репликация транзакций, то агент чтения журнала будет удален, а задание отслеживания будет создано повторно.

ПримечаниеПримечание

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

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

Для определения того, останется ли активированным система отслеживания измененных данных после восстановления или присоединения базы данных, в SQL Server используется следующая логика.

  • Если база данных восстанавливается на том же сервере с таким же именем базы данных, то система отслеживания измененных данных останется активированной.

  • Если база данных восстанавливается на другом сервере, то по умолчанию система отслеживания измененных данных будет отключена, а все связанные метаданные будут удалены.

    Для сохранения системы отслеживания измененных данных в активированном состоянии при восстановлении базы данных следует использовать параметр KEEP_CDC. Дополнительные сведения об этом параметре см. в разделе RESTORE.

  • Если база данных отсоединяется и присоединяется к тому же или другому серверу, то система отслеживания измененных данных остается активированной.

  • Если база данных присоединяется или восстанавливается с параметром KEEP_CDC на любом выпуске, отличном от выпуска Enterprise, то эта операция будет заблокирована, поскольку для системы отслеживания измененных данных требуется выпуск SQL Server Enterprise. Отображается сообщение об ошибке 932.

    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 disable change data capture in the database by using a supported edition of SQL Server, or upgrade the instance to one that supports change data capture.

Системную хранимую процедуру sys.sp_cdc_disable_db можно использовать для удаления системы отслеживания измененных данных в восстановленной или прикрепленной базе данных.