Tuesday, February 8, 2011

SSIS subsystem failed to load. The job has been suspended.

I came across a new one a month ago that I hadn’t seen before. I got a complaint from a developer that a job was hanging on one of our development servers. A consultant had set the server up before my time here, so I really didn’t know much about the install or configuration on this particular server.The error in the job history looked like this:


Step 1 of job '' (0x1077ED50A744154FFEEBC695E3C87432) cannot be run because the SSIS subsystem failed to load. The job has been suspended.


Additionally, the job had been suspended and we were unable to run it again. If we drop and recreate it, it would run, fail and suspend all over again.
Well I hadn't seen that one before so I did some high tech DBA debugging (i.e. google search).


The good news was that I got search results. The first link that I chased down was a kb article and it was regarding a similar error when you restore msdb on 2005. Well this was a 2008 R2 box that I had recently upgraded from 2008, but after some more digging I figured out that indeed the consultant who had built the instance originally had tried to duplicate another server by simply restoring msdb from that server. The key is the msdb.dbo.syssubsystems table and the msdb.dbo.sp_verify_subsystems undocumented stored procedure.


Looking at the syssubsystems table I verified that the paths listed for subsystem_dll did not exist on the server. However they did match the install path layout of another server.


To check the current file paths that SQL believes exist


select * from msdb.dbo.syssubsystems































subsystem subsystem_dllagent_exe
TSQL [Internal] [Internal]
ActiveScripting C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLATXSS.DLL NULL
CmdExec C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLCMDSS.DLL NULL
Snapshot C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLREPSS.DLL C:\Program Files\Microsoft SQL Server\100\COM\SNAPSHOT.EXE
LogReader C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLREPSS.DLL C:\Program Files\Microsoft SQL Server\100\COM\logread.exe
Distribution C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLREPSS.DLL C:\Program Files\Microsoft SQL Server\100\COM\DISTRIB.EXE
Merge C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLREPSS.DLL C:\Program Files\Microsoft SQL Server\100\COM\REPLMERG.EXE
QueueReader C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLREPSS.dll C:\Program Files\Microsoft SQL Server\100\COM\qrdrsvc.exe
ANALYSISQUERY C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLOLAPSS.DLL NULL
ANALYSISCOMMAND C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLOLAPSS.DLL NULL
SSIS C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLDTSSS.DLL C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
PowerShell C:\Program Files\Microsoft SQL Server\MSSQL10.QA1\MSSQL\binn\SQLPOWERSHELLSS.DLL C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\SQLPS.exe













The Fix:






use master
GO
--ALLOW updates
EXEC sp_configure 'allow updates', 1;
reconfigure with override;
GO
--select * from dbo.syssubsystems --(verify old values)
--DELETE syssubsystems
use msdb
GO
delete from msdb.dbo.syssubsystems
GO

--REPOPULATE syssubsystems
exec msdb.dbo.sp_verify_subsystems 1
GO
--select * from dbo.syssubsystems --(verify new values)
--DISABLE updates
use master
GO
EXEC sp_configure 'allow updates', 0;
reconfigure with override;
EXEC sp_configure;
















Links: