Integration Services 트랜잭션Integration Services Transactions

패키지는 트랜잭션을 사용하여 태스크가 원자 단위로 수행되는 데이터베이스 동작을 바인딩하며 이를 통해 데이터 무결성을 유지 관리합니다.Packages use transactions to bind the database actions that tasks perform into atomic units, and by doing this maintain data integrity. 각 작업을 캡슐화하는 For Loop, Foreach Loop, Sequence 컨테이너 및 태스크 호스트 등의 모든 MicrosoftMicrosoft Integration ServicesIntegration Services 컨테이너는 트랜잭션을 사용하도록 구성할 수 있습니다.All MicrosoftMicrosoft Integration ServicesIntegration Services container types—packages, the For Loop, Foreach Loop, and Sequence containers, and the task hosts that encapsulate each task—can be configured to use transactions. Integration ServicesIntegration Services 는 트랜잭션 구성을 위해 NotSupported, SupportedRequired의 세 가지 옵션을 제공합니다. provides three options for configuring transactions: NotSupported, Supported, and Required.

  • Required 는 부모 컨테이너가 이미 트랜잭션을 시작한 경우를 제외하고 컨테이너가 트랜잭션을 시작하도록 합니다.Required indicates that the container starts a transaction, unless one is already started by its parent container. 트랜잭션이 이미 있는 경우 컨테이너는 해당 트랜잭션에 참여합니다.If a transaction already exists, the container joins the transaction. 예를 들어 트랜잭션을 지원하도록 구성되지 않은 패키지가 Required 옵션을 사용하는 시퀀스 컨테이너를 포함하는 경우 시퀀스 컨테이너가 자체 트랜잭션을 시작합니다.For example, if a package that is not configured to support transactions includes a Sequence container that uses the Required option, the Sequence container would start its own transaction. Required 옵션을 사용하도록 패키지를 구성한 경우 시퀀스 컨테이너는 패키지 트랜잭션에 참여합니다.If the package were configured to use the Required option, the Sequence container would join the package transaction.

  • Supported 는 컨테이너가 트랜잭션을 시작하지 않고 부모 컨테이너에 의해 시작된 트랜잭션에 참여하도록 합니다.Supported indicates that the container does not start a transaction, but joins any transaction started by its parent container. 예를 들어 4개의 SQL 실행 태스크가 있는 패키지가 트랜잭션을 시작하고 4개의 태스크가 모두 Supported 옵션을 사용하는 경우 하나의 태스크라도 실패하면 SQL 실행 태스크에 의해 수행되는 데이터베이스 업데이트가 롤백됩니다.For example, if a package with four Execute SQL tasks starts a transaction and all four tasks use the Supported option, the database updates performed by the Execute SQL tasks are rolled back if any task fails. 패키지가 트랜잭션을 시작하지 않은 경우 4개의 SQL 실행 태스크는 트랜잭션에 의해 바인드되지 않으며 실패한 태스크에 의해 수행된 것을 제외한 어떤 데이터베이스 업데이트도 롤백되지 않습니다.If the package does not start a transaction, the four Execute SQL tasks are not bound by a transaction, and no database updates except the ones performed by the failed task are rolled back.

  • NotSupported 는 컨테이너가 트랜잭션을 시작하거나 기존 트랜잭션에 참여하지 않도록 합니다.NotSupported indicates that the container does not start a transaction or join an existing transaction. 부모 컨테이너에 의해 시작된 트랜잭션은 트랜잭션을 지원하지 않도록 구성된 자식 컨테이너에 영향을 미치지 않습니다.A transaction started by a parent container does not affect child containers that have been configured to not support transactions. 예를 들어 패키지가 트랜잭션을 시작하도록 구성되어 있고 패키지에 있는 For Loop 컨테이너가 NotSupported 옵션을 사용하는 경우 For Loop에 있는 모든 태스크는 실패하더라도 롤백될 수 없습니다.For example, if a package is configured to start a transaction and a For Loop container in the package uses the NotSupported option, none of the tasks in the For Loop can roll back if they fail.

    컨테이너에서 TransactionOption 속성을 설정하여 트랜잭션을 구성할 수 있습니다.You configure transactions by setting the TransactionOption property on the container. 이 속성은 속성 SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT)창을 사용하여 설정하거나 프로그래밍 방식으로 설정할 수 있습니다.You can set this property by using the Properties window in SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT), or you can set the property programmatically.

참고

TransactionOption 속성은 컨테이너에서 요청하는 IsolationLevel 속성 값의 적용 여부에 영향을 줍니다.The TransactionOption property influences whether or not the value of the IsolationLevel property requested by a container is applied. 자세한 내용은 패키지 속성 설정 항목의 IsolationLevel속성에 대한 설명을 참조하십시오.For more information, see the description of the IsolationLevel property in the topic, Setting Package Properties.

