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

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Отслеживание изменений — это простое решение, обеспечивающее эффективный механизм отслеживания изменений для приложений.Change tracking is a lightweight solution that provides an efficient change tracking mechanism for applications. Обычно, чтобы позволить приложениям направлять запросы об изменениях данных в базе данных и получить доступ к сведениям об изменениях, разработчикам приложений приходится реализовывать специальные механизмы отслеживания изменений.Typically, to enable applications to query for changes to data in a database and access information that is related to the changes, application developers had to implement custom change tracking mechanisms. Создание таких механизмов, как правило, трудоемкая работа и часто связана с использованием сочетания триггеров, столбцов timestamp , новых таблиц для хранения сведений отслеживания и специальных процессов очистки.Creating these mechanisms usually involved a lot of work and frequently involved using a combination of triggers, timestamp columns, new tables to store tracking information, and custom cleanup processes.

У различных типов приложений разные требования к уровню детализации необходимых им сведений об изменениях.Different types of applications have different requirements for how much information they need about the changes. Отслеживая изменения, приложения могут отвечать на следующие вопросы об изменениях, сделанных в пользовательской таблице.Applications can use change tracking to answer the following questions about the changes that have been made to a user table:

  • Какие строки изменены в пользовательской таблице?What rows have changed for a user table?

    • Требуется только факт изменения строки, но не число изменений строки или значения промежуточных изменений.Only the fact that a row has changed is required, not how many times the row has changed or the values of any intermediate changes.

    • Можно получить последние данные непосредственно из отслеживаемой таблицы.The latest data can be obtained directly from the table that is being tracked.

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

    • Факт изменения строки и сведения об изменении должны быть доступны и записаны при внесении изменения в той же транзакции.The fact that a row has changed and information about the change must be available and recorded at the time that the change was made in the same transaction.

Примечание

Если приложению необходимы данные обо всех произведенных изменениях и все промежуточные значения, следует воспользоваться методом записи данных изменений вместо отслеживания изменений.If an application requires information about all the changes that were made and the intermediate values of the changed data, using change data capture, instead of change tracking, might be appropriate. Дополнительные сведения см. в статье О системе отслеживания измененных данных (SQL Server).For more information, see About Change Data Capture (SQL Server).

Приложения односторонней и двусторонней синхронизацииOne-Way and Two-Way Synchronization Applications

Приложения, которым требуется синхронизировать данные с экземпляром компонента Компонент SQL Server Database EngineSQL Server Database Engine , должны иметь возможность направлять запрос об изменениях.Applications that have to synchronize data with an instance of the Компонент SQL Server Database EngineSQL Server Database Engine must be able to query for changes. Отслеживание изменений может послужить основой для односторонней и двусторонней синхронизации приложений.Change tracking can be used as a foundation for both one-way and two-way synchronization applications.

Приложения односторонней синхронизацииOne-Way Synchronization Applications

Приложения односторонней синхронизации, такие как клиентское или приложение кэширования промежуточного уровня, можно построить с использованием отслеживания изменений.One-way synchronization applications, such as a client or mid-tier caching application, can be built that use change tracking. Как показано на следующей иллюстрации, приложение кэширования требует, чтобы данные хранились в компоненте Компонент Database EngineDatabase Engine и кэшировались в других хранилищах.As shown in the following illustration, a caching application requires data to be stored in the Компонент Database EngineDatabase Engine and to be cached in other data stores. Приложение должно иметь возможность своевременно помещать в кэш любые изменения, внесенные в таблицы базы данных.The application must be able to keep the cache up-to-date with any changes that have been made to the database tables. Изменения в компонент Компонент Database EngineDatabase Engineне передаются.There are no changes to pass back to the Компонент Database EngineDatabase Engine.

Отображение приложений односторонней синхронизацииShows one-way synchronization applications

Приложения двусторонней синхронизацииTwo-Way Synchronization Applications

С помощью отслеживания изменений можно также построить и приложения двусторонней синхронизации.Two-way synchronization applications can also be built that use change tracking. В этом случае данные в экземпляре компонента Компонент Database EngineDatabase Engine синхронизируется с одним или несколькими хранилищами данных.In this scenario, the data in an instance of the Компонент Database EngineDatabase Engine is synchronized with one or more data stores. Данные в этих хранилищах могут быть обновлены, а изменения должны быть синхронизированы с компонентом Компонент Database EngineDatabase Engine.The data in those stores can be updated and the changes must be synchronized back to the Компонент Database EngineDatabase Engine.

Отображение приложений двусторонней синхронизацииShows two-way synchronization applications

Хороший пример приложения двусторонней синхронизации — периодически подключаемое приложение.A good example of two-way synchronization application is an occasionally connected application. В приложении такого типа клиентское приложение направляет запрос и обновляет локальное хранилище.In this type of application, a client application queries and updates a local store. Если существует соединение между клиентом и сервером, приложение выполняет синхронизацию с сервером, а измененные данные передаются в обоих направлениях.When a connection is available between a client and server, the application will synchronize with a server, and changed data flows in both directions.

