반응형

FTP 작업에서 파일 없는 경우 처리 방법

 

한대성

MS SQL Server MVP

에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자



 Question
FTP 전송 작업에서 원격 파일이 존재 하지 않을경우, 에러로 처리되는데, 에러를 막을 수 있는 방법이 있을가요..?
해당 서버에 파일이 올라올수도있고 없을수도 있어서 파일이 없다고 에러로 처리되면 안되거든요..ㅡ.ㅜ
이점이 안되면 ftp command text 파일만들어서 실행을...ㅡ.ㅜ



SSIS FTP 작업 에러 처리를 구현하는 방법에 대해 간단히 살펴보겠습니다.

 

 

만약 FTP 작업을 통해 FTP 서버에 있는 파일을 가져올 경우, 파일이 있는 경우에는 정상적으로 수행됩니다.

 

 

)  FTP 서버에 /Document/INVOICE_ADC.doc 이라는 파일이 있는 경우

 


 

 

) 파일이 없는 경우 (INVOICE_ADC1.doc 라는 파일은 서버에 없다.)

 



 


 

 

작업이 실패로 처리되는 대신, 파일이 없는 경우라도 정상적으로 성공으로 수행되며, 대신 다음 작업을 진행하지 않도록 설정하고자 한다면, 다음과 같은 방식을 이용하는 것은 어떨까 합니다.

 

 

1. 우선 FTP 작업의 성공 여부를 기록할 String 변수를 하나 추가합니다. 예제에서는 FileExistsYN이라고 하고, 기본값으로 “Y” 설정토록 하겠습니다.



 

2. FTP 작업을 설정한 , FTP 작업을 선택한 상태에서 속성 창에서 ForceExecutionResult 값을 None에서 Success 변경합니다. 이렇게 하면 작업이 실패하든 성공하든 무조건 결과는 성공으로 처리됩니다.




 

3. , 그럼 이제는 파일이 없을 경우, FileExistsYN 변수 값을 N으로 변경하는 것을 추가합니다. 이것은 어디서 설정할까요? 가져올 파일이 없는 경우, FTP 작업 개체는 에러를 발생하게 됩니다. 에러는 발생하였지만 2단계에서 설정한 ForceExecutionResult 속성에 따라 수행 결과는 성공으로 처리합니다. , 파일이 없는 경우에는 에러를 처리하게 되고, 변수의 값을 변경해 주면 되겠지요. 어디서? FTP 작업 OnError 이벤트 처리기에서 입니다.

FTP 작업 개체를 선택한 , 윗부분에 있는 이벤트 처리기를 선택합니다. 여러 이벤트 , OnError 이벤트를 선택합니다.



 

, 이제 이벤트 처리기 영역에 스크립트 작업을 추가한 , 다음과 같이 ReadWrite변수에 FileExistsYN 추가합니다.



 

아래에 있는 스크립트 디자인(S) 클릭해서 VSA , 다음과 같은 간단한 스크립트를 입력합니다.

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Runtime

 

Public Class ScriptMain            

 

             Public Sub Main()

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

                           Dts.TaskResult = Dts.Results.Success

             End Sub

 

End Class

 

 

 

4. VSA 닫고 다시 제어 흐름 영역으로 돌아온 다음, 아무 작업 개체를 FTP 작업과 연결합니다. 연결된 녹색 선을 더블 클릭한 나타나는 선행 제약 조건 편집기를 아래와 같이 설정합니다.




 

5. , 이제 패키지를 실행해 봅니다.

 

1) 파일이 있는 경우

                 

 

                  2) 파일이 없는 경우

                 

 

반응형

+ Recent posts