트랜잭션을 사용하도록 패키지 구성Configure a package to use transactions

트랜잭션을 사용하도록 패키지를 구성할 때는 다음과 같은 두 가지 옵션을 사용할 수 있습니다.When you configure a package to use transactions, you have two options:

  • 패키지에서 단일 트랜잭션을 사용합니다.Have a single transaction for the package. 이 경우 패키지 자체에서 이 트랜잭션을 시작하고 패키지에 포함된 개별 태스크와 컨테이너는 이 단일 트랜잭션에 참여합니다.In this case, it is the package itself that initiates this transaction, whereas individual tasks and containers in the package participate in this single transaction.

  • 패키지에서 여러 트랜잭션을 사용합니다.Have multiple transactions in the package. 이 경우 패키지가 트랜잭션을 지원하지만 실제로는 패키지에 포함된 개별 태스크와 컨테이너가 트랜잭션을 시작합니다.In this case, the package supports transactions, but individual tasks and containers in the package actually initiate the transactions.

    다음 절차에서는 위의 두 옵션을 구성하는 방법에 대해 설명합니다.The following procedures describe how to configure both options.

단일 트랜잭션을 사용 하도록 패키지 구성Configure a package to use a single transaction

이 옵션에서는 패키지 자체에서 단일 트랜잭션을 시작합니다.In this option, the package itself initiates a single transaction. 패키지의 TransactionOption 속성을 Required로 설정하여 이 트랜잭션을 시작하도록 패키지를 구성합니다.You configure the package to initiate this transaction by setting the TransactionOption property of the package to Required.

그런 다음 이 단일 트랜잭션에 특정 태스크와 컨테이너를 등록합니다.Next, you enlist specific tasks and containers in this single transaction. 트랜잭션에 태스크와 컨테이너를 등록하려면 해당 태스크 또는 컨테이너의 TransactionOption 속성을 Supported로 설정합니다.To enlist a task or container in a transaction, you set the TransactionOption property of that task or container to Supported.

  1. SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT)에서 트랜잭션을 사용하도록 구성할 패키지가 들어 있는 Integration ServicesIntegration Services 프로젝트를 엽니다.In SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT), open the Integration ServicesIntegration Services project that contains the package you want to configure to use a transaction.

  2. 솔루션 탐색기에서 패키지를 두 번 클릭하여 엽니다.In Solution Explorer, double-click the package to open it.

  3. 제어 흐름 탭을 클릭합니다.Click the Control Flow tab.

  4. 제어 흐름 디자인 화면 배경의 아무 위치나 마우스 오른쪽 단추로 클릭한 후 속성을 클릭합니다.Right-click anywhere in the background of the control flow design surface, and then click Properties.

  5. 속성 창에서 TransactionOption 속성을 Required로 설정합니다.In the Properties window, set the TransactionOption property to Required.

  6. 제어 흐름 탭의 디자인 화면에서 트랜잭션에 등록할 태스크 또는 컨테이너를 마우스 오른쪽 단추로 클릭한 후 속성을 클릭합니다.On the design surface of the ControlFlow tab, right-click the task or the container that you want to enroll in the transaction, and then click Properties.

  7. 속성 창에서 TransactionOption 속성을 Supported로 설정합니다.In the Properties window, set the TransactionOption property to Supported.

    참고

    트랜잭션에 연결을 참여시키려면 트랜잭션에서 해당 연결을 사용하는 태스크를 등록합니다.To enlist a connection in a transaction, enroll the tasks that use the connection in the transaction. 자세한 내용은 Integration Services(SSIS) 연결을 참조하세요.For more information, see Integration Services (SSIS) Connections.

  8. 트랜잭션에 등록할 각 태스크와 컨테이너에 대해 6-7단계를 반복합니다.Repeat steps 6 and 7 for each task and container that you want to enroll in the transaction.

여러 트랜잭션을 사용 하도록 패키지 구성Configure a package to use multiple transactions

이 옵션에서는 패키지 자체에서 트랜잭션을 지원하지만 트랜잭션을 시작하지는 않습니다.In this option, the package itself supports transactions but does not start a transaction. 패키지의 TransactionOption 속성을 Supported로 설정하여 트랜잭션을 지원하도록 패키지를 구성합니다.You configure the package to support transactions by setting the TransactionOption property of the package to Supported.