Приложения двусторонней синхронизации должны уметь распознавать конфликты.The two-way synchronization applications must be able to detect conflicts. Конфликт возникнет, если одни и те же данные были изменены в обоих хранилищах в период времени между сеансами синхронизации.A conflict would occur if the same data was changed in both data stores in the time between synchronizations. Благодаря возможности обнаруживать конфликты приложение может избежать потери изменений.With the ability to detect conflicts, an application can make sure that changes are not lost.

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

Чтобы настроить отслеживание изменений, можно использовать инструкции DDL или среду SQL Server Management StudioSQL Server Management Studio.To configure change tracking, you can use DDL statements or SQL Server Management StudioSQL Server Management Studio. Дополнительные сведения см. в статье Включение и отключение отслеживания изменений (SQL Server).For more information, see Enable and Disable Change Tracking (SQL Server). Чтобы разрешить отслеживание изменений, необходимо включить эту функцию сначала на уровне базы данных, а затем для всех таблиц базы данных, изменения в которых необходимо отслеживать.To track changes, change tracking must first be enabled for the database and then enabled for the tables that you want to track within that database. Вносить какие-либо изменения в определение таблицы необязательно, триггеры не создаются.The table definition does not have to be changed in any way, and no triggers are created.

После настройки отслеживания изменений для таблицы любая DML-инструкция, затрагивающая строку в таблице, вызовет запись данных отслеживания изменений об измененной строке.After change tracking is configured for a table, any DML statement that affects rows in the table will cause change tracking information for each modified row to be recorded. При помощи функций отслеживания измененийможно запросить, какие строки были изменены, и получить сведения об этих изменениях.To query for the rows that have changed and to obtain information about the changes, you can use change tracking functions.

Из отслеживаемой таблицы вместе со сведениями об изменениях записываются лишь данные о значениях в первичном ключевом столбце.The values of the primary key column is only information from the tracked table that is recorded with the change information. Эти значения идентифицируют измененные строки.These values identify the rows that have been changed. Приложение может произвести соединение исходной таблицы с отслеживаемой таблицей по значениям первичного ключевого столбца, чтобы извлечь для этих строк новые значения данных.To obtain the latest data for those rows, an application can use the primary key column values to join the source table with the tracked table.

Сведения об изменении, внесенном в каждую строку, могут быть получены с помощью отслеживания изменений.Information about the change that was made to each row can also be obtained by using change tracking. Например, тип операции DML, который вызвал изменение (вставку, обновление или удаление), или столбцы, измененные в ходе операции обновления.For example, the type of DML operation that caused the change (insert, update, or delete) or the columns that were changed as part of an update operation.

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

Сведения об отслеживании изменений для всех таблиц (с включенной функцией отслеживания изменений) хранятся в хранилище строк в памяти.Change tracking information for all tables (enabled for Change Tracking) is stored in an in-memory rowstore. Данные отслеживания изменений, связанные с каждой таблицей, включенной для отслеживания изменений, записываются на каждой контрольной точке из хранилища строк в памяти в соответствующую внутреннюю таблицу на диске.Change tracking data associated with each table enabled for Change Tracking is flushed on every checkpoint from the in-memory rowstore to the corresponding on-disk internal table. Во время контрольной точки хранилище строк в памяти удаляется после перемещения строк в таблицы на диске.During checkpoint, the in-memory rowstore is also purged after the rows are moved to the on-disk tables.

Каждая таблица, включенная для отслеживания изменений, содержит внутреннюю таблицу на диске, которая используется функциями отслеживания изменений для определения версии изменения и строк, измененных после определенной версии.Each table that is enabled for Change Tracking has an internal on-disk table which is used by Change Tracking functions to determine the change version and the rows that have changed since a particular version. При каждой активации потока автоматической очистки проверяются все пользовательские базы данных на экземпляре SQL Server для определения баз данных с поддержкой отслеживания изменений.Every time the auto cleanup thread wakes up, it scans all the user databases on the SQL Server instance to identify the change tracking enabled databases. На основе параметра срока хранения базы данных каждая внутренняя таблица на диске удаляется из устаревших записей.Based on the retention period setting of the database, each internal on-disk table is purged of its expired records.

Хранимая процедура входит в пакеты обновления SQL Server 2014 (12.x)SQL Server 2014 (12.x) и SQL Server 2016 (13.x)SQL Server 2016 (13.x) для выполнения очистки внутренних таблиц отслеживания изменений вручную.A stored procedure was added in Service Packs for SQL Server 2014 (12.x)SQL Server 2014 (12.x) and SQL Server 2016 (13.x)SQL Server 2016 (13.x) for performing manual cleanup for the internal Change Tracking internal tables. Дополнительные сведения о хранимой процедуре см. в статье базы знаний 173157.More information about the stored procedure is available in KB173157.

См. также:See Also

Включение и отключение отслеживания изменений (SQL Server) Enable and Disable Change Tracking (SQL Server)
Работа с отслеживанием изменений (SQL Server) Work with Change Tracking (SQL Server)
Управление отслеживанием изменений (SQL Server) Manage Change Tracking (SQL Server)
Отслеживание измененных данных (SQL Server)Track Data Changes (SQL Server)