다음을 통해 공유


Integration Services 트랜잭션

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

패키지는 트랜잭션을 사용하여 태스크가 수행하는 데이터베이스 작업을 원자 단위로 바인딩하고 이를 통해 데이터 무결성을 유지합니다. 패키지, For Loop, Foreach Loop, 시퀀스 컨테이너, 각 작업을 캡슐화하는 태스크 호스트 등의 모든 Microsoft Integration Services 컨테이너 유형은 트랜잭션을 사용하도록 구성할 수 있습니다. Integration Services는 트랜잭션 구성을 위해 NotSupported, Supported, Required의 세 가지 옵션을 제공합니다.

  • Required는 부모 컨테이너에서 트랜잭션을 이미 시작하지 않는 한 컨테이너가 트랜잭션을 시작했음을 나타냅니다. 트랜잭션이 이미 있는 경우 컨테이너는 트랜잭션을 조인합니다. 예를 들어 트랜잭션을 지원하도록 구성되지 않은 패키지에 Required 옵션을 사용하는 시퀀스 컨테이너가 포함된 경우 시퀀스 컨테이너는 자체 트랜잭션을 시작합니다. 패키지가 Required 옵션을 사용하도록 구성된 경우 시퀀스 컨테이너는 패키지 트랜잭션에 조인합니다.

  • Supported는 컨테이너가 트랜잭션을 시작하지 않고 부모 컨테이너에서 시작한 모든 트랜잭션을 조인한다는 것을 나타냅니다. 예를 들어 4개의 SQL 실행 태스크가 있는 패키지가 트랜잭션을 시작하고 4개의 태스크가 모두 Supported 옵션을 사용하는 경우 하나의 태스크라도 실패하면 SQL 실행 태스크에 의해 수행되는 데이터베이스 업데이트가 롤백됩니다. 패키지가 트랜잭션을 시작하지 않으면 4개의 SQL 실행 태스크가 트랜잭션에 의해 바인딩되지 않으며 실패한 태스크에서 수행한 작업을 제외한 데이터베이스 업데이트는 롤백되지 않습니다.

  • NotSupported는 컨테이너가 트랜잭션을 시작하거나 기존 트랜잭션을 조인하지 않음을 나타냅니다. 부모 컨테이너에서 시작된 트랜잭션은 트랜잭션을 지원하지 않도록 구성된 자식 컨테이너에 영향을 주지 않습니다. 예를 들어 패키지가 트랜잭션을 시작하도록 구성되고 패키지의 For 루프 컨테이너가 NotSupported 옵션을 사용하는 경우 For 루프의 태스크가 실패할 경우 롤백할 수 없습니다.

컨테이너에서 TransactionOption 속성을 설정하여 트랜잭션을 구성할 수 있습니다. 이 속성은 SSDT(SQL Server Data Tools)의 속성 창을 사용하여 설정하거나 프로그래밍 방식으로 설정할 수 있습니다.

참고 항목

TransactionOption 속성은 컨테이너에서 요청하는 IsolationLevel 속성 값의 적용 여부에 영향을 줍니다. 자세한 내용은 패키지 속성 설정 항목의 IsolationLevel속성에 대한 설명을 참조하십시오.

트랜잭션을 사용하도록 패키지를 구성

트랜잭션을 사용하도록 패키지를 구성하는 경우 두 가지 옵션이 있습니다.

  • 패키지에 단일 트랜잭션을 적용합니다. 이 경우 패키지 자체에서 이 트랜잭션을 시작하고 패키지에 포함된 개별 태스크와 컨테이너는 이 단일 트랜잭션에 참여합니다.

  • 패키지에 여러 트랜잭션을 적용합니다. 이 경우 패키지는 트랜잭션을 지원하지만 패키지의 개별 작업 및 컨테이너는 실제로 트랜잭션을 시작합니다.

다음 절차에서는 위의 두 옵션을 구성하는 방법에 대해 설명합니다.

단일 트랜잭션을 사용하도록 패키지 구성

이 옵션에서 패키지 자체가 단일 트랜잭션을 시작합니다. 패키지의 TransactionOption 속성을 Required로 설정하여 이 트랜잭션을 시작하도록 패키지를 구성합니다.

