Sobre o controle de alterações (SQL Server)About Change Tracking (SQL Server)

APLICA-SE A: SimSQL Server SimBanco de Dados SQL do Azure NãoAzure Synapse Analytics (SQL DW) NãoParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

O controle de alterações é uma solução leve que fornece um mecanismo de controle de alterações eficiente para aplicativos.Change tracking is a lightweight solution that provides an efficient change tracking mechanism for applications. Em geral, para permitir que os aplicativos consultassem as alterações nos dados de um banco de dados e acessassem as informações relacionadas às alterações, os desenvolvedores de aplicativos precisavam implementar mecanismos personalizados de controle de alterações.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. A criação desses mecanismos costumava envolver muito trabalho e, com frequência, o uso de uma combinação de gatilhos, colunas timestamp , novas tabelas para armazenar as informações de controle e processos personalizados de limpeza.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.

Tipos distintos de aplicativos têm requisitos diferentes quanto à quantidade de informações que precisam sobre as alterações.Different types of applications have different requirements for how much information they need about the changes. Os aplicativos podem usar o controle de alterações para responder às seguintes perguntas sobre as alterações feitas na tabela de um usuário:Applications can use change tracking to answer the following questions about the changes that have been made to a user table:

  • Que linhas da tabela de um usuário foram alteradas?What rows have changed for a user table?

    • Só é necessário o fato de que uma linha foi alterada, e não quantas vezes ela foi alterada ou os valores das alterações intermediárias.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.

    • Os últimos dados podem ser obtidos diretamente da tabela que está sendo controlada.The latest data can be obtained directly from the table that is being tracked.

  • Uma linha foi alterada?Has a row changed?

    • O fato de que uma linha foi alterada e as informações sobre a alteração devem estar disponíveis e serem registrados no momento em que a alteração foi feita na mesma transação.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.

Observação

Se um aplicativo precisar de informações sobre todas as alterações feitas e os valores intermediários dos dados alterados, talvez seja adequado usar o Change Data Capture, em vez do controle de alterações.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. Para obter mais informações, veja Sobre a captura de dados de alterações (SQL Server).For more information, see About Change Data Capture (SQL Server).

Aplicativos de sincronização unidirecional e bidirecionalOne-Way and Two-Way Synchronization Applications

Os aplicativos que precisam sincronizar dados com uma instância do Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine devem poder consultar alterações.Applications that have to synchronize data with an instance of the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine must be able to query for changes. O controle de alterações pode ser usado como uma base para aplicativos de sincronização unidirecional e bidirecional.Change tracking can be used as a foundation for both one-way and two-way synchronization applications.

Aplicativos de sincronização unidirecionalOne-Way Synchronization Applications

É possível criar aplicativos de sincronização unidirecional, como um aplicativo cliente ou de cache de camada intermediária, que usem o controle de alterações.One-way synchronization applications, such as a client or mid-tier caching application, can be built that use change tracking. Como mostra a ilustração a seguir, um aplicativo em cache exige que os dados sejam armazenados no Mecanismo de Banco de DadosDatabase Engine e armazenados em cache em outros armazenamentos de dados.As shown in the following illustration, a caching application requires data to be stored in the Mecanismo de Banco de DadosDatabase Engine and to be cached in other data stores. O aplicativo deve ser capaz de manter o cache atualizado com as alterações feitas nas tabelas do banco de dados.The application must be able to keep the cache up-to-date with any changes that have been made to the database tables. Não há nenhuma alteração para devolver ao Mecanismo de Banco de DadosDatabase Engine.There are no changes to pass back to the Mecanismo de Banco de DadosDatabase Engine.

Mostra aplicativos de sincronização unidirecionalShows one-way synchronization applications

Aplicativos de sincronização bidirecionalTwo-Way Synchronization Applications

Também é possível criar aplicativos de sincronização bidirecional que usem o controle de alterações.Two-way synchronization applications can also be built that use change tracking. Neste cenário, os dados em uma instância do Mecanismo de Banco de DadosDatabase Engine são sincronizados com um ou mais repositórios de dados.In this scenario, the data in an instance of the Mecanismo de Banco de DadosDatabase Engine is synchronized with one or more data stores. Os dados nesses repositórios podem ser atualizados, e as alterações devem ser sincronizadas novamente com o Mecanismo de Banco de DadosDatabase Engine.The data in those stores can be updated and the changes must be synchronized back to the Mecanismo de Banco de DadosDatabase Engine.

Mostra aplicativos de sincronização bidirecionalShows two-way synchronization applications

