패키지에서 트랜잭션 통합
패키지는 트랜잭션을 사용하여 최소 단위로 수행되는 데이터베이스 작업을 바인딩하며 이를 통해 데이터 무결성을 유지 관리합니다. 동일한 트랜잭션에 포함된 모든 데이터베이스 작업은 함께 커밋되거나 함께 롤백되므로 데이터를 일관된 상태로 유지할 수 있습니다. 예를 들어 데이터를 업데이트하고 다른 데이터베이스 테이블에 삽입하는 등 여러 데이터 흐름 작업이 포함된 패키지는 트랜잭션을 사용하여 데이터 흐름에서 수행되는 모든 변경 작업이 모두 커밋되거나 모두 롤백되도록 할 수 있습니다. 분산 트랜잭션은 이러한 개념에서 한 단계 더 나아가 여러 운영 체제로 분산된 트랜잭션을 하나의 트랜잭션으로 바인딩할 수 있도록 합니다.
패키지에서 트랜잭션은 다음 용도로 사용될 수 있습니다.
- 여러 작업의 결과를 단일 트랜잭션에 수집하여 업데이트 일관성을 보장합니다. 예를 들어 다른 두 테이블에 저장된 주문 및 배송 항목에 대한 정보를 별도의 작업으로 업데이트할 경우 함께 성공하거나 실패하도록 할 수 있습니다.
- 여러 데이터베이스 서버 사이에서 업데이트 일관성을 보장합니다. 예를 들어 두 개의 다른 OLTP(온라인 트랜잭션 처리) 시스템에서 동일한 고객 주소를 동시에 변경할 수 있으며 이는 모두 하나의 트랜잭션 컨텍스트에서 수행됩니다.
- 비동기화 환경에서도 업데이트를 보장합니다. 예를 들어 패키지는 메시지 큐 작업을 사용하여 업로드할 파일 이름이 담긴 메시지를 읽고 삭제할 수 있습니다. 파일을 업로드하는 작업이 실패하면 후속 롤백은 데이터베이스 변경을 취소하고 메시지를 큐로 돌려 보냅니다.
- 단일 패키지 제어 하에서 여러 트랜잭션을 수행합니다. 예를 들어 패키지 실행 작업을 사용하여 패키지가 세 개의 서로 다른 서버에서 트랜잭션의 종료 시퀀스를 동시에 실행할 수 있습니다.
각 작업을 캡슐화하는 For Loop, Foreach Loop, Sequence 컨테이너 및 작업 호스트 등의 모든 Microsoft SQL Server 2005 Integration Services(SSIS) 컨테이너는 트랜잭션을 사용하도록 구성할 수 있습니다. Integration Services는 트랜잭션 구성을 위해 NotSupported, Supported 및 Required의 세 가지 옵션을 제공합니다.
- Required는 부모 컨테이너가 이미 트랜잭션을 시작한 경우를 제외하고 컨테이너가 트랜잭션을 시작하도록 합니다. 트랜잭션이 이미 있는 경우 컨테이너는 해당 트랜잭션에 참여합니다. 예를 들어 트랜잭션을 지원하도록 구성되지 않은 패키지가 Required 옵션을 사용하는 시퀀스 컨테이너를 포함하는 경우 시퀀스 컨테이너가 자체 트랜잭션을 시작합니다. Required 옵션을 사용하도록 패키지를 구성한 경우 시퀀스 컨테이너는 패키지 트랜잭션에 참여합니다.
- Supported는 컨테이너가 트랜잭션을 시작하지 않고 부모 컨테이너에 의해 시작된 트랜잭션에 참여하도록 합니다. 예를 들어 4개의 SQL 실행 작업이 있는 패키지가 트랜잭션을 시작하고 4개의 작업이 모두 Supported 옵션을 사용하는 경우 하나의 작업이라도 실패하면 SQL 실행 작업에 의해 수행되는 데이터베이스 업데이트가 롤백됩니다. 패키지가 트랜잭션을 시작하지 않은 경우 4개의 SQL 실행 작업은 트랜잭션에 의해 바인드되지 않으며 실패한 작업에 의해 수행된 것을 제외한 어떤 데이터베이스 업데이트도 롤백되지 않습니다.
- NotSupported는 컨테이너가 트랜잭션을 시작하거나 기존 트랜잭션에 참여하지 않도록 합니다. 부모 컨테이너에 의해 시작된 트랜잭션은 트랜잭션을 지원하지 않도록 구성된 자식 컨테이너에 영향을 미치지 않습니다. 예를 들어 패키지가 트랜잭션을 시작하도록 구성되어 있고 패키지에 있는 For Loop 컨테이너가 NotSupported 옵션을 사용하는 경우 For Loop에 있는 모든 작업은 실패하더라도 롤백될 수 없습니다.
컨테이너에서 TransactionOption 속성을 설정하여 트랜잭션을 구성할 수 있습니다. 이 속성은 Business Intelligence Development Studio의 속성 창을 사용하여 설정하거나 프로그래밍 방식으로 설정할 수 있습니다. 자세한 내용은 Integration Services Programming를 참조하십시오.