반응형

DelayValidation 속성을 이용하여 패키지 빨리 열기

 

Microsoft Premier Field Engineer

한대성

 

 

SSIS 패키지를 열 때, 가끔 시간이 아주 오래 걸리는 경우가 있습니다.

 

 

이 때 뭔가를 하려고 하면 아래쪽에는 다음과 같은 화나게 만드는 도움말이 나타납니다.

 

Visual Studio가 바쁜 건 알겠는데 나도 바쁘다고~!

 

이렇게 시간이 오래 걸리는 이유는 바로 유효성 검사 (Validation Check) 때문입니다. 유효성 검사는 질문들이나 강좌 글에서 몇 번 설명한 적이 있지만 다시 정리하는 차원에서 설명 드리겠습니다.

 

우선 이렇게 느린 원인부터 설명하면, 패키지를 열 때, SSIS는 자동으로 패키지 내부에 있는 각 작업들의 설정이 정확한 지를 체크합니다. 예를 들어 데이터 흐름 작업에서 특정 테이블로 데이터를 로딩하도록 해 놨는데, 해당 테이블이 존재를 하는지, DB 연결이 제대로 되는지 등 입니다.

 

만약 서버에서만 DB에 연결할 수 있는 상황에서, 서버에 있는 패키지를 로컬 PC로 복사해 와서 열어 볼 때 이와 같은 지연 현상을 자주 겪을 수 있습니다.

각 작업들에 대해 연결 정보가 정확한지 등을 체크하는데, 각 작업 별로 타임아웃이 발생할 때까지 기다리기 때문입니다. 타임아웃이 발생하면 BIDS에서는 사용자에게 친절하게도 다음과 같은 경고 메시지를 줍니다.


 

작업 개체들이 제법 많다면 패키지 열어보다가 쓰러질 수도 있습니다. (답답해서)

 

왜 저런 짓을 꼭 해야 하는 걸까요?

이유는 실컷 작업 돌리다가 에러를 발생하느니 시도하기도 전에 미리 경고를 주겠다는 목적입니다.

 

[작업 1] – [작업 2] – [작업 3] – [작업 4]

 

 이렇게 작업들이 연결되어 있는데, [작업 3]에서 사용하는 테이블이 없습니다. 이전 버전(DTS) 같은 경우는 작업 1 2가 끝나고 3이 되어서야 실패가 나는 걸 알 수 있습니다. 만약 작업 1 2가 시간이 엄청 오래 걸리는 작업이었다면? 다시 돌리든지, 아니면 작업 3부터 돌리도록 해야겠지요.

 

이런 수고(?)를 막기 위해 유효성 검사(Validation Check)라는 기능을 넣은 것입니다.

 

그럼 언제 검사를 하느냐?

 

1.     BIDS에서 패키지를 열 때

2.     패키지가 시작될 때

3.     해당 작업 개체가 시작될 때

입니다.

 

그럼 다음과 같은 경우는 어떨까요?

             [작업 1 – 임시 테이블 생성]

à [작업 2 - 데이터 흐름 작업 임시 테이블에 데이터 적재]

à [작업 3 – 임시 테이블 삭제]

 

작업 1이 시작되어야 테이블이 생성되고, 테이블이 생성되어야 작업 2인 데이터 흐름 작업이 수행된다고 할 때, 패키지를 열 때와 패키지가 시작되는 시점에서는 임시 테이블이 없기 때문에 작업 2에서 임시 테이블이 없다라고 유효성 검사 실패를 발생시킬 것이며, 이로 인해 패키지는 절대 수행이 안되게 됩니다.

 

그럼 어떻게 해야 하느냐? 작업 2의 유효성 검사를 미루어라. 언제까지? 해당 작업 개체, 즉 작업 2가 시작될 때까지.

그 속성이 바로 DelayValidation 옵션입니다.

작업 개체를 선택하고서 속성에 보면 기본값으로 False로 되어 있습니다. 이 속성을 True로 바꾸는 것이지요.



 

그러면 검사하는 3가지 경우 중, 1,2에 대해서는 검사를 하지 않게 됩니다.

 

이 속성은 패키지의 모든 개체뿐만 아니라 패키지 자체에 대해서도 설정이 됩니다.

패키지 자체, 즉 제어영역을 선택하고선 속성 중 DelayValidation True로 바꾸면 모든 개체들이 영향을 받을까요? 아닙니다. 그냥 제어 흐름 영역 자체에 대해서만 설정할 뿐 작업 개체나 연결 정보 등에는 영향을 미치지 않습니다.

 

그럼 패키지 내의 모든 개체들의 속성을 다 바꿔주고 싶은데?

원시적으로(^^) 일일이 개체들을 찍고선 속성을 바꿔주면 됩니다. 하지만 개체들이 엄청 많을 경우에는 힘들겠죠.

전 이렇게 합니다.

 

패키지 파일을 열기 전에 다음과 같이 View Code로 패키지를 엽니다. 이렇게 하면 패키지가 XML 파일 형태로 열립니다.

 

그런 다음, 찾아 바꾸기 메뉴를 이용해서

"DelayValidation">0</DTS:Property>   값을

"DelayValidation">-1</DTS:Property> 로 바꿉니다.



 

저장한 후, 열어보면 느끼실 수 있을 겁니다.

 

이러한 설정이 패키지 실행에 영향을 미치는 것은 아닌가 우려 되시나요?

패키지가 정상적으로 잘 돌아갔던 놈이라면 문제없습니다. , 앞에서 설명한 것과 같이 작업 3에서 테이블이 없는 경우, 패키지가 시작될 때 실패로 처리되는 것이 아니라 작업 3까지 와서야 실패가 된다는 차이는 있습니다.

 

 

반응형

+ Recent posts