Um bom exemplo de aplicativo de sincronização bidirecional é um aplicativo ocasionalmente conectado.A good example of two-way synchronization application is an occasionally connected application. Nesse tipo de aplicativo, um aplicativo cliente consulta e atualiza um repositório local.In this type of application, a client application queries and updates a local store. Quando houver uma conexão disponível entre um cliente e um servidor, o aplicativo será sincronizado com um servidor, e os fluxos de dados alterados ocorrerão nas duas direções.When a connection is available between a client and server, the application will synchronize with a server, and changed data flows in both directions.

Os aplicativos de sincronização bidirecional devem ser capazes de detectar conflitos.The two-way synchronization applications must be able to detect conflicts. Ocorrerá um conflito se os mesmos dados forem alterados em ambos os repositórios de dados em algum momento entre sincronizações.A conflict would occur if the same data was changed in both data stores in the time between synchronizations. Com a capacidade de detectar conflitos, um aplicativo pode certificar-se de que as alterações não sejam perdidas.With the ability to detect conflicts, an application can make sure that changes are not lost.

Como o controle de alterações funcionaHow Change Tracking Works

Para configurar o controle de alterações, você pode usar instruções DDL ou SQL Server Management StudioSQL Server Management Studio.To configure change tracking, you can use DDL statements or SQL Server Management StudioSQL Server Management Studio. Para obter mais informações, veja Habilitar e desabilitar o controle de alterações (SQL Server).For more information, see Enable and Disable Change Tracking (SQL Server). Para controlar alterações, o controle de alterações deve ser habilitado no banco de dados e, então, nas tabelas que você deseja controlar no banco de dados.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. A definição da tabela não precisa sofrer nenhuma alteração, e nenhum gatilho é criado.The table definition does not have to be changed in any way, and no triggers are created.

Após a configuração do controle de alterações para uma tabela, qualquer instrução DML que afete as linhas da tabela fará com que as informações do controle de alterações de cada linha modificada sejam registradas.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. Para consultar as linhas que foram alteradas e obter informações sobre as alterações, você pode usar as funções de controle de alterações.To query for the rows that have changed and to obtain information about the changes, you can use change tracking functions.

Os valores da coluna de chave primária são as únicas informações da tabela controlada que são registradas com as informações sobre as alterações.The values of the primary key column is only information from the tracked table that is recorded with the change information. Esses valores identificam as linhas que foram alteradas.These values identify the rows that have been changed. Para obter os últimos dados sobre essas linhas, um aplicativo pode usar os valores da coluna de chave primária para unir a tabela de origem à tabela controlada.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.

As informações sobre a alteração feita em cada linha também podem ser obtidas usando o controle de alterações.Information about the change that was made to each row can also be obtained by using change tracking. Por exemplo, o tipo de operação DML que causou a alteração (inserção, atualização ou exclusão) ou as colunas que foram alteradas como parte de uma operação de atualização.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.

Limpeza do controle de alteraçõesChange Tracking Cleanup

Informações de controle de alterações para todas as tabelas (habilitado para Controle de Alterações) são armazenadas em um rowstore na memória.Change tracking information for all tables (enabled for Change Tracking) is stored in an in-memory rowstore. Dados de controle de alterações associados a cada tabela habilitados para Controle de Alterações são liberados em cada ponto de verificação do rowstore em memória para a respectiva tabela interna no disco.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. Durante o ponto de verificação, o rowstore em memória também é limpo após as linhas serem movidas para as tabelas em disco.During checkpoint, the in-memory rowstore is also purged after the rows are moved to the on-disk tables.

Cada tabela habilitada para Controle de Alterações tem uma tabela interna em disco que é usada por funções de Controle de Alterações para determinar a versão da alteração e as linhas que foram alteradas desde uma versão específica.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. Sempre que o thread limpeza automática é habilitado, ele examina todos os banco de dados na instância do SQL Server para identificar os bancos de dados habilitados para controle de alterações.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. Com base na configuração de período de retenção do banco de dados, é feita a limpeza dos registros expirados de cada tabela em disco interna.Based on the retention period setting of the database, each internal on-disk table is purged of its expired records.

Um procedimento armazenado foi adicionado em Service Packs para SQL Server 2014 (12.x)SQL Server 2014 (12.x) e SQL Server 2016 (13.x)SQL Server 2016 (13.x) para executar a limpeza manual para tabelas internas de Controle de Alterações.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. Mais informações sobre o procedimento armazenado estão disponíveis em KB173157.More information about the stored procedure is available in KB173157.

Consulte TambémSee Also

Habilitar e desabilitar o controle de alterações (SQL Server) Enable and Disable Change Tracking (SQL Server)
Trabalhar com o controle de alterações (SQL Server) Work with Change Tracking (SQL Server)
Gerenciar o controle de alterações (SQL Server) Manage Change Tracking (SQL Server)
Controle de alterações de dados (SQL Server)Track Data Changes (SQL Server)