변경 내용 추적 관리(SQL Server)Manage 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

이 항목에서는 변경 내용 추적을 관리하는 방법에 대해 설명합니다.This topic describes how to manage change tracking. 또한 보안을 구성하는 방법과 변경 내용 추적을 사용할 때 저장소 및 성능에 미치는 영향을 확인하는 방법에 대해서도 설명합니다.It also describes how to configure security and determine the effects on storage and performance when change tracking is used.

변경 내용 추적 관리Managing Change Tracking

다음 섹션에서는 변경 내용 추적 관리와 관련된 카탈로그 뷰, 사용 권한 및 설정에 대해 설명합니다.The following sections list catalog views, permissions, and settings that are relevant for managing change tracking.

카탈로그 뷰Catalog Views

다음 카탈로그 뷰를 사용하여 변경 내용 추적이 설정된 테이블 및 데이터베이스를 확인할 수 있습니다.To determine which tables and databases have change tracking enabled, you can use the following catalog views:

보안Security

변경 내용 추적 함수를 사용하여 변경 내용 추적 정보에 액세스하려면 보안 주체에 다음 사용 권한이 있어야 합니다.To access change tracking information by using the change tracking functions, the principal must have the following permissions:

  • 변경 내용 추적이 설정된 쿼리하는 테이블에 있는 한 개 이상의 기본 키 열에 대한 SELECT 권한SELECT permission on at least the primary key columns on the change-tracked table to the table that is being queried.

  • 변경 내용을 가져오는 테이블에 대한 VIEW CHANGE TRACKING 권한.VIEW CHANGE TRACKING permission on the table for which changes are being obtained. VIEW CHANGE TRACKING 권한이 필요한 이유는 다음과 같습니다.The VIEW CHANGE TRACKING permission is required for the following reasons:

    • 변경 내용 추적 레코드에는 삭제된 행, 특히 삭제된 행의 기본 키 값에 대한 정보가 포함됩니다.Change tracking records include information about rows that have been deleted, specifically the primary key values of the rows that have been deleted. 일부 중요한 데이터를 삭제한 후에 보안 주체에게 변경 내용 추적이 설정된 테이블에 대한 SELECT 권한이 부여되었을 수 있습니다.A principal could have been granted SELECT permission for a change tracked table after some sensitive data had been deleted. 이러한 경우 해당 보안 주체가 변경 내용 추적을 사용하여 삭제된 정보에 액세스하지 못하도록 해야 합니다.In this case, you would not want that principal to be able to access that deleted information by using change tracking.

    • 변경 내용 추적 정보는 업데이트 작업으로 변경된 열에 대한 정보를 저장할 수 있습니다.Change tracking information can store information about which columns have been changed by update operations. 보안 주체는 중요한 정보가 포함된 열에 대한 권한이 거부될 수 있습니다.A principal could be denied permission to a column that contains sensitive information. 변경 내용 추적 정보를 사용할 수 있으므로 보안 주체는 열 값이 업데이트되었는지를 확인할 수 있지만 해당 열의 값은 확인할 수 없습니다.However, because change tracking information is available, a principal can determine that a column value has been updated, but the principal cannot determine the value of the column.

변경 내용 추적 오버헤드 이해Understanding Change Tracking Overhead

테이블에 변경 내용 추적이 설정되면 일부 관리 작업에 영향을 줄 수 있습니다.When change tracking is enabled for a table, some administration operations are affected. 다음 표에서는 작업 및 고려해야 하는 영향에 대해 설명합니다.The following table lists the operations and the effects you should consider.

연산Operation 변경 내용 추적이 설정된 경우When change tracking is enabled
DROP TABLEDROP TABLE 삭제된 테이블에 대한 모든 변경 내용 추적 정보가 제거됩니다.All change tracking information for the dropped table is removed.
ALTER TABLE DROP CONSTRAINTALTER TABLE DROP CONSTRAINT PRIMARY KEY 제약 조건을 삭제하려는 시도가 실패합니다.An attempt to drop the PRIMARY KEY constraint will fail. 변경 내용 추적을 해제해야 PRIMARY KEY 제약 조건을 삭제할 수 있습니다.Change tracking must be disabled before a PRIMARY KEY constraint can be dropped.
ALTER TABLE DROP COLUMNALTER TABLE DROP COLUMN 삭제된 열이 기본 키의 일부일 경우 변경 내용 추적과 관계없이 해당 열을 삭제할 수 없습니다.If a column that is being dropped is part of the primary key, dropping the column is not allowed, regardless of change tracking.