다음으로, 이 단일 트랜잭션에 특정 작업 및 컨테이너를 등록합니다. 트랜잭션에 태스크 또는 컨테이너를 등록하려면 해당 태스크 또는 컨테이너의 TransactionOption 속성을 Supported로 설정합니다.

  1. SSDT(SQL Server Data Tools)에서 트랜잭션을 사용하기 위해 구성할 패키지가 들어 있는 Integration Services 프로젝트를 엽니다.

  2. 솔루션 탐색기에서 패키지를 두 번 클릭하여 엽니다.

  3. 제어 흐름 탭을 클릭합니다.

  4. 제어 흐름 Design Surface 배경의 아무 곳이나 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  5. 속성 창에서 TransactionOption 속성을 Required로 설정합니다.

  6. 제어 흐름 탭의 Design Surface에서 트랜잭션에 등록할 태스크 또는 컨테이너를 마우스 오른쪽 단추로 클릭한 후 속성을 클릭합니다.

  7. 속성 창에서 TransactionOption 속성을 Supported로 설정합니다.

    참고 항목

    트랜잭션에 연결을 등록하려면 트랜잭션에서 연결을 사용하는 태스크를 등록합니다. 자세한 내용은 Integration Services(SSIS) 연결을 참조하세요.

  8. 트랜잭션에 등록하려는 각 작업 및 컨테이너에 대해 6단계와 7단계를 반복합니다.

여러 트랜잭션을 사용하도록 패키지를 구성

이 옵션에서는 패키지 자체에서 트랜잭션을 지원하지만 트랜잭션을 시작하지는 않습니다. 패키지의 TransactionOption 속성을 Supported로 설정하여 트랜잭션을 지원하도록 패키지를 구성합니다.

다음으로, 트랜잭션에서 시작하거나 참여하도록 패키지 내에서 원하는 태스크 및 컨테이너를 구성합니다. 트랜잭션을 시작하도록 태스크 또는 컨테이너를 구성하려면 해당 태스크 또는 컨테이너의 TransactionOption 속성을 Required로 설정합니다.

  1. SSDT(SQL Server Data Tools)에서 트랜잭션을 사용하기 위해 구성할 패키지가 들어 있는 Integration Services 프로젝트를 엽니다.

  2. 솔루션 탐색기에서 패키지를 두 번 클릭하여 엽니다.

  3. 제어 흐름 탭을 클릭합니다.

  4. 제어 흐름 Design Surface 배경의 아무 곳이나 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  5. 속성 창에서 TransactionOption 속성을 Supported로 설정합니다.

    참고 항목

    패키지는 트랜잭션을 지원하지만 트랜잭션은 패키지의 태스크나 컨테이너에 의해 시작됩니다.

  6. 제어 흐름 탭의 디자인 화면에서 트랜잭션을 시작할 패키지에서 태스크 또는 컨테이너를 마우스 오른쪽 단추로 클릭한 후 속성을 클릭합니다.

  7. 속성 창에서 TransactionOption 속성을 Required로 설정합니다.

  8. 컨테이너에서 트랜잭션을 시작하는 경우 트랜잭션에 등록하려는 태스크 또는 컨테이너를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  9. 속성 창에서 TransactionOption 속성을 Supported로 설정합니다.

    참고 항목

    트랜잭션에 연결을 등록하려면 트랜잭션에서 연결을 사용하는 태스크를 등록합니다. 자세한 내용은 Integration Services(SSIS) 연결을 참조하세요.

  10. 트랜잭션을 시작하는 각 태스크와 컨테이너에 대해 6-9단계를 반복합니다.

패키지에 여러 트랜잭션 포함

패키지가 Integration Services 패키지에 관련 없는 트랜잭션을 포함할 수 있습니다. 중첩된 컨테이너 계층의 중간에 있는 컨테이너가 트랜잭션을 지원하지 않을 때마다 계층 구조의 컨테이너 위 또는 아래에 있는 컨테이너는 트랜잭션을 지원하도록 구성된 경우 별도의 트랜잭션을 시작합니다. 트랜잭션은 중첩 컨테이너 계층의 가장 안쪽 태스크부터 순서대로 패키지에 커밋 또는 롤백합니다. 그러나 내부 트랜잭션이 커밋한 후에는 외부 트랜잭션이 중단되더라도 롤백하지 않습니다.

