无法删除SQL作业

时间:2009-11-25 10:12:45

标签: sql jobs

我已禁用SQL 2005数据库上的日志传送,并删除了辅助服务器上的日志传送DB。但是,我无法通过T-SQL(sp_delete_log_shipping_primary_secondary,sp_delete_job)或使用辅助服务器上的管理工作室删除LSRestore_DB___作业。它不会去。查询持续执行了7个小时。 尝试禁用,仍然不删除。也重新启动了服务器。还尝试过任何人都可以帮我删除这个SQL工作吗?

2 个答案:

答案 0 :(得分:1)

有一篇好文章Can’t Delete Jobs。在文章中作者提供了一个解决问题的脚本,干得好!

`CREATE PROC dbo.DropJob
@JobName AS VARCHAR(200) = NULL 
AS 
DECLARE @msg AS VARCHAR(500);

IF @JobName IS NULL
BEGIN 
SET @msg = N'A job name must be supplied for parameter @JobName.';
RAISERROR(@msg,16,1);
RETURN;
END
IF EXISTS (
SELECT subplan_id FROM msdb.dbo.sysmaintplan_log WHERE subplan_id IN
( SELECT subplan_id FROM msdb.dbo.sysmaintplan_subplans WHERE job_id IN 
(SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = @JobName)))
BEGIN
DELETE FROM msdb.dbo.sysmaintplan_log WHERE subplan_id IN
( SELECT subplan_id FROM msdb.dbo.sysmaintplan_subplans WHERE job_id IN 
(SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = @JobName));

DELETE FROM msdb.dbo.sysmaintplan_subplans WHERE job_id IN
(SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = @JobName);

EXEC msdb.dbo.sp_delete_job @job_name=@JobName, @delete_unused_schedule=1;
END
ELSE IF EXISTS (
SELECT subplan_id FROM msdb.dbo.sysmaintplan_subplans WHERE job_id IN 
(SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = @JobName))
BEGIN 
DELETE FROM msdb.dbo.sysmaintplan_subplans WHERE job_id IN 
(SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = @JobName);

EXEC msdb.dbo.sp_delete_job @job_name=@JobName, @delete_unused_schedule=1;
END
ELSE
BEGIN 
EXEC msdb.dbo.sp_delete_job @job_name=@JobName, @delete_unused_schedule=1; 
END 
GO`

现在您可以使用以下内容调用SP;

`USE [msdb];
EXEC dbo.DropJob @JobName = N'Shrink_AWP_Databases.Subplan_1';`

答案 1 :(得分:0)

您是否已尝试设置允许编辑系统表,并直接进入包含作业信息的系统表并尝试从那里删除行?

确保在执行此操作时非常额外,不推荐,但有时需要直接编辑到系统表。