변경 내용 추적 정보(SQL Server)About Change Tracking (SQL Server)

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure 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 데이터베이스 엔진SQL Server Database Engine 인스턴스와 데이터를 동기화해야 하는 응용 프로그램은 변경 내용을 쿼리할 수 있어야 합니다.Applications that have to synchronize data with an instance of the SQL Server 데이터베이스 엔진SQL 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 Engine 에 저장되어야 하고 다른 데이터 저장소에 캐시되어야 합니다.As shown in the following illustration, a caching application requires data to be stored in the 데이터베이스 엔진Database 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 Engine으로 다시 전달되지 않습니다.There are no changes to pass back to the 데이터베이스 엔진Database Engine.

단방향 동기화 응용 프로그램 표시Shows one-way synchronization applications

양방향 동기화 응용 프로그램Two-Way Synchronization Applications

양방향 동기화 응용 프로그램도 변경 내용 추적을 사용하도록 구축할 수 있습니다.Two-way synchronization applications can also be built that use change tracking. 이 시나리오에서 데이터베이스 엔진Database Engine 인스턴스의 데이터는 하나 이상의 데이터 저장소와 동기화됩니다.In this scenario, the data in an instance of the 데이터베이스 엔진Database Engine is synchronized with one or more data stores. 이러한 저장소의 데이터는 업데이트가 가능하며 변경 내용은 데이터베이스 엔진Database Engine과 다시 동기화되어야 합니다.The data in those stores can be updated and the changes must be synchronized back to the 데이터베이스 엔진Database 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

모든 테이블에 대한 변경 내용 추적 정보(변경 내용 추적에 사용됨)는 메모리 내 rowstore에 저장됩니다.Change tracking information for all tables (enabled for Change Tracking) is stored in an in-memory rowstore. 변경 내용 추적에 사용되는 각 테이블과 연결된 변경 내용 추적 데이터는 검사점이 사용될 때마다 메모리 내 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. 검사점이 사용되는 동안 행이 디스크에 있는 테이블로 이동한 후 메모리 내 rowstore도 제거됩니다.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 2014SQL Server 2014SQL Server 2016SQL Server 2016에 대한 서비스 팩에는 내부 변경 내용 추적의 내부 테이블에 대한 수동 정리를 수행하는 데 필요한 저장 프로시저가 추가되었습니다.A stored procedure was added in Service Packs for SQL Server 2014SQL Server 2014 and SQL Server 2016SQL Server 2016 for performing manual cleanup for the internal Change Tracking internal tables. 저장 프로시저에 대한 자세한 내용은 KB173157을 참조하세요.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)