여러 트랜잭션
하나의 Integration Services 패키지에 관련 없는 여러 트랜잭션이 포함될 수 있습니다. 한 패키지에 중첩된 컨테이너 계층이 포함되어 있으며 이러한 컨테이너 중 하나가 나머지 컨테이너에서 트랜잭션을 필요로 하는 동안 트랜잭션을 지원하지 않을 경우 이러한 현상이 발생합니다. 트랜잭션을 필요로 하는 중첩된 컨테이너가 자체의 개별 트랜잭션을 시작합니다. 이러한 트랜잭션은 중첩 컨테이너 계층의 가장 안쪽 태스크부터 순서대로 패키지에 커밋하거나 롤백합니다. 그러나 안쪽 컨테이너의 트랜잭션이 커밋한 후에는 바깥쪽 트랜잭션이 중단된 경우 해당 트랜잭션이 롤백하지 않습니다.
한 패키지가 두 개의 Foreach 루프 컨테이너를 보유하는 시퀀스 컨테이너를 포함하고, 각 Foreach 컨테이너가 두 개의 SQL 실행 태스크를 포함하는 경우를 예로 들 수 있습니다. 다음 다이어그램에서는 이 예제 패키지를 보여줍니다.
이 예제 패키지에서는 시퀀스 컨테이너, Foreach 루프 컨테이너 및 SQL 실행 태스크의 TransactionOption 속성이 다음과 같이 설정되어 있습니다.
시퀀스 컨테이너의 TransactionOption 속성은 Required로 설정되어 있습니다.
Foreach 루프 컨테이너의 TransactionOption 속성은 NotSupported으로 설정되어 있습니다.
SQL 실행 태스크의 TransactionOption 속성은 Required로 설정되어 있습니다.
TransactionOption 속성을 이렇게 설정하면 예제 패키지에 5개의 관련 없는 트랜잭션이 생깁니다. 시퀀스 컨테이너가 하나의 트랜잭션을 시작하고 4개의 SQL 실행 태스크가 각각 자체의 트랜잭션을 시작합니다. 또한 시퀀스 태스크의 트랜잭션이 중단된 경우 SQL 실행 태스크가 시작하는 트랜잭션이 롤백하지 않습니다.
|