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


Изменение записи данных и других функций SQL Server

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

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

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

Зеркалирование баз данных

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

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

  2. Создайте задание отслеживания и задание очистки в новой основной базе данных (ранее зеркальной базе данных). Создание заданий выполняйте с помощью хранимой процедуры 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.

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

Замечание

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

Параметр proc exec транзакционной репликации недоступен, если включено отслеживание изменений данных.

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

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

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

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

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

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

  • Если база данных подключена или восстановлена с параметром для любого выпуска, отличного KEEP_CDC от Enterprise, операция блокируется, так как для отслеживания измененных данных требуется SQL Server Enterprise. Отображается сообщение об ошибке 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 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 можно использовать для отключения отслеживания измененных данных в восстановленной или присоединенной базе данных.

Отслеживание изменений данных и AlwaysON

При использовании AlwaysON необходимо выполнить перечисление изменений во вторичной репликации, чтобы уменьшить нагрузку на диск на основной.

См. также

Администрирование и мониторинг отслеживания измененных данных (SQL Server)