이 항목에서는 변경 내용 추적을 관리하는 방법을 설명합니다. 또한 변경 내용 추적을 사용할 때 보안을 구성하고 스토리지 및 성능에 미치는 영향을 확인하는 방법을 설명합니다.
변경 내용 추적 관리
다음 섹션에서는 변경 내용 추적 관리와 관련된 카탈로그 뷰, 사용 권한 및 설정을 나열합니다.
카탈로그 보기
변경 내용 추적을 사용하도록 설정된 테이블 및 데이터베이스를 확인하려면 다음 카탈로그 뷰를 사용할 수 있습니다.
또한 sys.internal_tables 카탈로그 뷰에는 사용자 테이블에 대해 변경 내용 추적을 사용할 때 생성되는 내부 테이블이 나열됩니다.
안전
변경 내용 추적 함수를 사용하여 변경 내용 추적 정보에 액세스하려면 보안 주체에 다음 권한이 있어야 합니다.
쿼리 중인 테이블에 대한 변경 추적 테이블의 기본 키 열 이상에 대한 SELECT 권한입니다.
변경 내용을 가져오는 테이블에 대해 VIEW CHANGE TRACKING 권한이 필요합니다. VIEW 변경 내용 추적 권한은 다음과 같은 이유로 필요합니다.
변경 내용 추적 레코드에는 삭제된 행, 특히 삭제된 행의 기본 키 값에 대한 정보가 포함됩니다. 중요한 데이터 일부가 삭제된 후, 변동 추적 테이블에 대한 SELECT 권한이 주체에 부여되었을 수 있습니다. 이 경우 변경 내용 추적을 사용하여 해당 보안 주체가 해당 삭제된 정보에 액세스할 수 없도록 하고 싶지 않습니다.
변경 내용 추적 정보는 업데이트 작업으로 변경된 열에 대한 정보를 저장할 수 있습니다. 담당자는 민감한 정보가 포함된 열에 대한 접근 권한이 거부될 수 있습니다. 그러나 변경 내용 추적 정보를 사용할 수 있으므로 주체는 열 값이 업데이트되었음을 확인할 수 있지만 주체는 열 값을 확인할 수 없습니다.
변경 내용 추적 오버헤드 이해
테이블에 대해 변경 내용 추적을 사용하도록 설정하면 일부 관리 작업이 영향을 받습니다. 다음 표에서는 고려해야 할 작업 및 효과를 나열합니다.
| 수술 | 변경 내용 추적을 사용하는 경우 |
|---|---|
| 테이블 삭제 | 삭제된 테이블에 대한 모든 변경 내용 추적 정보가 제거됩니다. |
| ALTER TABLE DROP 제약 조건 | PRIMARY KEY 제약 조건을 삭제하려고 하면 실패합니다. PRIMARY KEY 제약 조건을 삭제하려면 먼저 변경 내용 추적을 사용하지 않도록 설정해야 합니다. |
| ALTER TABLE DROP COLUMN (테이블 열 삭제) | 삭제되는 열이 기본 키의 일부인 경우 변경 내용 추적에 관계없이 열을 삭제할 수 없습니다. 삭제되는 열이 기본 키의 일부가 아닌 경우 열을 삭제하는 데 성공합니다. 그러나 이 데이터를 동기화하는 모든 애플리케이션에 미치는 영향을 먼저 이해해야 합니다. 테이블에 열 변경 내용 추적을 사용하도록 설정하면 삭제된 열이 변경 내용 추적 정보의 일부로 반환될 수 있습니다. 삭제된 열을 처리하는 것은 애플리케이션의 책임입니다. |
| ALTER TABLE ADD COLUMN | 변경 내용 추적 테이블에 새 열이 추가되면 열 추가가 추적되지 않습니다. 새 열에 대한 업데이트 및 변경 내용만 추적됩니다. |
| 테이블 수정 컬럼 수정 | 기본이 아닌 키 열의 데이터 형식 변경 내용은 추적되지 않습니다. |
| ALTER TABLE SWITCH | 테이블 중 하나 또는 둘 다 변경 내용 추적을 사용하도록 설정한 경우 파티션 전환이 실패합니다. |
| DROP INDEX 또는 ALTER INDEX DISABLE | 기본 키를 적용하는 인덱스는 삭제하거나 사용하지 않도록 설정할 수 없습니다. |
| 테이블 비우기 | 변경 내용 추적을 사용하도록 설정된 테이블에서 테이블 잘림을 수행할 수 있습니다. 그러나 작업에 의해 삭제된 행은 추적되지 않으며 유효한 최소 버전이 업데이트됩니다. 애플리케이션에서 해당 버전을 검사할 때 버전이 너무 오래되었으며 다시 초기화가 필요했음을 확인합니다. 이는 변경 내용 추적을 사용하지 않도록 설정한 다음 테이블에 대해 다시 활성화하는 것과 같습니다. |
변경 내용 추적을 사용하면 작업의 일부로 저장되는 변경 내용 추적 정보로 인해 DML 작업에 약간의 오버헤드가 추가됩니다.
DML에 미치는 영향
변경 내용 추적은 DML 작업의 성능 오버헤드를 최소화하도록 최적화되었습니다. 테이블에서 변경 내용 추적을 사용하는 것과 관련된 증분 성능 오버헤드는 테이블에 대한 인덱스가 생성되고 유지 관리해야 할 때 발생하는 오버헤드와 유사합니다.
DML 작업에 의해 변경되는 각 행에 대해 행이 내부 변경 내용 추적 테이블에 추가됩니다. DML 연산을 기준으로 하는 이 효과는 다음과 같은 다양한 요인에 따라 달라집니다.
기본 키 열의 수
사용자 테이블 행에서 변경되는 데이터 양
트랜잭션에서 수행되는 작업 수
스냅샷 격리를 사용하는 경우 변경 내용 추적을 사용할지 여부에 관계없이 모든 DML 작업의 성능에도 영향을 줍니다.
스토리지에 미치는 영향
변경 내용 추적 데이터는 다음과 같은 유형의 내부 테이블에 저장됩니다.
내부 변경 테이블
변경 내용 추적을 사용하도록 설정된 각 사용자 테이블에 대해 하나의 내부 변경 테이블이 있습니다.
내부 트랜잭션 테이블
데이터베이스에 대한 내부 트랜잭션 테이블이 하나 있습니다.
이러한 내부 테이블은 다음과 같은 방법으로 스토리지 요구 사항에 영향을 줍니다.
사용자 테이블의 각 행에 대한 각 변경 내용에 대해 내부 변경 테이블에 행이 추가됩니다. 이 행에는 작은 고정 오버헤드와 기본 키 열의 크기와 같은 변수 오버헤드가 있습니다. 행에는 애플리케이션에서 설정한 선택적 컨텍스트 정보가 포함될 수 있습니다. 열 추적을 사용하도록 설정하면 변경된 각 열에 추적 테이블에 4바이트가 필요합니다.
커밋된 각 트랜잭션에 대해 행이 내부 트랜잭션 테이블에 추가됩니다.
다른 내부 테이블과 마찬가지로 저장 프로시저 sp_spaceused를 사용하여 변경 추적 테이블에 사용되는 공간을 확인할 수 있습니다. 내부 테이블의 이름은 다음 예제와 같이 sys.internal_tables 카탈로그 뷰를 사용하여 가져올 수 있습니다.
sp_spaceused 'sys.change_tracking_309576141'
sp_spaceused 'sys.syscommittab'
또한 참조하십시오
데이터 변경 내용 추적(SQL Server)
ALTER TABLE(Transact-SQL)
데이터베이스 속성(변경 내용 추적 페이지)
ALTER DATABASE 설정 옵션(Transact-SQL)
sys.change_tracking_databases(Transact-SQL)
sys.change_tracking_tables(변경 추적 테이블)(Transact-SQL)
데이터 변경 내용 추적(SQL Server)
변경 추적에 대하여(SQL Server)
변경 데이터 다루기(SQL Server)