### 作业异常无法删除解决方法 在数据库管理与维护的过程中,经常会遇到因各种原因导致的作业异常情况,其中一种常见的问题就是作业无法被正常删除。这种情况可能会阻碍日常维护工作的进行,甚至影响到数据库的整体性能。本文将详细介绍如何解决SQL Server中的作业异常无法删除的问题,并提供一个具体的解决方案。 #### 一、问题背景 在SQL Server环境中,系统管理员或DBA(Database Administrator)经常需要创建和管理定期执行的作业,这些作业可以是备份数据库、清理日志等任务。当某个作业不再需要时,通常的做法是将其删除。然而,在某些情况下,可能会遇到作业无法被正常删除的情况,这往往是因为作业与数据库内部的一些表存在关联关系,或者由于某些错误配置导致。 #### 二、解决方案 为了解决这个问题,我们可以采取以下步骤: 1. **准备工作:**确保当前用户拥有足够的权限来操作MSDB数据库。MSDB数据库主要用于存储SQL Server的所有系统级信息,包括作业、警报等。 2. **事务处理:**为了避免在执行删除操作过程中出现意外中断,建议使用事务来包裹整个删除过程,确保数据的一致性。 ```sql use [msdb] set nocount on begin tran ``` 3. **变量声明及赋值:** - 首先定义一个变量`@SubPlanName`,用来指定需要删除的作业名称。 - 查询与该作业相关的所有ID信息,如`@job_id`、`@subPlan_id`等。 ```sql declare @SubPlanName varchar(200) set @SubPlanName = 'shoes8' -- Get constraint foreign key columns declare @subPlan_id varchar(100), @job_id varchar(100), @msx_job_id varchar(100), @Schedule_id varchar(100) select @job_id = job_id, @msx_job_id = msx_job_id, @subPlan_id = subPlan_id from sysmaintplan_SubPlans where SubPlan_name = @SubPlanName ``` 4. **按顺序删除记录:** - 删除与`@SubPlan_id`关联的日志记录(`sysmaintplan_log`)。 - 删除指定名称的子计划(`sysmaintplan_SubPlans`)。 - 删除与`@Schedule_id`关联的调度(`SysSchedules`)。 - 最后删除与`@job_id`关联的作业(`sysjobs`)。 ```sql if (@SubPlan_id is not null and @SubPlan_id <> '') delete from sysmaintplan_log where SubPlan_id = @SubPlan_id if (@SubPlanName <> '' and @SubPlanName is not null) delete from sysmaintplan_SubPlans where SubPlan_Name = @SubPlanName if (@Schedule_id is not null and @Schedule_id <> '') delete from SysSchedules where Schedule_id = @Schedule_id if (@job_id is not null and @job_id <> '') delete from sysjobs where job_id = @job_id ``` 5. **刷新视图:**在完成上述步骤后,可能仍然能在`sysmaintplan_plans`视图中看到相关的维护计划记录。此时,可以通过执行删除视图中的记录来刷新视图内容。 ```sql delete FROM msdb.dbo.sysmaintplan_plans commit tran ``` 6. **检查执行结果:**使用`@@error`判断删除是否成功,并打印相应的提示信息。 ```sql if @@error <> 0 Print 'job failure;-(' else Print 'job down!;-)' set nocount off ``` 7. **进一步操作:** - 如果通过上述步骤仍然无法解决问题,还可以尝试使用更细致的步骤来进行删除。 ```sql USE [msdb] declare @job_name varchar(100) set @job_name = N'HostpitalTestPlan.Subplan_Reset' -- 删除日志记录 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 ``` #### 三、总结 通过以上步骤,我们可以有效地解决SQL Server中作业异常无法删除的问题。关键在于按照一定的顺序逐一解除作业与其他对象之间的关联,并确保所有的删除操作都在一个事务内完成,这样可以避免中间出现错误而导致的部分删除问题。此外,还需要注意的是,删除作业之前最好确认不再需要该作业及其相关联的数据,以避免误删重要信息。希望本篇文章能够帮助您有效解决作业异常无法删除的问题。






























use [msdb]
set nocount on
begin tran
declare @SubPlanName varchar(200)
set @SubPlanName='shoes8'
--Get constraint foreign key columns
declare @subPlan_id varchar(100),@job_id varchar(100)
,@msx_job_id varchar(100),@Schedule_id varchar(100)
select @job_id=job_id,@msx_job_id=msx_job_id,
@subPlan_id=subPlan_id from sysmaintplan_SubPlans where SubPlan_name=@SubPlanName
--Delete record by order
if (@SubPlan_id is not null and @SubPlan_id<>'')
delete from sysmaintplan_log where SubPlan_id=@SubPlan_id
if (@SubPlanName<>'' and @SubPlanName is not null)
delete from sysmaintplan_SubPlans where SubPlan_Name=@SubPlanName
if (@Schedule_id is not null and @Schedule_id <>'')
delete from SysSchedules where Schedule_id=@Schedule_id
if (@job_id is not null and @job_id<>'')
delete from sysjobs where job_id=@job_id
--After Above, you can still see these god damn maintnance plan in that tab
--now use code below to refresh the msdb view
delete


- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 物联网智能窗户系统的设计与实现.docx
- 大数据时代对地震监测预报问题的思考与分析.docx
- 大数据时代企业人事绩效管理创新.docx
- 大规模无线网建设工程中监理方的项目管理.doc
- 运用组态王软件作机械手.doc
- 浅析单片机、数字电路抗干扰措施.doc
- 提升中职计算机教学质量的几点感悟.docx
- 电气工程中自动化设备的抗干扰措施解析.docx
- 计算机辅助翻译(CAT)技术在翻译实践中的应用.docx
- 第九章-追寻赛伯家园网络文学价值取向的论文-社会文化论文.docx
- 浅论人工智能.docx
- 单片机原理及系统报告:C单片机的数字温计设计.doc
- c语言程序设计选择题库.docx
- 视频编解码技术有关知识汇总.docx
- 嵌入式系统课程设计.doc
- 菠菜科技玩转体育大数据.docx


