반응형

이벤트 및 이벤트 처리기

 

SSIS의 개발 환경이 Visual Studios에 통합되면서 다양한 부가 기능이 추가되었습니다. 그 중에서 이벤트이벤트 처리기 기능은 패키지 개발 및 운영 단계에서 매우 유용하게 사용할 수 있는 기능입니다.

 

SSIS 패키지를 VB.net이나 VC++ 등과 같은 어플리케이션이라 생각해 봅시다. 어플리케이션 소스 내의 클래스 또는 함수, 개체 등이 호출되어 실행될 때 다양한 이벤트가 발생합니다. 예를 들어 클래스가 생성되거나 실행될 때에는 OnCreate 또는 OnExecute 등과 같은 이벤트가 발생되며 에러가 발생될 때에는 OnError 이벤트가 발생됩니다.

 

SSIS 패키지도 이와 같은 개념으로 패키지 전체 및 개별 패키지가 실행될 때 이벤트가 발생됩니다. 여러 이벤트 중, OnError 이벤트를 고려해 보겠습니다. 패키지에서 지정한 위치에서 에러가 발생했을 때 OnError 이벤트가 발생되며, 시스템 변수에 저장된 이벤트 상세 정보를 이용하여 에러 처리 프로세스를 실행하도록 할 수 있습니다.

 

다음은 SSIS 패키지에서 발생되는 이벤트의 종류 및 간략한 설명입니다.

 

종류

이벤트

OnError

이 이벤트는 오류가 발생할 때 실행 개체에 의해 발생합니다.

OnExecStatusChanged

이 이벤트는 실행 상태가 변경될 때 실행 개체에 의해 발생합니다.

OnInformation

이 이벤트는 정보 보고를 위한 실행 개체의 유효성 검사 및 실행 중에 발생합니다. 이 이벤트에는 오류 또는 경고를 제외한 정보만 포함됩니다.

OnPostExecute

이 이벤트는 실행을 마친 바로 다음 실행 개체에 의해 발생합니다.

OnPostValidate

이 이벤트는 유효성 검사가 완료될 때 실행 개체에 의해 발생합니다.

OnPreExecute

이 이벤트는 실행되기 바로 전에 실행 개체에 의해 발생합니다.

OnPreValidate

이 이벤트는 유효성 검사가 시작될 때 실행 개체에 의해 발생합니다.

OnProgress

이 이벤트는 실행 개체의 진행 상태를 측정할 수 있는 경우 실행 개체에 의해 발생합니다.

OnQueryCancel

이 이벤트는 실행 중지 시기를 결정하기 위해 실행 개체에 의해 발생합니다.

OnTaskFailed

이 이벤트는 작업이 실패할 때 해당 작업에 의해 발생합니다.

OnVariableValueChanged

이 이벤트는 변수 값이 변경될 때 실행 개체에 의해 발생합니다. 이 이벤트는 변수가 정의되는 실행 개체에 의해 발생합니다. 변수에 대한 RaiseChangeEvent 속성을 False로 설정한 경우에는 이 이벤트가 발생하지 않습니다.

OnWarning

이 이벤트는 경고가 발생할 때 실행 개체에 의해 발생합니다

 

 

SSIS 개발 화면의 상단에 있는 이벤트 처리기 부분에서 이벤트에 대한 처리 작업을 수행할 수 있습니다. 왼쪽의 실행 파일 부분에서는 이벤트 처리기가 작동될 범위를 지정하며, 오른쪽의 이벤트 처리기 부분에서는 처리할 이벤트를 선택할 수 있습니다.

 

예를 들어 위의 그림의 경우, [데이터 흐름 작업]에 대한 OnError 이벤트를 처리하는 처리기를 선택한 것입니다.

 

각 이벤트 처리 수준은 계층으로 관리됩니다. 예를 들어, 전체 패키지 수준(위 그림에서는 MergeJoinSample)으로 OnError 이벤트 처리기를 설정하였다면, 이 이벤트 처리기는 패키지에서 발생하는 모든 에러 이벤트(OnError 이벤트)에 대해 수행하게 됩니다. 위의 그림과 같이 [데이터 흐름 작업]에 대한 OnError 이벤트 처리기를 설정한 경우, [데이터 흐름 작업]에 포함된 여러 작업이나 변환에서 발생한 OnError 이벤트만 처리하게 됩니다.

 

이벤트 처리기 작업 영역에서는 제어 흐름 영역이나 데이터 흐름 영역에서보다 훨씬 많은 시스템 변수를 제공합니다. 이는 발생된 이벤트의 세부 정보를 전달하기 위함입니다. 예를 들어, OnError 이벤트가 발생한 경우, 어떤 작업 개체 ID에서 발생되었으며([시스템::TaskID]), 에러 코드는 무엇이며([시스템::ErrorCode]), 에러 처리기가 시작된 시간이 언제인지([시스템::EventHandlerStartTime]) 등의 정보가 저장됩니다.

 

 

개발자는 이러한 시스템 변수에 저장된 값을 이용하여 이벤트 처리 작업을 구성할 수 있습니다.

 

 

이벤트 처리기를 이용한 작업의 예는 다음과 같습니다.

1.       앞서 언급한 바와 같이 패키지 내에서 에러가 발생되었을 때, 이를 처리하기 위한 용도로 사용될 수 있습니다. 예를 들어, FTP를 이용하여 파일을 가져오는 작업인 경우, 파일이 존재하지 않아서 에러가 발생되었을 때, OnError 이벤트 처리기를 이용하여 파일이 존재하지 않은 여러 가지의 이유를 확인하여 관리자에게 통보하는 작업을 구성할 수 있습니다.

2.       OnPreExecute, OnPostExecute 이벤트 처리기를 이용하여 패키지 전체 및 개별 작업의 시작 시간 및 종료 시간을 기록하는 작업을 구성할 수 있습니다. 패키지 전체 수준에서만 이러한 작업을 구성해 놓으면, 패키지 내에 여러 개의 작업 개체가 추가되더라도 별도의 작업 없이도 자동으로 수행 시간의 기록이 발생되어 관리 될 수 있습니다.

3.       OnVariableValueChanged 이벤트 처리기를 이용하여 패키지 내의 사용되는 변수의 값이 변경되는 사항을 관리할 수 있습니다. 이러한 정보는 변수 기반으로 한 패키지를 구성하였을 때, 어떠한 변수 값을 이용하여 패키지가 처리되었는지를 관리하는 데 사용할 수 있습니다.

4.       OnProgress 이벤트 처리기를 이용하여 각 작업의 실행중인 상태를 모니터링 할 수 있습니다. 예를 들어 데이터 변환 작업에 대해 이벤트 처리기를 구성한 경우, 현재 처리된 데이터의 처리량을 모니터링 할 수 있습니다.

 

 

반응형

+ Recent posts