代码改变世界

sqlserver 删除job失败

2025-06-17 20:17  abce  阅读(71)  评论(0)    收藏  举报

删除一个维护计划,在sqlserver agent中发现对应的job仍热存在,且在尝试手动删除该job的时候,发现删除失败,报错信息如下:

复制一下错误信息:

标题: Microsoft SQL Server Management Studio
------------------------------

Job "incr_backup.Subplan_1" 的 删除 失败。  (Microsoft.SqlServer.Smo)

有关帮助信息,请单击: https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=16.200.48044.0&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=删除+Job&LinkId=20476

------------------------------
其他信息:

执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

------------------------------

DELETE 语句与 REFERENCE 约束"FK_subplan_job_id"冲突。该冲突发生于数据库"msdb",表"dbo.sysmaintplan_subplans", column 'job_id'。
语句已终止。 (Microsoft SQL Server,错误: 547)

有关帮助信息,请单击: https://docs.microsoft.com/sql/relational-databases/errors-events/mssqlserver-547-database-engine-error

------------------------------
按钮:

确定
------------------------------

mssql的维护计划是保存在msdb库中的,删除不掉与sysmaintplan_log ,sysmaintplan_subplans,sysmaintplan_plans三张表有关。其中:

·sysmaintplan_log: 在维护计划运行后,会在此表中进行记录

·sysmaintplan_subplans: 记录维护计划的子计划信息

·sysmaintplan_plans: 维护计划信息

 

首先查看一下维护计划以及子计划:

use msdb
select name,id from sysmaintplan_plans

select subplan_id,subplan_name,plan_id,job_id from sysmaintplan_subplans

查询结果为:

可以发现有一个多出来的子计划存在。将这条残留的子计划删除即可:

delete from  sysmaintplan_subplans where plan_id='1C809CEC-F2E1-402D-A006-1161EB5907B9';

然后就可以成功删除该job了。