반응형

SQL Server Agent에서 CmdExec 오류

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012, 2014

 

SQL Server 마이그레이션 후 CmdExec 실행 시 다음과 같은 오류가 발생한다면 각 하위 시스템에해당하는 파일이 지정된 경로에 있는지 확인해 볼 필요가 있다.

Unable to start execution of step 1 (reason: The CmdExec subsystem failed to load [see the SQLAGENT.OUT file for details]; The job has been suspended). The step failed.

 

하위 시스템 경로에 dll 파일이 존재하지 않으면 다음과 같은 에러를 확인 할 수 있다.

  • 하위 시스템 'ActiveScripting' 로드할 수 없습니다 (원인: 지정한 모듈을 찾을 수 없습니다)
  • 하위 시스템 'CmdExec' 로드할 수 없습니다 (원인: 있는 지정 된 모듈을 찾을 수 없습니다)
  • 하위 시스템 '스냅숏' 로드할 수 없습니다 (원인: 있는 지정 된 모듈을 찾을 수 없습니다)
  • 로그 판독기' 하위 시스템을 로드할 수 없습니다 (원인: 지정한 모듈을 찾을 수 없습니다)
  • 하위 시스템 '배포' 로드할 수 없습니다 (원인: 있는 지정 된 모듈을 찾을 수 없습니다)
  • 하위 시스템 '병합'을 로드할 수 없습니다 (원인: 있는 지정 된 모듈을 찾을 수 없습니다)
  • 대기열 판독기' 하위 시스템을 로드할 수 없습니다 (원인: 지정한 모듈을 찾을 수 없습니다)
  • 하위 시스템 'ANALYSISQUERY' 로드할 수 없습니다 (원인: 지정한 모듈을 찾을 수 없습니다)
  • 하위 시스템 'ANALYSISCOMMAND' 로드할 수 없습니다 (원인: 지정한 모듈을 찾을 수 없습니다)
  • 하위 시스템 'Dts' 로드할 수 없습니다 (원인: 지정한 모듈을 찾을 수 없습니다)

 

이 문제를 해결하려면 각 하위 시스템이 올바른 위치를 가리키도록 msdb.dbo.syssubsustems 시스템 테이블에 포함된 하위 시스템 메타 데이터를 업데이트 해야 한다.

하위 시스템

Subsystem.dbll

Agent_exe

ActiveScripting

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlatxss90.dll

NULL

CmdExec

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlcmdss90.dll

NULL

Snapshot

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlrepss90.dll

C:\Program Files\Microsoft SQL Server\90\COM\Snapshot.exe

LogReader

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlrepss90.dll

C:\Program Files\Microsoft SQL Server\90\COM\Logread.exe

Distribution

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlrepss90.dll

C:\Program Files\Microsoft SQL Server\90\COM\Distrib.exe

Merge

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlrepss90.dll

C:\Program Files\Microsoft SQL Server\90\COM\Replmerg.exe

QueueReader

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlrepss90.dll

C:\Program Files\Microsoft SQL Server\90\COM\Qrdrsvc.exe

ANALYSISQUERY

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlolapss90.dll

NULL

ANALYSISCOMMAND

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqlolapss90.dll

NULL

Dts

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\binn\Sqldtsss90.dll

C:\Program Files\Microsoft SQL Server\90\DTS\binn\Dtexec.exe

 

다음 스크립트는 현재 msdb에 저장되어 있는 하위시스템 경로를 확인한다.

select * from msdb.dbo.syssubsystems

 

 

 

다음 스크립트는 하위 시스템 경로를 변경하는 것으로 e:에서 c:로 변경하는 예제를 포함하고 있다.

sp_configure "allow updates", 1

reconfigure with override

 

update syssubsystems

set subsystem_dll = replace(subsystem_dll,'E:\Program Files','C:\Program Files')

from syssubsystems

where subsystem_dll like 'E:\Program Files%'

 

sp_configure "allow updates", 0

reconfigure with override

 

--Restart SQL Server Agent

 

하위 시스템의 경로를 변경하였으면 SQL Server Agent 서비스를 반드시 재시작해야 한다.

 

 

[참고자료]

 

 

2014-06-03 / 강성욱 / http://sqlmvp.kr

 

 

SQLSERVER, mssql, 데이터베이스 강좌, SQL Server Agent, Agent CmdExec, msdb, 에이전트 실행 에러, 하위시스템로드 에러

반응형

+ Recent posts