트랜잭션 – 패키지에서 트랜잭션을 제어하자
안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)
이번 시간에는 트랜잭션에 대해서 알아 보도록 하겠습니다.
SQL Server SSIS에서는 데이터베이스 작업에 대해서 트랜잭션을 지원 합니다. 여러 작업들이 하나의 트랜잭션으로 구성되어 있을 때 모든 작업이 성공해야 커밋되고 그렇지 않을 경우 롤백이 되도록 설정 할 수 있습니다.
패키지 전체 또는 일부 작업들에(컨테이너 단위)대해 트랜잭션을 이용하여 데이터 무결성을 관리 할 수 있는 기능 입니다.
SSIS의 모든 작업 개체 및 컨테이너 속성에서 TransactionOption을 설정할 수 있지만 트랜잭션은 데이터베이스 관련작업 개체에서만 적용 됩니다.
[BIDS]를 실행하여 [Integration Services 프로젝트]를 실행 합니다.
[제어 흐름] 탭에서 아래 그림과 같이 작업을 끌어다 놓습니다.
- SQL 실행 태스크 : 정상적인 인서트 구문 입력
- 파일 시스템 태스크 : 정상적인 파일 복사가 되도록 설정.
- SQL 실행 태스크 1 : 작업이 실패 나도록 입력 (SELECT 0/0/)
속성 창에서 [TransactionOption] 을 [Supported]로 설정 합니다.
[TransactionOption 옵션]
- Required – 선택한 개체가 트랜잭션을 생성. 만약 선택한 개체가 부모 컨테이너에 포함되어 있으며 부모 컨테이너에서 트랜잭션이 생성되도록 설정되어 있는 경우에는 Supported 설정과 동일한 방식으로 부모 컨테이너의 트랜잭션에 참여. 만약 패키지는 Not Required로 설정되어 있더라도 패키지 내에 있는 시퀀스 컨테이너의 트랜잭션 속성이 Required로 설정된 경우 시퀀스 컨테이너는 트랜잭션을 생성하며 이 컨테이너 내에 포함되는 작업들(Not Required 설정된 작업 제외)에는 트랜잭션이 적용.
- Supported – 선택한 개체가 새로운 트랜잭션을 생성하지는 않고 단지 부모 컨테이너의 트랜잭션에 참여만 함. 예를 들어 패키지는 트랜잭션을 생성하는 Required로 설정이 되어 있으며 패키지 내에 포함된 세 개의 SQL 실행 작업들은 Supported로 설정 되어 있는 경우 각각의 SQL 실행 작업은 부모 컨테이너인 패키지의 트랜잭션에 참여하게 되며 세 작업 중 하나라도 실패하면 전체 작업이 롤백 됩니다.
- Not Required – 선택한 개체가 새로운 트랜잭션을 생성하지도 않으며 부모 컨테이너의 트랜잭션에 참여하지도 않습니다.
패키지를 실행 합니다. 아무런 응답이 없거나 패키지 실행 자체가 실패하였다면 다음과 같이 [진행률] 탭을 확인 합니다.
SSIS에서 트랜잭션을 사용하기 위해서는 패키지가 수행되는 서버 또는 PC에 MSDTC 서비스가 실행되고 있어야 합니다.
MSTC 관련 링크
http://blog.naver.com/jevida/140151557692
MSDTC 설명이 완료 되었으면 패키지를 실행 합니다.
그림과 같이 [SQL 실행 태스크]와 [파일 시스템 태스크]는 정상 실행 되었으며 [SQL 실행 태스크1]작업만 실패 하였습니다.
[SQL 실행 태스크]의 작업이 롤백 되었음을 확인 할 수 있습니다. 하지만 [파일 시스템 태스크]의 작업은 롤백이 되지 않았습니다. SSIS의 트랜잭션은 데이터베이스 작업에만 해당 됩니다.
데이터베이스와 관련된 작업이 아닌 경우에도 트랜잭션이 필요한 이유가 있습니다.
아래 그림과 같이 작업의 순서를 수정 합니다.
[SQL 실행 태스크](정상 실행) -> [SQL 실행 태스크1](정상 실행) -> [파일 시스템 태스크](작업 실패)
패키지를 실행 합니다.
데이터베이스 작업 1,2는 정상 실행 되었지만 파일 시스템 작업의 실패로 인하여 전체 롤백이 된 것을 확인 할 수 있습니다. 파일 시스템 작업이 트랜잭션의 처리 결과에 대해 커밋이나 롤백 할 작업은 아니지만 트랜잭션에 영향을 미칠 수 있는 개체 이기 때문입니다.
패키지에서 모든 작업을 정상 실행 하도록 수정하여 패키지를 실행 합니다.
[SQL 실행 태스크], [SQL 실행 태스크1], [파일 시스템 태스크] 모든 작업이 완료되고 정상적으로 파일 복사 및 데이터베이스 작업이 커밋 된 것을 확인 할 수 있습니다.
'SQL Server > SSIS 강좌' 카테고리의 다른 글
로깅 – SSIS의 실행 정보를 로깅하자 (0) | 2015.07.16 |
---|---|
보안 – 보안 레벨에 따른 암호화 수준 (0) | 2015.07.16 |
스크립트 작업 및 ActiveX 스크립트 작업 (0) | 2015.07.16 |
SQL 실행 작업 (0) | 2015.07.16 |
WMI 이벤트 감시자 작업 (0) | 2015.07.16 |