Error message when you restore or attach an msdb database or when you change the syssubsystems table in SQL Server 2005: "Subsystem % could not be loaded"


Bug #: 425161 (SQBUDT)

Symptoms


Consider the following scenario. You perform one of the following actions in Microsoft SQL Server 2005:
  • You restore an msdb backup.
  • You attach an msdb database.
  • You change the information in the syssubsystems table in the msdb database.
The paths to the SQL Server Agent subsystem DLLs are stored in the msdb.dbo.syssubsystems table in the msdb database. The locations do not correspond to the current locations of the binaries for the instance of SQL Server 2005. In this scenario, an error occurs. The following error message may be logged in the SQL Server Agent log or in the Job step history:
Subsystem %s could not be loaded (reason: The specified module could not be found)
When this error occurs, jobs may fail. Additionally, the following error message may be logged in the Job steps history:
Unable to start execution of step 1 (reason: The %s subsystem failed to load [see the SQLAGENT.OUT file for details]; The job has been suspended). The step failed.
The following error is logged in the SQL Server Agent logs:
2006-01-24 14:02:41 - ! [125] Subsystem %s could not be loaded (reason: The specified module could not be found)

Resolution


To work around this problem, delete the entries from the msdb.dbo.syssubsystems table, and then repopulate the entries. The following steps will update the subsystem DLLs to the correct path based on the current install folder. To do this, follow these steps:
  1. In SQL Server Management Studio, run the following script.
    use msdb
    go
    delete from msdb.dbo.syssubsystems
    exec msdb.dbo.sp_verify_subsystems 1
    go
  2. Stop and then restart the SQL Server Agent service.