그런 다음 패키지에 포함된 태스크와 컨테이너 중에서 원하는 태스크와 컨테이너를 트랜잭션을 시작하거나 트랜잭션에 참여하도록 구성합니다.Next, you configure the desired tasks and containers inside the package to initiate or participate in transactions. 트랜잭션을 시작하도록 태스크나 컨테이너를 구성하려면 태스크 또는 컨테이너의 TransactionOption 속성을 Required로 설정합니다.To configure a task or container to initiate a transaction, you set the TransactionOption property of that task or container to Required.

  1. SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT)에서 트랜잭션을 사용하도록 구성할 패키지가 들어 있는 Integration ServicesIntegration Services 프로젝트를 엽니다.In SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT), open the Integration ServicesIntegration Services project that contains the package you want to configure to use transaction.s

  2. 솔루션 탐색기에서 패키지를 두 번 클릭하여 엽니다.In Solution Explorer, double-click the package to open it.

  3. 제어 흐름 탭을 클릭합니다.Click the Control Flow tab.

  4. 제어 흐름 디자인 화면 배경의 아무 위치나 마우스 오른쪽 단추로 클릭한 후 속성을 클릭합니다.Right-click anywhere in the background of the control flow design surface, and then click Properties.

  5. 속성 창에서 TransactionOption 속성을 Supported로 설정합니다.In the Properties window, set the TransactionOption property to Supported.

    참고

    패키지는 트랜잭션을 지원하지만 트랜잭션은 패키지의 태스크나 컨테이너에 의해 시작됩니다.The package supports transactions, but the transactions are started by task or containers in the package.

  6. 제어 흐름 탭의 디자인 화면에서 트랜잭션을 시작할 패키지에서 태스크 또는 컨테이너를 마우스 오른쪽 단추로 클릭한 후 속성을 클릭합니다.On the design surface of the ControlFlow tab, right-click the task or the container in the package for which you want to start a transaction, and then click Properties.

  7. 속성 창에서 TransactionOption 속성을 Required로 설정합니다.In the Properties window, set the TransactionOption property to Required.

  8. 트랜잭션이 컨테이너에 의해 시작되는 경우 트랜잭션에 등록할 태스크 또는 컨테이너를 마우스 오른쪽 단추로 클릭한 후 속성을 클릭합니다.If a transaction is started by a container, right-click the task or the container that you want to enroll in the transaction, and then click Properties.

  9. 속성 창에서 TransactionOption 속성을 Supported로 설정합니다.In the Properties window, set the TransactionOption property to Supported.

    참고

    트랜잭션에 연결을 참여시키려면 트랜잭션에서 해당 연결을 사용하는 태스크를 등록합니다.To enlist a connection in a transaction, enroll the tasks that use the connection in the transaction. 자세한 내용은 Integration Services(SSIS) 연결을 참조하세요.For more information, see Integration Services (SSIS) Connections.

  10. 트랜잭션을 시작하는 각 태스크와 컨테이너에 대해 6-9단계를 반복합니다.Repeat steps 6 through 9 for each task and container that starts a transaction.

패키지에서 여러 트랜잭션Multiple transactions in a package

Integration ServicesIntegration Services 패키지 내의 관련 없는 트랜잭션을 한 개의 패키지가 포함하는 것이 가능합니다.It is possible for a package to include unrelated transactions in an Integration ServicesIntegration Services package. 중첩 컨테이너 계층 중간의 컨테이너가 트랜잭션을 지원하지 않으면 위 또는 아래에 위치한 컨테이너에서 별도의 트랜잭션을 시작합니다(트랜잭션을 지원하도록 구성된 경우).Any time a container in the middle of a nested container hierarchy does not support transactions, the containers above or below it in the hierarchy start separate transactions if they are configured to support transactions. 트랜잭션은 중첩 컨테이너 계층의 가장 안쪽 태스크부터 순서대로 패키지에 커밋 또는 롤백합니다.The transactions commit or roll back in order from the innermost task in the nested container hierarchy to the package. 그러나 내부 트랜잭션이 커밋한 후에는 외부 트랜잭션이 중단되더라도 롤백하지 않습니다.However, after the inner transaction commits, it does not roll back if an outer transaction is aborted.

패키지에서 여러 트랜잭션의 예Example of multiple transactions in a package

예를 들어 한 패키지가 두 개의 Foreach 루프 컨테이너를 포함하고 각 컨테이너가 다시 두 개의 SQL 실행 태스크를 포함하는 경우For example, a package has a Sequence container that holds two Foreach Loop containers, and each container include two Execute SQL tasks. 시퀀스 컨테이너는 트랜잭션을 지원하지만 Foreach 루프 컨테이너는 지원하지 않고 SQL 실행 태스크는 지원합니다.The Sequence container supports transactions, the Foreach Loop containers do not, and the Execute SQL tasks do. 이 예에서 각 SQL 실행 태스크는 자체 트랜잭션을 시작하며 시퀀스 태스크에서 트랜잭션이 중단된 경우에도 롤백하지 않습니다.In this example, each Execute SQL task would start its own transaction and would not roll back if the transaction on the Sequence task was aborted.

