검사점을 사용하여 패키지 다시 시작Restart Packages by Using Checkpoints

Integration ServicesIntegration Services 는 전체 패키지를 다시 실행하지 않고 오류 발생 시점에서 실패한 패키지를 다시 시작할 수 있습니다. can restart failed packages from the point of failure, instead of rerunning the whole package. 패키지가 검사점을 사용하도록 구성된 경우 패키지 실행에 대한 정보는 검사점 파일에 기록됩니다.If a package is configured to use checkpoints, information about package execution is written to a checkpoint file. 실패한 패키지가 다시 실행될 때 검사점 파일은 오류 발생 지점에서 패키지를 다시 시작하는 데 사용됩니다.When the failed package is rerun, the checkpoint file is used to restart the package from the point of failure. 패키지가 성공적으로 실행된 경우 검사점 파일은 삭제되고 다음에 패키지가 실행될 때 다시 만들어집니다.If the package runs successfully, the checkpoint file is deleted, and then re-created the next time the package is run.

패키지에서 검사점을 사용하면 다음과 같은 이점이 있습니다.Using checkpoints in a package can provide the following benefits.

  • 큰 파일의 반복적인 다운로드 및 업로드를 피할 수 있습니다.Avoid repeating the downloading and uploading of large files. 예를 들어 각 다운로드에 FTP 태스크를 사용하여 여러 큰 파일을 다운로드하는 패키지의 경우, 특정 파일에 대한 다운로드가 실패하면 패키지를 다시 시작하여 해당 파일만 다운로드할 수 있습니다.For example, a package that downloads multiple large files by using an FTP task for each download can be restarted after the downloading of a single file fails and then download only that file.

  • 대용량 데이터의 반복적인 로드를 피할 수 있습니다.Avoid repeating the loading of large amounts of data. 예를 들어 차원마다 다른 대량 삽입 태스크를 사용하여 데이터 웨어하우스의 차원 테이블로 대량 삽입을 수행하는 패키지의 경우, 특정 차원 테이블에 대한 삽입이 실패하면 패키지를 다시 시작할 수 있으며 해당 차원만 다시 로드됩니다.For example, a package that performs bulk inserts into dimension tables in a data warehouse using a different Bulk Insert task for each dimension can be restarted if the insertion fails for one dimension table, and only that dimension will be reloaded.

  • 반복적인 값 집계를 피할 수 있습니다.Avoid repeating the aggregation of values. 예를 들어 각 집계를 수행하기 위해 별도의 데이터 흐름 태스크를 사용하여 평균 및 합계와 같은 많은 집계를 계산하는 패키지의 경우 특정 집계 계산이 실패하면 패키지를 다시 시작할 수 있으며 해당 집계만 다시 계산됩니다.For example, a package that computes many aggregates, such as averages and sums, using a separate Data Flow task to perform each aggregation, can be restarted after computing an aggregation fails and only that aggregation will be recomputed.

    패키지가 검사점을 사용하도록 구성된 경우 Integration ServicesIntegration Services 는 검사점 파일에서 다시 시작 지점을 캡처합니다.If a package is configured to use checkpoints, Integration ServicesIntegration Services captures the restart point in the checkpoint file. 실패한 컨테이너 유형 및 트랜잭션과 같은 기능의 구현은 검사점 파일에 기록된 다시 시작 지점에 영향을 미칩니다.The type of container that fails and the implementation of features such as transactions affect the restart point that is recorded in the checkpoint file. 변수의 현재 값도 검사점 파일에 캡처됩니다.The current values of variables are also captured in the checkpoint file. 그러나 Object 데이터 형식의 변수 값은 검사점 파일에 저장되지 않습니다.However, the values of variables that have the Object data type are not saved in checkpoint files.

다시 시작 지점 정의Defining Restart Points

단일 태스크를 캡슐화하는 태스크 호스트 컨테이너는 다시 시작할 수 있는 가장 작은 단위입니다.The task host container, which encapsulates a single task, is the smallest atomic unit of work that can be restarted. 또한 Foreach Loop 컨테이너 및 트랜잭션이 적용된 컨테이너도 작업의 최소 단위로 간주됩니다.The Foreach Loop container and a transacted container are also treated as atomic units of work.

트랜잭션이 적용된 컨테이너가 실행 중인 동안 패키지가 중지된 경우 트랜잭션은 중단되고 컨테이너에 의해 수행된 모든 작업은 롤백됩니다.If a package is stopped while a transacted container is running, the transaction ends and any work performed by the container is rolled back. 실패한 컨테이너는 패키지를 다시 시작할 때 다시 실행됩니다.When the package is restarted, the container that failed is rerun. 트랜잭션이 적용된 컨테이너의 모든 자식 컨테이너에 대한 작업 완료는 검사점 파일에 기록되지 않습니다.The completion of any child containers of transacted container is not recorded in the checkpoint file. 그러므로 패키지를 다시 시작하면 트랜잭션이 적용된 컨테이너와 그 자식 컨테이너가 다시 실행됩니다.Therefore, when the package is restarted, the transacted container and its child containers run again.