패키지에 여러 트랜잭션 포함의 예

예를 들어 패키지에는 두 개의 Foreach 루프 컨테이너를 보유하는 시퀀스 컨테이너가 있으며 각 컨테이너에는 두 개의 SQL 실행 태스크가 포함됩니다. 시퀀스 컨테이너는 트랜잭션을 지원하지만 Foreach 루프 컨테이너는 지원하지 않고 SQL 실행 태스크는 지원합니다. 이 예제에서는 각 SQL 실행 태스크가 자체 트랜잭션을 시작하고 시퀀스 태스크의 트랜잭션이 중단된 경우 롤백하지 않습니다.

시퀀스 컨테이너, Foreach 루프 컨테이너, SQL 실행 태스크의 TransactionOption 속성은 다음과 같이 설정됩니다.

  • 시퀀스 컨테이너의 TransactionOption 속성은 Required로 설정됩니다.

  • Foreach 루프 컨테이너의 TransactionOption 속성은 NotSupported로 설정됩니다.

  • SQL 실행 태스크의 TransactionOption 속성은 Required로 설정됩니다.

다음 다이어그램은 패키지에 있는 5개의 관련 없는 트랜잭션을 보여줍니다. 하나의 트랜잭션은 시퀀스 컨테이너에 의해 시작되고 4개의 트랜잭션은 SQL 실행 태스크에 의해 시작됩니다.

다중 트랜잭션 구현

상속된 트랜잭션

패키지 실행 태스크를 사용하면 패키지가 다른 패키지를 실행할 수 있습니다. 패키지 실행 태스크에서 실행하는 패키지인 자식 패키지는 자체 패키지 트랜잭션을 만들거나 부모 패키지 트랜잭션을 상속할 수 있습니다.

자식 패키지는 다음 둘 다 true인 경우 부모 패키지 트랜잭션을 상속합니다.

  • 패키지 실행 태스크에 의해 패키지가 호출됩니다.

  • 패키지를 호출한 패키지 실행 태스크가 부모 패키지 트랜잭션도 조인했습니다.

자식 패키지의 컨테이너 및 작업은 자식 패키지 자체가 트랜잭션에 조인하지 않는 한 부모 패키지 트랜잭션에 조인할 수 없습니다.

상속된 트랜잭션의 예

다음 다이어그램에서 트랜잭션을 사용하는 3개의 패키지가 있습니다. 각 패키지에는 여러 작업이 포함됩니다. 트랜잭션의 동작을 강조하기 위해 패키지 실행 태스크만 표시됩니다. 패키지 A는 패키지 B 및 C를 실행합니다. 결과적으로 패키지 B는 패키지 D 및 E를 실행하고 패키지 C는 패키지 F를 실행합니다.

패키지 및 태스크에는 다음과 같은 트랜잭션 특성이 있습니다.

  • TransactionOption은 패키지 A 및 C에서 Required로 설정됩니다.

  • 패키지 B 및 D, 패키지 실행 태스크 B, 패키지 실행 D 및 패키지 실행 F의트랜잭션 옵션지원 으로 설정됩니다.

  • TransactionOption은 패키지 E와 패키지 실행 태스크 C 및 패키지 실행 E에서 NotSupported로 설정됩니다.

상속된 트랜잭션의 흐름

B, D, F 패키지만 부모 패키지에서 트랜잭션을 상속할 수 있습니다.

패키지 B와 D는 패키지 A에서 시작한 트랜잭션을 상속합니다.

패키지 F는 패키지 C에서 시작한 트랜잭션을 상속합니다.

패키지 A와 C는 자체 트랜잭션을 제어합니다.

패키지 E는 트랜잭션을 사용하지 않습니다.

외부 리소스

참고 항목

상속된 트랜잭션
여러 트랜잭션