패키지 자동으로 재 실행하도록 설정하기

 

한대성

Microsoft Premier Field Engineer

 

 

 

 Question

다름이 아니라 SSIS에서 패키지 실패나 TASK 실패시 자동 재실행 설정방법이 있는지요?
패키지 실행시 재실행 방법은 있는것 같은데 모르겠고, TASK 실패 시 가능한지 조차도 모르겠습니다.

사유는 저희가 해외 사이트에서 추출할 일이 많은데, 네트워크 문제로 자주 끊어짐 현상이 발생합니다. 중간에 특정 해외 사이트 TASK 가 끊어질 때 다시 재실행 하는 방법이 있으면 좋겠네요. ^

 

 

 

우선 다음과 같이 패키지 내의 모든 작업 개체에 대해 FailPackageOnFailure 속성을 True로 설정합니다.

 

 

 

그리고, 데이터 흐름의 빈 영역을 선택한 후, 아래와 같이 검사점(CheckPoint)을 설정합니다.

 

검사점 설정과 관련되어서는 다음 글을 참고하세요.

http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSIS&intSeq=456

 

이제, 부모 패키지를 구성합니다.

 

다음과 같이 CheckFileExist라는 변수를 추가하고 기본 값을 Y로 설정합시다. 또한 RetryCnt 라는 Int32형 변수를 추가하고 초기값을 0으로 설정합시다.

 

 

다음과 같이 For 루프 컨테이너를 추가하고 속성의 EvalExpression 부분에

           @@CheckFileExist == “Y” && @RetryCnt <=10 라는 식을 입력합시다.

 

 

 

이제 For 루프 컨테이너 내에 패키지 실행 작업을 추가하고 실행시킬 패키지를 지정합니다.



패키지 실행 작업을 선택한 후, ForceExecutionResultSuccess로 설정합니다. 실패가 나더라도 무조건 이 작업 개체(패키지 실행 작업)를 성공으로 처리하고자 하는 것이지요.

 

 

이제 스크립트 파일을 추가한 후, 다음과 같이 패키지 실행 작업과 연결합니다.


 

스크립트 작업의 ReadWriteVariable 속성에 CheckFileExist RetryCnt라는 변수를 지정하고,


 

다음과 같은 스크립트를 입력합니다.

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Runtime

Imports System.IO

 

 

Public Class ScriptMain

 

             ' The execution engine calls this method when the task executes.

             ' To access the object model, use the Dts object. Connections, variables, events,

             ' and logging features are available as static members of the Dts class.

             ' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.

             '

             ' To open Code and Text Editor Help, press F1.

             ' To open Object Browser, press Ctrl+Alt+J.

 

             Public Sub Main()

                           '

                           ' Add your code here

        '

        If File.Exists("D:\PackageErrorCheck.log") Then

            Dts.Variables("CheckFileExist").Value = "Y"

            Dts.Variables("RetryCnt").Value = CInt(Dts.Variables("RetryCnt").Value) + 1

 

Else

                Dts.Variables("CheckFileExist").Value = "N"

        End If

                           Dts.TaskResult = Dts.Results.Success

             End Sub

 

End Class

 

, 위에서 설정한 Check 파일이 있을 때에는(=에러가 발생했을 때에는) CheckFileExist의 값을 “Y”로 설정하고, RetryCnt 값을 1 증가시킵니다.

 

임의로 자식 패키지의 스크립트 작업 2를 실패로 처리하고 패키지를 수행하면 다음과 같이 10번 반복되는 결과를 볼 수 있습니다.

 

다시 정상적으로 해당 작업을 성공으로 설정하면 한 번만 수행됩니다.


+ Recent posts