다음을 통해 공유


변경 데이터 캡처(SSIS)

적용 대상: SQL Server Azure Data Factory의 SSIS Integration Runtime

SQL Server에서 변경 데이터 캡처는 원본 테이블에서 데이터 마트 및 데이터 웨어하우스로의 증분 로드를 효율적으로 수행하는 문제에 대한 효과적인 솔루션을 제공합니다.

변경 데이터 캡처란?

원본 테이블은 시간이 지남에 따라 변경됩니다. 이러한 테이블을 기반으로 하는 데이터 마트 또는 데이터 웨어하우스는 이러한 변경 내용을 반영해야 합니다. 그러나 전체 원본의 스냅샷을 주기적으로 복사하는 프로세스는 너무 많은 시간과 리소스를 사용합니다. 타임스탬프 열, 트리거 또는 복잡한 쿼리를 포함하는 대체 접근 방식은 종종 성능을 저하시키고 복잡성을 증가시킵니다. 소비자가 데이터 대상 표현에 쉽게 적용할 수 있도록 구조화된 안정적인 변경 데이터 스트림이 필요합니다. SQL Server의 변경 데이터 캡처는 이러한 솔루션을 제공합니다.

데이터베이스 엔진의 변경 데이터 캡처 기능은 SQL Server 테이블에 적용된 삽입, 업데이트 및 삭제 작업을 캡처하고 변경 내용의 세부 정보를 쉽게 사용되는 관계형 형식으로 사용할 수 있도록 지원합니다. 변경 데이터 캡처에 사용되는 변경 테이블에는 행별로 발생한 변경 내용을 이해하는 데 필요한 메타데이터와 함께 추적된 원본 테이블의 열 구조를 미러링하는 열이 포함됩니다.

참고 항목

변경 데이터 캡처는 일부 Microsoft SQL Server 버전에서 사용할 수 없습니다. SQL Server버전에서 지원되는 기능 목록은 SQL Server 2016 버전에서 지원하는 기능을 참조하세요.

Integration Services에서 변경 데이터 캡처가 작동하는 방식

Integration Services 패키지는 SQL Server 데이터베이스에서 변경 데이터를 쉽게 수집하여 데이터 웨어하우스에 대한 증분 로드를 효율적으로 수행할 수 있습니다. 그러나 Integration Services를 사용하여 변경 데이터를 로드하려면 먼저 관리자가 데이터베이스 및 변경 내용을 캡처하려는 테이블에서 변경 데이터 캡처를 사용하도록 설정해야 합니다. 데이터베이스에서 변경 데이터 캡처를 구성하는 방법에 관한 자세한 내용은 변경 데이터 캡처 사용 및 사용 안 함(SQL Server)을 참조하세요.

관리자가 데이터베이스에서 변경 데이터 캡처를 사용하도록 설정하면 변경 데이터의 증분 로드를 수행하는 패키지를 만들 수 있습니다. 다음 다이어그램에서는 단일 테이블에서 증분 로드를 수행하는 패키지를 만드는 단계를 보여 줍니다.

변경 데이터 캡처 패키지 생성 단계

이전 다이어그램에 표시된 것처럼 변경된 데이터의 증분 로드를 수행하는 패키지를 만들려면 다음 단계를 수행합니다.

