반응형


SQL Agent에서 프로세스 실행하기 작업 패키지 수행

한대성

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

 
 

다음과 같은 질문이 있어서 관련된 사항에 대한 내용에 대해 소개합니다.

 

Question : SQL Server Business Intelligence Development Studio 상에서 패키지 내에 프로세스 실행 작업을 수행하는데, SQL Server Business Intelligence Development Studio에서 직접 패키지 실행으로 작업을 수행하면 bat 파일이 수행되는 것이 확인 가능한데, 해당 패키지를 agent 작업으로 등록해서 수행하면 나머지 작업은 정상적인데, 프로세스 실행 작업 부분만 수행이 안됩니다.

뭔가 추가적으로 설정해 줘야 되는 값이 있는 건가요?

 

전에 한 번 이것 때문에 애를 먹은 적이 있어서 한 번 명확히 하기 위해 테스트를 수행하였습니다.

 

다음과 같은 실행 파일을 만듭니다.

 

D:\test.bat

copy /Y source.txt target.txt

 

test.bat라는 파일을 실행시키면, source.txt라는 파일을 target.txt라는 이름의 파일로 복사를 수행하게 됩니다.

/Y 옵션은 기존 파일이 있는 경우에 덮어 쓸 것인지를 묻지 않도록 하는 옵션입니다.

 

, test.bat 파일을 실행시키면~획 하고 수행되면서 다음과 같이 target.txt 파일이 생성됩니다.

 

 

, 본론으로 들어가겠습니다.

SSIS에서 빈 패키지에 프로세스 실행 작업 개체를 추가한 후, d:\test.bat 파일을 실행하도록 설정합니다.

 

 

 

정확한 확인을 위해 target.txt라는 파일을 지운 후, 패키지를 수행해 보면 정상적으로 수행되는 것을 확인할 수 있습니다.

 

또한, DTEXECUI.exe 또는 DTEXEC.exe를 이용한 명령어 파일로 실행을 해도 정상적으로 수행됩니다.

 

그런데, 그런데, 그런데문제는 SQL Sever 에이전트에 작업으로 등록하면, 에러가 발생합니다. 이것 참

다음과 같은 에러가 발생합니다.

 

 

패키지에서 에러 정보를 남도록 한 후에 살펴보면 다음과 같이 애매모호한 메시지만 보여집니다.

PackageStart,DSHANNOTE,NT AUTHORITY\SYSTEM,Package,{103D9AE4-9704-400C-97D2-710E06CD6538},{5DA33BA8-8FC2-43B4-8290-8708331A2E77},2007-02-06 오후 11:19:20,2007-02-06 오후 11:19:20,0,0x,패키지 실행의 시작입니다.

 

OnError,DSHANNOTE,NT AUTHORITY\SYSTEM,프로세스 실행 작업,{62740483-F48F-4795-945A-0E654E523359},{5DA33BA8-8FC2-43B4-8290-8708331A2E77},2007-02-06 오후 11:19:20,2007-02-06 오후 11:19:20,-1073573551,0x,""에서 "D:\test.bat" ""() 실행하면서 필요한 프로세스 종료 코드는 "0"이었으나 사용된 코드는 "1"입니다.

 

돌죠~ㅎㅎ 돌았었습니다..저는^^

 

에러 원인부터 말하자면..

SQL Agent에서 패키지를 실행시킬 때에는 Working Directory가 지정되지 않은 경우 C:\Windows\System32에서 수행해 버립니다.

 

진짜? 확인을 위해 test.bat 파일을 다음과 같이 변경합시다.

cd

copy /Y source.txt target.txt

cd는 지정 디렉터리를 여는 명령어이지만, 대상 디렉터리 없이 cd만 수행하면 현재의 디렉터리 정보를 출력합니다.

 

, 그리고 SSIS의 프로세스 실행 작업에서 Argument 부분에 다음과 같이 실행 정보를 파일로 기록하는 Pipe를 지정합니다.

 >>D:\execlog.txt

, d:\test.txt 명령어 파일이 실행된 후의 결과를 D:\execlog.txt로 저장되도록 한 것입니다.

 

BIDS에서 실행한 후, 로그 파일의 결과를 살펴 봅시다.

 

D:\에서 실행되었습니다.

 

SQL Agent에서 실행한 후의 결과를 확인해보면 다음과 같습니다.

 

 

 

C:\WINDOWS\system32\ 에서 실행이 되었습니다. (이론이론이론.. 뭔일이다요..)

정확히 말해서는 D:\test.bat라는 폴더에 있는 명령어를 C:\WINDOWS\system32\ 에서 실행을 한 것이지요.

 

따라서 source.txt system32 디렉터리에는 없는 것이기에 명령어가 제대로 수행이 안된 것입니다. 명령어가 제대로 수행이 안되었기 때문에 결과값은 성공을 의미하는 0이 아니고 1로 나타난 것이고, 따라서 위와 같은 애매 모호한 에러를 출력하였습니다.

 

그럼 우짜스까..

 

SSIS 프로세스 실행 작업 속성 창의 WorkingDirectory라는 속성에 실행 파일이 있는 위치를 지정합니다.

본 예제에서는 D:\ 이겠지요.

 

SQL Agent에서 실행해 봅시다.

 

크헉~~ㅎㅎ

 

 

뭔가 제대로 나타난 것 같네요.

 

 

정리하자면,

프로세스 실행 작업을 이용할 경우, 실행할 명령어 또는 프로그램에 맞도록WorkingDirectory 속성값을 명확히 지정해야 합니다.

 

입니다.

 


반응형

+ Recent posts