삭제된 열이 기본 키의 일부가 아닐 경우 해당 열을 삭제할 수 있습니다.If the column that is being dropped is not part of the primary key, dropping the column succeeds. 그러나 이 데이터를 동기화하는 응용 프로그램에 미치는 영향에 대해 먼저 이해해야 합니다.However, the effect on any application that is synchronizing this data should be understood first. 테이블에 열 변경 내용 추적이 설정되어 있을 경우 삭제된 열이 여전히 변경 내용 추적 정보의 일부로 반환될 수도 있습니다.If column change tracking is enabled for the table, the dropped column might still be returned as part of the change tracking information. 삭제된 열은 응용 프로그램에서 처리해야 합니다.It is the responsibility of the application to handle the dropped column.
ALTER TABLE ADD COLUMNALTER TABLE ADD COLUMN 변경 내용 추적이 설정된 테이블에 새 열이 추가될 경우 이 열 추가 작업은 추적되지 않습니다.If a new column is added to the change tracked table, the addition of the column is not tracked. 새 열에 대해 수행된 업데이트 및 변경 내용만 추적됩니다.Only the updates and changes that are made to the new column are tracked.
ALTER TABLE ALTER COLUMNALTER TABLE ALTER COLUMN 기본 키가 아닌 열의 데이터 형식 변경 내용은 추적되지 않습니다.Data type changes of a non-primary key columns are not tracked.
ALTER TABLE SWITCHALTER TABLE SWITCH 테이블 중 하나 또는 둘 모두에 변경 내용 추적이 설정된 경우 파티션 전환에 실패합니다.Switching a partition fails if one or both of the tables has change tracking enabled.
DROP INDEX 또는 ALTER INDEX DISABLEDROP INDEX, or ALTER INDEX DISABLE 기본 키를 강제 적용하는 인덱스는 삭제 또는 해제할 수 없습니다.The index that enforces the primary key cannot be dropped or disabled.
TRUNCATE TABLETRUNCATE TABLE 테이블 잘라내기는 변경 내용 추적이 설정된 테이블에서 수행할 수 있습니다.Truncating a table can be performed on a table that has change tracking enabled. 그러나 이 작업으로 삭제된 행은 추적되지 않으며 유효한 최소 버전이 업데이트됩니다.However, the rows that are deleted by the operation are not tracked, and the minimum valid version is updated. 응용 프로그램이 버전을 검사할 때 해당 버전이 너무 오래되어 다시 초기화해야 한다고 나타납니다.When an application checks its version, the check indicates that the version is too old and a reinitialization is required. 이는 해당 테이블의 변경 내용 추적이 해제된 다음 다시 설정되는 것과 동일합니다.This is the same as change tracking being disabled, and then reenabled for the table.

변경 내용 추적을 사용하더라도 변경 내용 추적 정보가 작업의 일부로 저장되므로 DML 작업에는 오버헤드가 추가되지 않습니다.Using change tracking does add some overhead to DML operations because of the change tracking information that is being stored as part of the operation.

DML에 미치는 영향Effects on DML

변경 내용 추적은 DML 작업에 대한 성능 오버헤드를 최소화하도록 최적화되었습니다.Change tracking has been optimized to minimize the performance overhead on DML operations. 테이블에 변경 내용 추적을 사용하는 것과 연관된 증분 성능 오버헤드는 테이블에 대해 인덱스가 생성되어 유지 관리가 필요해질 때 발생하는 오버헤드와 비슷합니다.The incremental performance overhead that is associated with using change tracking on a table is similar to the overhead incurred when an index is created for a table and needs to be maintained.

