SQL SERVER代理作业删除失败问题

来源:互联网 发布:ubuntu 一直等待安装 编辑:程序博客网 时间:2024/05/19 12:26

因为数据库经常备份异常,所以留着。

SQL Server 2005上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败。

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

与维护计划有关的有四张表:
1.sysmaintplan_log:在维护计划运行后,会在此表中进行记录;
2.sysjobschedules:代理作业的作业信息
3.sysmaintplan_subplans:记录维护计划的子计划信息
4.sysjobs_view:相关的作业信息

这4张表有着PK和FK的关联关系,在删除作业时,就容易因为发生FK的冲突而导致失败。

具体的处理方法如下:
USE [msdb]
declare @job_name varchar(100)
set @job_name = N'HostpitalTestPlan.Subplan_Reset'

PS:这个步骤从来没试过,有同事试过,但是没有成功。


--为了保险起见,先查询这四张表的数据
select * from sysmaintplan_log
select * from sysjobschedules
select * from sysmaintplan_subplans
select * from sysjobs_view

@job_name就是作业名,一般为字符串,记得加上''

--删除在计划里面的日志
DELETE sysmaintplan_log
FROM sysmaintplan_subplans AS subplans INNER JOIN
sysjobs_view AS syjobs ON subplans.job_id = syjobs.job_id INNER JOIN
sysmaintplan_log ON subplans.subplan_id = sysmaintplan_log.subplan_id
WHERE (syjobs.name = @job_name)

--删除代理的作业
DELETE sysjobschedules
FROM sysjobs_view v INNER JOIN sysjobschedules o ON v.job_id=o.job_id WHERE v.name=@job_name

--删除子计划
DELETE sysmaintplan_subplans
FROM sysmaintplan_subplans AS subplans INNER JOIN
sysjobs_view AS syjobs ON subplans.job_id = syjobs.job_id
WHERE (syjobs.name = @job_name)

--删除作业
DELETE FROM msdb.dbo.sysjobs_view WHERE NAME = @job_name


0 0
原创粉丝点击