Об отслеживании изменений (SQL Server)

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

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

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

  • Какие строки изменены в пользовательской таблице?

    • Требуется только факт изменения строки, но не число изменений строки или значения промежуточных изменений.

    • Можно получить последние данные непосредственно из отслеживаемой таблицы.

  • Изменилась ли строка?

    • Факт изменения строки и сведения об изменении должны быть доступны и записаны при внесении изменения в той же транзакции.

Заметка

Если приложению необходимы данные обо всех произведенных изменениях и все промежуточные значения, следует воспользоваться методом записи данных изменений вместо отслеживания изменений. Дополнительные сведения см. в статье об отслеживании измененных данных (SQL Server).

Приложения односторонней и двусторонней синхронизации

Приложения, которым требуется синхронизировать данные с экземпляром ядра СУБД Microsoft SQL Server, должны иметь возможность направлять запрос об изменениях. Отслеживание изменений может послужить основой для односторонней и двусторонней синхронизации приложений.

Приложения односторонней синхронизации

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

Diagram showing one-way synchronization applications.

Приложения двусторонней синхронизации

С помощью отслеживания изменений можно также построить и приложения двусторонней синхронизации. В этом сценарии данные в экземпляре ядра СУБД синхронизируются с одним или несколькими хранилищами данных. Данные в этих хранилищах можно обновить, и изменения должны быть синхронизированы с ядром СУБД.

Diagram showing two-way synchronization applications.

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

Приложения двусторонней синхронизации должны уметь распознавать конфликты. Конфликт возникнет, если одни и те же данные были изменены в обоих хранилищах в период времени между сеансами синхронизации. Благодаря возможности обнаруживать конфликты приложение может избежать потери изменений.

Принципы работы отслеживания изменений

Чтобы настроить отслеживание изменений, можно использовать инструкции DDL или SQL Server Management Studio. Дополнительные сведения см. в разделе "Включение и отключение отслеживания изменений" (SQL Server). Чтобы разрешить отслеживание изменений, необходимо включить эту функцию сначала на уровне базы данных, а затем для всех таблиц базы данных, изменения в которых необходимо отслеживать. Вносить какие-либо изменения в определение таблицы необязательно, триггеры не создаются.

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

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

Сведения об изменении, внесенном в каждую строку, могут быть получены с помощью отслеживания изменений. Например, тип операции DML, который вызвал изменение (вставку, обновление или удаление), или столбцы, измененные в ходе операции обновления.

Очистка отслеживания изменений

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

Каждая таблица, включенная для отслеживания изменений, содержит внутреннюю таблицу на диске, которая используется функциями отслеживания изменений для определения версии изменения и строк, измененных после определенной версии. При каждой активации потока автоматической очистки проверяются все пользовательские базы данных на экземпляре SQL Server для определения баз данных с поддержкой отслеживания изменений. На основе параметра срока хранения базы данных каждая внутренняя таблица на диске удаляется из устаревших записей.

Хранимая процедура была добавлена в пакеты обновления для SQL Server 2014 (12.x) и SQL Server 2016 (13.x) для выполнения ручной очистки внутренних таблиц отслеживания изменений. Дополнительные сведения о хранимой процедуре см. в статье базы знаний 173157.

См. также

Включение и отключение отслеживания изменений (SQL Server)
Работа с отслеживанием изменений (SQL Server)
Управление отслеживанием изменений (SQL Server)
Очистка и устранение неполадок отслеживания изменений (Transact-SQL)
Отслеживание изменений данных (SQL Server)
Хранимые процедуры отслеживания изменений (Transact-SQL)
Системные таблицы отслеживания изменений (Transact-SQL)