1단계: 제어 흐름 디자인
패키지의 제어 흐름에서 다음 태스크를 정의해야 합니다.

  • 검색하려는 원본 데이터에 대한 변경 간격의 시작 및 종료 datetime 값을 계산합니다.

    이러한 값을 계산하려면 SQL 실행 태스크를 사용하거나 Integration Services 식에 datetime 함수를 사용합니다. 그런 다음 패키지에서 나중에 사용하기 위해 이러한 엔드포인트를 패키지 변수에 저장합니다.

    자세한 내용: 변경 데이터의 간격 지정

  • 선택한 간격의 변경 데이터가 준비되었는지 여부를 확인합니다. 비동기 캡처 프로세스에서 선택한 엔드포인트에 아직 도달하지 않았을 수 있으므로 이 단계가 필요합니다.

    데이터가 준비되었는지 여부를 확인하려면 필요한 경우 선택한 간격에 대한 변경 데이터가 준비될 때까지 실행을 지연하는 For 루프 컨테이너로 시작합니다. 루프 컨테이너 내에서 SQL 실행 태스크를 사용하여 변경 데이터 캡처로 유지 관리되는 시간 매핑 테이블을 쿼리합니다. 그런 다음 필요한 경우 Thread.Sleep 메서드를 호출하는 스크립트 태스크 또는 WAITFOR 문이 있는 다른 SQL 실행 태스크를 사용하여 패키지 실행을 일시적으로 지연합니다. 필요에 따라 다른 스크립트 태스크를 사용하여 오류 조건 또는 시간 제한을 기록합니다.

    자세한 내용: 변경 데이터가 준비되었는지 확인

  • 변경 데이터를 쿼리하는 데 사용할 쿼리 문자열을 준비합니다.

    스크립트 태스크나 SQL 실행 태스크를 사용하여 변경 내용을 쿼리하는 데 사용할 SQL 문을 어셈블합니다.

    자세한 내용: 변경 데이터에 대한 쿼리 준비

2단계: 변경 데이터에 대한 쿼리 설정
데이터를 쿼리할 테이블 반환 함수를 만듭니다.

SQL Server Management Studio를 사용하여 쿼리를 개발하고 저장합니다.

자세한 내용: 변경 데이터 검색 및 이해

3단계: 데이터 흐름 디자인
패키지의 데이터 흐름에서 다음 태스크를 정의해야 합니다.

  • 변경 테이블에서 변경 데이터를 검색합니다.

    데이터를 검색하려면 원본 구성 요소를 사용하여 선택한 간격 내에 있는 변경 내용에 대한 변경 테이블을 쿼리합니다. 원본은 이전에 만들었어야 하는 Transact-SQL 테이블 반환 함수를 호출합니다.

    자세한 내용: 변경 데이터 검색 및 이해

  • 처리를 위해 변경 내용을 삽입, 업데이트 및 삭제로 분할합니다.

    변경 내용을 분할하려면 조건부 분할 변환을 사용하여 적절한 처리를 위해 삽입, 업데이트 및 삭제를 다른 출력으로 전달합니다.

    자세한 내용: 프로세스 삽입, 업데이트 및 삭제

  • 대상에 삽입, 삭제 및 업데이트를 적용합니다.

    대상에 변경 내용을 적용하려면 대상 구성 요소를 사용하여 대상에 삽입을 적용합니다. 또한 매개 변수가 있는 UPDATE 및 DELETE 문과 함께 OLE DB 명령 변환을 사용하여 대상에 업데이트 및 삭제를 적용합니다. 대상 구성 요소를 통해 임시 테이블에 해당 행을 저장하여 업데이트 및 삭제를 적용할 수도 있습니다. 그런 다음 SQL 실행 태스크를 사용하여 임시 테이블의 대상에 대해 대량 업데이트 및 대량 삭제 작업을 수행합니다.

    자세한 내용: 대상에 변경 내용 적용

여러 테이블의 데이터 변경

위 다이어그램에 설명된 프로세스 및 단계는 단일 테이블에서 증분 로드를 수행합니다. 여러 테이블에서 증분 로드를 수행하는 경우 전반적인 프로세스는 같습니다. 그러나 여러 테이블의 처리를 수용하기 위해 패키지 디자인을 변경해야 합니다. 다중 테이블에서 증분 로드를 수행하는 패키지를 만드는 방법에 대한 자세한 내용은 여러 테이블의 증분 로드 수행을 참조하세요.

sqlblog.com의 SSIS 디자인 패턴 – 증분 로드 블로그 항목