변경 내용 추적 정보(SQL Server)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
이 문서에서는 애플리케이션에 대한 효율적인 변경 추적 메커니즘을 제공하는 경량 솔루션인 SQL Server의 변경 추적 기능에 대해 설명합니다.
시작하려면 변경 내용 추적 구성을 검토하세요.
개요
이전에는 애플리케이션에서 데이터베이스의 데이터 변경 내용을 쿼리하고 변경 내용과 관련된 정보에 액세스할 수 있도록, 애플리케이션 개발자는 사용자 지정 변경 내용 추적 메커니즘을 구현해야 했습니다. 이러한 메커니즘에는 일반적으로 트리거, 타임스탬프 열, 추적 정보를 저장할 새로운 테이블, 사용자 지정 정리 프로세스의 조합과 같은 많은 작업이 포함됩니다. SQL Server의 변경 내용 추적 기능은 이 프로세스를 간소화하여 사용자 지정 솔루션 없이도 변경과 관련된 정보를 쉽게 식별할 수 있도록 합니다.
변경 내용에 대해 필요한 정보의 양과 관련된 요구 사항은 애플리케이션 유형마다 다릅니다. 애플리케이션에서는 변경 내용 추적을 사용하여 사용자 테이블에 수행된 변경에 대한 다음 질문에 답할 수 있습니다.
사용자 테이블에 대해 어떤 행이 변경되었는가?
행이 변경되었다는 사실만 필요하며, 행이 변경된 횟수 또는 중간 변경의 값은 필요하지 않습니다.
최신 데이터는 추적되는 테이블에서 직접 얻을 수 있습니다.
행이 변경되었는가?
- 행이 변경되었다는 사실, 그리고 이 변경에 대한 정보가 있어야 하며 동일한 트랜잭션에 변경이 수행된 시점에 이 사항이 기록되어야 합니다.
참고 항목
애플리케이션이 적용된 모든 변경 내용에 대한 정보와 변경된 데이터의 중간 값을 요구하면 변경 내용 추적 대신 변경 데이터 캡처를 사용하는 것이 좋습니다. 자세한 내용은 변경 데이터 캡처 정보(SQL Server)를 참조하세요.
단방향 및 양방향 동기화 애플리케이션
SQL Server 데이터베이스 엔진의 인스턴스와 데이터를 동기화해야 하는 애플리케이션은 변경 내용을 쿼리할 수 있어야 합니다. 변경 내용 추적은 단방향 및 양방향 동기화 애플리케이션 모두에 대한 기반으로 사용될 수 있습니다.
단방향 동기화 애플리케이션
클라이언트 또는 중간 계층 캐싱 애플리케이션과 같은 단방향 동기화 애플리케이션은 변경 내용 추적을 사용하도록 구축할 수 있습니다. 다음 그림에서 볼 수 있듯이 캐싱 애플리케이션에서는 데이터가 데이터베이스 엔진 에 저장되어야 하고 다른 데이터 저장소에 캐시되어야 합니다. 애플리케이션은 데이터베이스 테이블에 수행된 변경 작업에 대해 캐시를 최신 상태로 유지할 수 있어야 합니다. 변경 내용은 데이터베이스 엔진으로 다시 전달되지 않습니다.
양방향 동기화 애플리케이션
양방향 동기화 애플리케이션 역시 변경 내용 추적을 사용하도록 구축할 수 있습니다. 이 시나리오에서 데이터베이스 엔진 인스턴스의 데이터는 하나 이상의 데이터 저장소와 동기화됩니다. 이러한 저장소의 데이터는 업데이트가 가능하며 변경 내용은 데이터베이스 엔진과 다시 동기화되어야 합니다.
양방향 동기화 애플리케이션의 좋은 예는 간헐적으로 연결된 애플리케이션입니다. 이 유형의 애플리케이션에서 클라이언트 애플리케이션은 로컬 저장소를 쿼리하고 업데이트합니다. 클라이언트와 서버 간에 연결을 사용할 수 있으면 애플리케이션이 서버와 동기화되고 변경된 데이터 흐름이 양방향으로 표시됩니다.
양방향 동기화 애플리케이션은 충돌을 검색할 수 있어야 합니다. 동기화 사이에 두 데이터 저장소에서 동일한 데이터가 변경된 경우 충돌이 발생합니다. 충돌 검색 기능을 통해 애플리케이션은 변경 내용이 누락되지 않도록 보장할 수 있습니다.
변경 내용 추적 작동 방법
변경 내용 추적을 구성하려면 DDL 문 또는 SQL Server Management Studio를 사용하면 됩니다. 자세한 내용은 변경 내용 추적 사용 및 사용 안 함을 참조하세요. 변경 내용을 추적하려면 먼저 데이터베이스에 변경 내용 추적을 설정한 다음 해당 데이터베이스에 있는 추적할 테이블에 변경 내용 추적을 설정해야 합니다. 테이블 정의는 어떤 방식으로도 변경할 필요가 없으며 트리거가 만들어지지 않습니다.
변경 내용 추적이 테이블에 대해 구성되면 해당 테이블의 행에 영향을 미치는 DML 문이 수정된 각 행에 대한 변경 내용 추적을 기록합니다. 변경된 행을 쿼리하고 변경 내용에 대한 정보를 얻으려면 변경 내용 추적 함수를 사용하면 됩니다.
추적되는 테이블에서 변경 내용 정보와 함께 기록되는 유일한 정보는 기본 키 열의 값입니다. 이러한 값은 변경된 행을 식별합니다. 이러한 행에 대한 최신 데이터를 얻으려면 애플리케이션에서는 기본 키 열 값을 사용하여 원본 테이블을 추적되는 테이블에 조인하면 됩니다.
각 행에 대해 수행된 변경에 대한 정보도 변경 내용 추적을 사용하여 얻을 수 있습니다. 예를 들어 변경을 일으킨 DML 작업의 유형(삽입, 업데이트 또는 삭제) 또는 업데이트 작업의 일부로 변경된 열이 있습니다.
열 값이 변경되지 않더라도 모든 DML 작업이 추적됩니다. 예를 들어 update 문이 열을 이미 가지고 있는 값과 동일한 값으로 설정하는 경우 열은 여전히 변경된 것으로 간주됩니다.
변경 내용 추적 정리
(변경 내용 추적을 사용하도록 설정된) 모든 테이블의 변경 내용 추적 정보는 메모리 내 rowstore에 저장됩니다. 변경 내용 추적을 사용하도록 설정된 각 테이블과 연결된 변경 내용 추적 데이터는 메모리 내 rowstore의 모든 검사점에서 해당 디스크 내 내부 테이블로 플러시됩니다. 검사점이 사용되는 동안 행이 디스크에 있는 테이블로 이동한 후 메모리 내 rowstore도 제거됩니다.
변경 내용 추적을 사용하도록 설정된 각 테이블에는 변경 내용 추적 함수에서 특정 버전 이후 변경된 버전 및 행을 알아내는 데 사용되는 내부 온디스크 테이블이 있습니다. 자동 정리 스레드가 절전 모드를 해제될 때마다 SQL Server 인스턴스의 모든 사용자 데이터베이스를 검사하여 변경 내용 추적이 설정된 데이터베이스를 식별합니다. 데이터베이스의 보존 기간 설정에 따라 내부 온디스크 테이블의 만료된 레코드가 제거됩니다.
내부 변경 내용 추적 내부 테이블에 대한 수동 정리를 수행하기 위해 SQL Server 2014(12.x) 및 SQL Server 2016(13.x)용 서비스 팩에 저장 프로시저가 추가되었습니다. 저장 프로시저에 대한 자세한 내용은 KB173157에 있습니다.