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了。