참고

같은 패키지에서 검사점 및 트랜잭션을 사용하면 예기치 않은 결과가 발생할 수 있습니다.Using checkpoints and transactions in the same package could cause unexpected results. 예를 들어 패키지가 실패하고 검사점에서 다시 시작되면 패키지에서 이미 성공적으로 커밋한 트랜잭션을 반복할 수 있습니다.For example, when a package fails and restarts from a checkpoint, the package might repeat a transaction that has already been successfully committed.

For Loop 및 Foreach Loop 컨테이너에 대한 검사점 데이터는 저장되지 않습니다.Checkpoint data is not saved for For Loop and Foreach Loop containers. 패키지를 다시 시작할 때 For Loop 및 Foreach Loop 컨테이너와 그 자식 컨테이너는 다시 실행됩니다.When a package is restarted, the For Loop and Foreach Loop containers and the child containers are run again. 루프에 있는 자식 컨테이너가 성공적으로 실행되면 검사점 파일에 기록되지 않고 다시 실행됩니다.If a child container in the loop runs successfully, it is not recorded in the checkpoint file, instead it is rerun. 자세한 내용 및 해결 방법은 SSIS 검사점이 For Loop 또는 Foreach Loop 컨테이너 항목에 대해 허용되지 않습니다.를 참조하십시오.For more information and a workaround, see SSIS Checkpoints are not honored for For Loop or Foreach Loop container items.

패키지를 다시 시작하면 패키지는 구성을 다시 로드하는 대신 검사점 파일에 기록된 구성 정보를 사용합니다.If the package is restarted the package configurations are not reloaded, instead the package uses the configuration information written to the checkpoint file. 이렇게 하면 패키지가 실패한 시점과 동일한 구성으로 다시 실행될 수 있습니다.This ensures that the package uses the same configurations when it is rerun as the time it failed.

패키지는 제어 흐름 수준에서만 다시 시작할 수 있습니다.A package can be restarted only at the control flow level. 데이터 흐름 도중에 패키지를 다시 시작할 수 없습니다.You cannot restart a package in the middle of a data flow. 전체 데이터 흐름을 다시 실행하지 않으려면 패키지가 여러 데이터 흐름으로 구성되도록 디자인하고 각 데이터 흐름이 서로 다른 데이터 흐름 태스크를 사용하도록 해야 합니다.To avoid rerunning the whole data flow, the package might be designed to include multiple data flows, each one using a different Data Flow task. 이 방법으로 하나의 데이터 흐름 태스크만 다시 실행하여 패키지를 다시 시작할 수 있습니다.This way the package can be restarted, rerunning only one Data Flow task.

다시 시작하도록 패키지 구성Configuring a Package to Restart

검사점 파일에는 모든 완료된 컨테이너의 실행 결과, 시스템 및 사용자 정의 변수의 현재 값 및 패키지 구성 정보가 포함되어 있습니다.The checkpoint file includes the execution results of all completed containers, the current values of system and user-defined variables, and package configuration information. 또한 패키지의 고유 식별자도 검사점 파일에 포함됩니다.The file also includes the unique identifier of the package. 패키지를 성공적으로 다시 시작하려면 검사점 파일에 있는 패키지 식별자가 패키지와 일치해야 하며, 그렇지 않으면 다시 시작할 수 없습니다.To successfully restart a package, the package identifier in the checkpoint file and the package must match; otherwise the restart fails. 이렇게 하면 패키지가 다른 패키지 버전에 의해 기록된 검사점 파일을 사용하는 것을 막을 수 있습니다.This prevents a package from using a checkpoint file written by a different package version. 패키지가 성공적으로 실행되면 다시 시작한 후 검사점 파일이 삭제됩니다.If the package runs successfully, after it is restarted the checkpoint file is deleted.

다음 표에서는 검사점을 구현하기 위해 설정하는 패키지 속성을 나열합니다.The following table lists the package properties that you set to implement checkpoints.

속성Property DescriptionDescription
CheckpointFileNameCheckpointFileName 검사점 파일의 이름을 지정합니다.Specifies the name of the checkpoint file.
CheckpointUsageCheckpointUsage 검사점 사용 여부를 지정합니다.Specifies whether checkpoints are used.
SaveCheckpointsSaveCheckpoints 패키지의 검사점 저장 여부를 나타냅니다.Indicates whether the package saves checkpoints. 오류 발생 시점에서 패키지를 다시 시작하려면 이 속성을 True로 설정해야 합니다.This property must be set to True to restart a package from a point of failure.

이 밖에도 다시 시작 지점으로 식별할 패키지 내의 모든 컨테이너에 대해 FailPackageOnFailure 속성을 true 로 설정해야 합니다.Additionally, you must set the FailPackageOnFailure property to true for all the containers in the package that you want to identify as restart points.

