Общие сведения об отслеживании изменений данных

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

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

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

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

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

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

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

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

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

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

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

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

Показывает применение односторонней синхронизации

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

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

Показывает применение двусторонней синхронизации

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

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

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

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

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

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

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