DML 작업으로 변경된 각 행의 경우 내부 변경 내용 추적 테이블에 한 개의 행이 추가됩니다.For each row that is changed by a DML operation, a row is added to the internal change tracking table. DML 작업과 관련한 이런 영향은 다음과 같은 다양한 요소에 따라 달라집니다.The effect of this relative to the DML operation depends on various factors, such as the following:

  • 기본 키 열의 수The number of primary key columns

  • 사용자 테이블 행에서 변경되는 데이터의 양The amount of data that is being changed in the user table row

  • 트랜잭션에서 수행되는 작업의 수The number of operations that are being performed in a transaction

    스냅숏 격리를 사용하는 경우에도 변경 내용 추적의 설정 여부와 관계없이 모든 DML 작업에 대한 성능에 영향을 미칩니다.Snapshot isolation, if used, also has an effect on performance for all DML operations, whether change tracking is enabled or not.

저장소에 미치는 영향Effects on Storage

변경 내용 추적 데이터는 다음과 같은 유형의 내부 테이블에 저장됩니다.Change tracking data is stored in the following types of internal tables:

  • 내부 변경 테이블Internal change table

    변경 내용 추적을 설정한 각 사용자 테이블에 대해 하나의 내부 변경 테이블이 있습니다.There is one internal change table for each user table that has change tracking enabled.

  • 내부 트랜잭션 테이블Internal transaction table

    데이터베이스에 대해 하나의 내부 트랜잭션 테이블이 있습니다.There is one internal transaction table for the database.

    이러한 내부 테이블은 다음과 같은 방법으로 저장소 요구 사항에 영향을 미칩니다.These internal tables affect storage requirements in the following ways:

  • 사용자 테이블에 있는 각 행에 대한 개별 변경 내용의 경우 내부 변경 내용 테이블에 한 행이 추가됩니다.For each change to each row in the user table, a row is added to the internal change table. 이 행에는 작은 고정 오버헤드와 기본 키 열의 크기와 같은 가변 오버헤드가 있습니다.This row has a small fixed overhead plus a variable overhead equal to the size of the primary key columns. 이 행은 응용 프로그램이 설정한 선택적 컨텍스트 정보를 포함할 수 있습니다.The row can contain optional context information set by an application. 그리고 열 추적이 설정된 경우 변경된 각 열은 추적 테이블에 4바이트가 필요합니다.And, if column tracking is enabled, each changed column requires 4 bytes in the tracking table.

  • 커밋된 각 트랜잭션에 대해 하나의 행이 내부 트랜잭션 테이블에 추가됩니다.For each committed transaction, a row is added to an internal transaction table.

    다른 내부 테이블을 사용할 때와 같이 sp_spaceused 저장 프로시저를 사용하여 변경 내용 추적 테이블에 사용되는 공간을 결정할 수 있습니다.As with other internal tables, you can determine the space used for the change tracking tables by using the sp_spaceused stored procedure. 내부 테이블의 이름은 다음 예와 같이 sys.internal_tables 카탈로그 뷰를 사용하여 가져올 수 있습니다.The names of the internal tables can be obtained by using the sys.internal_tables catalog view, as shown in the following example.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'  

참고 항목See Also

데이터 변경 내용 추적(SQL Server) Track Data Changes (SQL Server)
ALTER TABLE(Transact-SQL) ALTER TABLE (Transact-SQL)
데이터베이스 속성(변경 내용 추적 페이지) Database Properties (ChangeTracking Page)
ALTER DATABASE SET 옵션(Transact-SQL) ALTER DATABASE SET Options (Transact-SQL)
sys.change_tracking_databases(Transact-SQL) sys.change_tracking_databases (Transact-SQL)
sys.change_tracking_tables(Transact-SQL) sys.change_tracking_tables (Transact-SQL)
데이터 변경 내용 추적(SQL Server) Track Data Changes (SQL Server)
변경 내용 추적 정보(SQL Server) About Change Tracking (SQL Server)
변경 데이터 작업(SQL Server) Work with Change Data (SQL Server)