ForceExecutionResult 속성을 사용하여 패키지에 있는 검사점의 사용을 테스트할 수 있습니다.You can use the ForceExecutionResult property to test the use of checkpoints in a package. 태스크 또는 컨테이너의 ForceExecutionResult를 Failure로 설정하면 실시간 오류와 동일한 오류를 만들 수 있습니다.By setting ForceExecutionResult of a task or container to Failure, you can imitate real-time failure. 패키지를 다시 실행하면 실패한 태스크와 컨테이너가 다시 실행됩니다.When you rerun the package, the failed task and containers will be rerun.

검사점 사용Checkpoint Usage

CheckpointUsage 속성은 다음 값으로 설정할 수 있습니다.The CheckpointUsage property can be set to the following values:

ValueValue DescriptionDescription
안 함Never 검사점 파일을 사용하지 않고 패키지가 패키지 워크플로의 처음부터 시작되도록 지정합니다.Specifies that the checkpoint file is not used and that the package runs from the start of the package workflow.
항상Always 검사점 파일을 항상 사용하고 패키지가 이전의 실행 오류 지점부터 다시 시작하도록 지정합니다.Specifies that the checkpoint file is always used and that the package restarts from the point of the previous execution failure. 검사점 파일을 찾을 수 없는 경우 패키지는 실패합니다.If the checkpoint file is not found, the package fails.
IfExistsIfExists 검사점 파일이 있는 경우 이를 사용하도록 지정합니다.Specifies that the checkpoint file is used if it exists. 검사점 파일이 있으면 패키지는 이전 실행 오류 지점부터 다시 시작하고, 그렇지 않으면 패키지 워크플로의 처음부터 실행됩니다.If the checkpoint file exists, the package restarts from the point of the previous execution failure; otherwise, it runs from the start of the package workflow.

참고

dtexec의 /CheckPointing on 옵션은 패키지의 SaveCheckpoints 속성을 True로 설정하고 CheckpointUsage 속성을 Always로 설정하는 것과 같습니다.The /CheckPointing on option of dtexec is equivalent to setting the SaveCheckpoints property of the package to True, and the CheckpointUsage property to Always. 자세한 내용은 dtexec Utility를 참조하세요.For more information, see dtexec Utility.

검사점 파일 보안 설정Securing Checkpoint Files

패키지 수준 보호에는 검사점 파일 보호가 포함되지 않으므로 이러한 파일에 대해 보안을 별도로 설정해야 합니다.Package level protection does not include protection of checkpoint files and you must secure these files separately. 검사점 데이터는 파일 시스템에만 저장할 수 있으므로 운영 체제의 ACL(액세스 제어 목록)을 사용하여 파일 저장 위치 또는 폴더를 보호해야 합니다.Checkpoint data can be stored only in the file system and you should use an operating system access control list (ACL) to secure the location or folder where you store the file. 검사점 파일에는 현재 변수 값을 비롯하여 패키지 상태에 대한 정보가 들어 있으므로 검사점 파일에 대해 보안을 설정하는 것은 중요합니다.It is important to secure checkpoint files because they contain information about the package state, including the current values of variables. 예를 들어 변수에 전화 번호와 같은 개인 데이터 행이 여러 개 있는 레코드 집합이 포함될 수 있습니다.For example, a variable may contain a recordset with many rows of private data such as telephone numbers. 자세한 내용은 패키지에서 사용되는 파일 액세스를 참조하세요.For more information, see Access to Files Used by Packages.

실패한 패키지를 다시 시작하는 검사점 구성Configure Checkpoints for Restarting a Failed Package

검사점에 적용되는 속성을 설정하여 전체 패키지를 다시 실행하는 대신 장애 지점에서 Integration ServicesIntegration Services 패키지를 다시 시작하도록 구성합니다.You configure Integration ServicesIntegration Services packages to restart from a point of failure, instead of rerunning the entire package, by setting the properties that apply to checkpoints.

패키지를 다시 시작하도록 구성하려면To configure a package to restart

  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.

  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. SaveCheckpoints 속성을 True로 설정합니다.Set the SaveCheckpoints property to True.

  6. CheckpointFileName 속성에 검사점 파일의 이름을 입력합니다.Type the name of the checkpoint file in the CheckpointFileName property.

  7. CheckpointUsage 속성을 다음 두 값 중 하나로 설정합니다.Set the CheckpointUsage property to one of two values:

    • 패키지를 항상 검사점에서 다시 시작하려면 Always 를 선택합니다.Select Always to always restart the package from the checkpoint.

      중요

      검사점 파일을 사용할 수 없으면 오류가 발생합니다.An error occurs if the checkpoint file is not available.

    • 검사점 파일이 있는 경우에만 패키지를 검사점에서 다시 시작하려면 IfExists 를 선택합니다.Select IfExists to restart the package only if the checkpoint file is available.

  8. 패키지가 다시 시작될 수 있는 태스크 및 컨테이너를 구성합니다.Configure the tasks and containers from which the package can restart.

    • 태스크 또는 컨테이너를 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.Right-click a task or container and click Properties.

    • 선택한 각 태스크 및 컨테이너에 대해 FailPackageOnFailure 속성을 True 로 설정합니다.Set the FailPackageOnFailure property to True for each selected task and container.

외부 리소스External Resources