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


Включение и отключение отслеживания изменений (SQL Server)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в предварительной версии Microsoft Fabric

В этой статье описывается включение и отключение отслеживания изменений для базы данных и таблицы.

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

Прежде чем начать отслеживание изменений, его надо включить на уровне базы данных. В следующем примере показано, как включить отслеживание изменений с помощью параметров ALTER DATABASE SET.

ALTER DATABASE AdventureWorks2022
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)

Включить отслеживание изменений можно также в SQL Server Management Studio в диалоговом окне Свойства базы данных (страница "Отслеживание изменений"). Если база данных содержит оптимизированные для памяти таблицы, включить отслеживание изменений с помощью SQL Server Management Studio невозможно. Чтобы включить, используйте T-SQL.

Можно указать CHANGE_RETENTION и AUTO_CLEANUP параметры при включении отслеживания изменений, и вы можете изменять значения в любое время после включения отслеживания изменений.

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

Вы можете использовать AUTO_CLEANUP этот параметр, чтобы включить или отключить задачу очистки, которая удаляет старые сведения об отслеживании изменений. Это может быть полезно, если существует временная проблема, которая предотвращает синхронизацию приложений и процесс удаления сведений об отслеживании изменений старше срока хранения, пока проблема не будет устранена.

Для любой базы данных, использующей отслеживание изменений, обратите внимание на следующее:

  • При отслеживании изменений уровень совместимости базы данных должен быть не ниже 90. Если уровень совместимости базы данных менее 90, то можно настроить отслеживание изменений. Однако функция CHANGETABLE, используемая для получения сведений об отслеживании изменений, возвратит ошибку.

  • Простейший способ обеспечения согласованности всех данных отслеживания изменений — изоляция моментальных снимков. По этой причине настоятельно рекомендуется установить ON изоляцию моментальных снимков для базы данных. Дополнительные сведения см. в статье "Работа с отслеживанием изменений" (SQL Server).

Включение отслеживания изменений для таблицы

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

В следующем примере показано, как настроить отслеживание изменений для таблицы с помощью инструкции ALTER TABLE.

ALTER TABLE Person.Contact
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)

Включить отслеживание изменений для таблицы можно также в SQL Server Management Studio в диалоговом окне Свойства базы данных (страница "Отслеживание изменений").

TRACK_COLUMNS_UPDATED Если для параметра задано ONзначение, ядро СУБД SQL Server сохраняет дополнительные сведения о том, какие столбцы были обновлены во внутренней таблице отслеживания изменений. Отслеживание столбцов позволяет приложению синхронизировать только те столбцы, которые были обновлены. Это может повысить эффективность и производительность. Тем не менее, так как при сохранении сведений об отслеживании столбцов добавляется дополнительная нагрузка на хранилище, этот параметр по умолчанию устанавливается OFF .

Отключение отслеживания изменений для таблицы или базы данных

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

В следующем примере показано, как отключить отслеживание изменений для таблицы с помощью инструкции ALTER TABLE.

ALTER TABLE Person.Contact
DISABLE CHANGE_TRACKING;

Если ни для одной из таблиц базы данных отслеживание изменений не настроено, то оно может быть отключено и на уровне базы данных. В следующем примере показано, как отключить отслеживание изменений для базы данных с помощью параметров ALTER DATABASE SET.

ALTER DATABASE AdventureWorks2022
SET CHANGE_TRACKING = OFF