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, 에이전트 실행 에러, 하위시스템로드 에러
'SQL Server > SQL Server Tip' 카테고리의 다른 글
Database 손상시 Emergency 모드로 복구하기 (1) | 2015.07.23 |
---|---|
서버 그룹을 이용한 다중서버 쿼리하기 (0) | 2015.07.23 |
Verbose SQL Server Agent Logging (0) | 2015.07.23 |
Windows Event Log에 SQL Server Agent Log 기록 (0) | 2015.07.23 |
SQL Server Agent Error log 위치 변경 (0) | 2015.07.23 |