시퀀스 컨테이너, Foreach 루프 컨테이너 및 SQL 실행 태스크의 TransactionOption 속성은 다음과 같이 설정됩니다.The TransactionOption properties of the Sequence container, Foreach Loop container and the Execute SQL tasks are set as follows:

  • 시퀀스 컨테이너의 TransactionOption 속성은 Required로 설정됩니다.The TransactionOption property of the Sequence container is set to Required.

  • Foreach 루프 컨테이너의 TransactionOption 속성은 NotSupported로 설정됩니다.The TransactionOption properties of the Foreach Loop containers are set to NotSupported.

  • SQL 실행 태스크의 TransactionOption 속성은 Required로 설정됩니다.The TransactionOption properties of the Execute SQL tasks are set to Required.

    다음 다이어그램에서는 패키지 내의 관련 없는 트랜잭션 다섯 개를 보여 줍니다.The following diagram shows the five unrelated transactions in the package. 한 개의 트랜잭션은 시퀀스 컨테이너에서 시작되며 네 개의 트랜잭션은 SQL 실행 태스크에서 시작됩니다.One transaction is started by the Sequence container and four transactions are started by the Execute SQL tasks.

    다중 트랜잭션 구현Implementation of multiple transactions

상속된 트랜잭션Inherited transactions

패키지 실행 태스크를 사용하면 패키지가 다른 패키지를 실행할 수 있습니다.A package can run another package by using the Execute Package task. 패키지 실행 태스크에서 실행하는 패키지인 자식 패키지는 자체의 패키지 트랜잭션을 만들거나 부모 패키지 트랜잭션을 상속할 수 있습니다.The child package, which is the package run by the Execute Package task, may create its own package transaction, or it may inherit the parent package transaction.

다음 두 가지 조건에 모두 해당하면 자식 패키지는 부모 패키지 트랜잭션을 상속합니다.A child package inherits the parent package transaction if both of the following are true:

  • 패키지 실행 태스크가 패키지를 호출합니다.The package is invoked by an Execute Package task.

  • 패키지를 호출한 패키지 실행 태스크가 부모 패키지 트랜잭션도 조인했습니다.The Execute Package task that invoked the package also joined the parent package transaction.

    자식 패키지가 트랜잭션에 조인하지 않으면 자식 패키지 내의 컨테이너 및 태스크가 부모 패키지 트랜잭션에 조인할 수 없습니다.Containers and tasks in the child package cannot join the parent package transaction unless the child package itself joins the transaction.

상속 된 트랜잭션의 예Example of inherited transactions

다음 다이어그램에서 트랜잭션을 사용하는 3개의 패키지가 있습니다.In the following diagram, there are three packages that all use transactions. 각 패키지는 여러 태스크를 포함합니다.Each package contains multiple tasks. 트랜잭션 동작을 강조하기 위해 패키지 실행 태스크만 표시했습니다.To emphasize the behavior of the transactions, only the Execute Package tasks are shown. 패키지 A는 패키지 B와 C를 실행하고 차례로 패키지 B는 패키지 D와 E를 실행하며 패키지 C는 패키지 F를 실행합니다.Package A runs packages B and C. In turn, package B runs packages D and E, and package C runs package F.

패키지 및 태스크는 다음 트랜잭션 특성을 가집니다.Packages and tasks have the following transaction attributes:

  • 패키지 A 및 C의트랜잭션 옵션필수 로 설정됩니다.TransactionOption is set to Required on packages A and C

  • 패키지 B 및 D, 패키지 실행 태스크 B, 패키지 실행 D 및 패키지 실행 F의트랜잭션 옵션지원 으로 설정됩니다.TransactionOption is set to Supported on packages B and D, and on the tasks Execute Package B, Execute Package D, and Execute Package F.

  • 패키지 E, 패키지 실행 태스크 C 및 패키지 실행 E의트랜잭션 옵션지원되지 않음 으로 설정됩니다.TransactionOption is set to NotSupported on package E, and on the tasks Execute Package C and Execute Package E.

    상속 된 트랜잭션의 흐름Flow of inherited transactions

    패키지 B, D 및 F만 부모 패키지에서 트랜잭션을 상속할 수 있습니다.Only packages B, D, and F can inherit transactions from their parent packages.

    패키지 B 및 D는 패키지 A가 시작한 트랜잭션을 상속합니다.Packages B and D inherit the transaction that was started by package A.

    패키지 F는 패키지 C가 시작한 트랜잭션을 상속합니다.Package F inherits the transaction that was started by package C.

    패키지 A와 C는 자체 트랜잭션을 제어합니다.Packages A and C control their own transactions.

    패키지 E는 트랜잭션을 사용하지 않습니다.Package E does not use transactions.

외부 리소스External Resources

관련 항목:See Also

상속된 트랜잭션 Inherited Transactions
여러 트랜잭션Multiple Transactions