因為從原來全部安裝在 C:\ 的 SQL Server 備份 msdb 後,restore 到安裝在 D:\ 的 SQL Server,除要注意 SQL Server 的 Build No 外,若有 Job 呼叫到外部子系統(例如 SSIS、Replication…等),也要一併注意 msdb.dbo.syssubsystems 的設定
select * from msdb.dbo.syssubsystems
–故意設定錯誤,將 DLL 與 EXE 都指定到錯誤的位置
update msdb.dbo.syssubsystems set subsystem_dll=’d:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\binn\SQLDTSSS.DLL’
where subsystem_dll=’c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\binn\SQLDTSSS.DLL’
update msdb.dbo.syssubsystems set agent_exe=’d:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe’
where agent_exe=’c:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe’
之後透過 Agent 執行 SSIS 封裝都會錯誤:
錯誤訊息:
無法啟動步驟 1 的執行 (原因: SSIS 子系統無法載入 [see the SQLAGENT.OUT file for details]; 已暫停作業
該 Job 會被暫停
一旦 Job 暫停,再執行都會直接放棄
解法是執行以下語法:
delete from msdb.dbo.syssubsystems
exec msdb.dbo.sp_verify_subsystems 1
再重新啟動 Agent 服務即可
參閱:http://www.sqlservercentral.com/Forums/Topic8379-7-1.aspx