MSSQL on Windows: Job step cannot be run because the subsystem failed to load

Microsoft.SQLServer.Windows.CollectionRule.Agent.Job_step_cannot_be_run_because_the_subsystem_failed_to_load_1_5_Rule (Rule)

A SQL Server job failed to run because the SQL Server Agent subsystem failed to load.

Knowledge Base article:

Summary

A SQL Server job failed to run because the SQL Server Agent subsystem failed to load.

Note that this rule does not work if SQL Server on Windows instance is monitored agentlessly.

Causes

The SQL Server Agent subsystem has been changed or corrupted.

Resolutions

Update the subsystem_dll in the msdb.dbo.syssubsystems table to point to the right location. For more information, see "syssubsystems (Transact-SQL)" in SQL Server Docs Online.

Overridable Parameters

Name

Description

Default Value

Allow Proxying

Specifies whether the module should collect events that do not originate from the computer that is specified in the ComputerName parameter.

No

Enabled

Enables or disables the workflow.

Yes

Priority

Defines Alert Priority.

1

Severity

Defines Alert Severity.

1

Element properties:

TargetMicrosoft.SQLServer.Windows.Agent
CategoryEventCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL on Windows: Job step cannot be run because the subsystem failed to load
Event ID: {2}. Step {3} of job '{4}' ({5}) cannot be run because the {6} subsystem failed to load. The job has been suspended.
CommentMom2017ID='{DA6B6DD4-A25C-4B19-95F5-4E48294B15F8}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

ID Module Type TypeId RunAs 
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ DataSource Microsoft.SQLServer.Windows.EventProvider Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.Windows.CollectionRule.Agent.Job_step_cannot_be_run_because_the_subsystem_failed_to_load_1_5_Rule" Target="SqlDiscW!Microsoft.SQLServer.Windows.Agent" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2017ID='{DA6B6DD4-A25C-4B19-95F5-4E48294B15F8}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Microsoft.SQLServer.Windows.EventProvider">
<ComputerName>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.Agent"]/ComputerName$</ComputerName>
<LogName>Application</LogName>
<AllowProxying>false</AllowProxying>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>Channel</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>Application</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>212</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.Agent"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.Windows.CollectionRule.Agent.Job_step_cannot_be_run_because_the_subsystem_failed_to_load_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Data/EventDisplayNumber$</AlertParameter3>
<AlertParameter4>$Data/Params/Param[1]$</AlertParameter4>
<AlertParameter5>$Data/Params/Param[2]$</AlertParameter5>
<AlertParameter6>$Data/Params/Param[3]$</AlertParameter6>
<AlertParameter7>$Data/Params/Param[4]$</AlertParameter7>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>