본문 바로가기

Database

[MSSQL] SSIS에서 트랜젝션 처리

안녕하세요 마푸입니다. 


오늘은 오랜만에 데이터베이스 이야기를 해보려합니다. 

요즘 게임할 시간이 없네요 ㅠ.ㅠ


이번에 이직한 회사에서는 SSIS를 이용해서 ETL작업을 주로 처리하고 있습니다. 

그래서 관련해서 공부도 하고 정리를 했었는데 언젠가 블로그를 통해서 스터디를 해볼까합니다. ^^


그전에 SSIS에서 처리되는 트랜젝션에 대해서 잠깐 정리 했었던 자료가 있어서 공유차 올려봅니다. 


들어가기 전에 SSIS에서의 트랜젝션 옵션에 대해서 알아보겠습니다. 

먼저 옵션은 총 3가지가 있는데요 아래와 같습니다. 


* Required 

 선택한 개체가 트랜젝션을 생성합니다. 개체란 패키지 또는 컨테이너, 개별 작업 개체를 말합니다.(툴박스에 있는것들이죠!) 만약 선택한 개체가 부모 컨테이너에 포함되어있으며, 부모 컨테이너에서 트랜젝션이 생성되도록 설정되어 있는 경우에는 Supported 설정과 동일한 방식으로 부모 컨테이너의 트랜젝션에 참여합니다. 

만약 패키지는 트랜젝셔을 생성하지 않은 Not Required로 설정되어 있더라도, 패키지 내에서 시퀀스 컨테이너의 트랜젝션 속성이 Required로 설정된 경우, 시퀀스 컨테이너는 트랜젝션을 생성하여 이 컨테이너 내에 포함된 모든 작업들 (Not Supported로 설정된 작업 제외)에는 트랜젝션이 적용됩니다. 


* Supported 

 선택한 개체가 새로운 트랜잭션을 생성하지 않고 단지 부모 컨테이너의 트랜젝션에 참여만 합니다. 예를 들어, 패키지는 트랜젝션을 생성하는 Required로 설정되어 있으며 패키지 내에 포함된 세개의 SQL 실행 잡업들을 Supported로 설정 되어있는 경우, 각각의 SQL 실행 작업은 부모 컨테이너인 패키지의 트랜젝션에 참여하게 되며 세 작업 중 하나라도 실패하면 전체 작업이 롤백됩니다. 


* Not Required

 선택한 개체가 새로운 트랜젝션을 생성하지 않으며, 부모 컨테이너의 트렌젝션에 참여하지도 않습니다. 



아래는 제가 예전에 정리한 SSIS에서의 트렌젝션 처리 테스트 자료입니다. 



SSIS에서 트랜젝션 처리


SSIS에서 트랜젝션은 상위객체가 하위 객체를 제어할 때 사용합니다.

, 단위에 트랜젝션을 허용해서 그룹 된(Toolbox의 그룹과 다릅니다.) 트렌젝션이 어떤식으로 동작할 지를 결정합니다.

상위객체로 구분될 수 있는 객체는 SSIS Package Sequence Container(이하 그룹)입니다

이를 상속받는 T-SQL이나 SP등을 호출해서 DB를 제어하는 단위 업무는 단일객체입니다.

상위객체는 아래와 같은 트랜젝션 설정을 가질 수 있습니다.


           Required : 선택한 객체가 트랜젝션을 생성합니다.

           ● Supported : 상위 객체의 트랜젝션을 사용합니다.

           ● NotSupported: 트랜젝션을 사용하지 않습니다.


예를 들면 부모 그룹인 SSIS Pagkage NotSupported로 설정하고 패키지를 만들 때 Sequence Container Required로 설정한다면, Sequence Container의 트랜젝션만 보장받게 됩니다. , Sequence Container 내부에서 에러가 발생한다면, 내부내용이 모두 rollback됩니다. 하지만, 부모 그룹이 NotSupported 이기 때문에 Sequence Container 외부에서 에러가 발생할 경우 Rollback 되지 않습니다.

참고로 최상위 객체가 Supported 이면 트랜젝션을 지원하지 않게 됩니다. 반대로 상위객체(부모그룹) Not Required인데 이를 상속받는 단일객체가 Required라해도 트랜젝션을 사용하지 못하게 됩니다


Ex 1. 모든 작업이 트렌젝션을 허용하게 합니다.

A.     상위 객체인 Package Transaction Required입니다. 하위객체는 모두 Support입니다.


B.     각 단계별로 에러가 발생하면 모든 작업이 롤백됩니다



Ex 2. Sequence Container만 트랜젝션을 적용합니다.

 



Ex 3. 부모그룹이 Reqired인데 하위의 그룹이 NotSupport이면 작업이 대기(실패)합니다



반응형